欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
STC15W204S單片機串口程序哪里有問題?無論發送什么,都只是返回 沒有接收數據
[打印本頁]
作者:
chaoself
時間:
2023-11-25 00:53
標題:
STC15W204S單片機串口程序哪里有問題?無論發送什么,都只是返回 沒有接收數據
如上代碼,發送A03_Ligt01Off_#沒反應,無論發送什么,都只是返回“沒有接收數據!”。請問代碼是哪里出錯了?
#include "stc15.h"
#include"periphs.h"
#include"typedefs.h"
uchar BYTE;
uint WORD;
char RecvString_buf[16]; //定義數據包長度為15個字符
#define datapackage_headflag 'A' //用于串口通信時,定義數據包頭部的驗證標記
#define FOSC 11059200L //系統頻率
#define BAUD 9600 //串口波特率
void UartInit(void) //9600bps@11.0592MHz
{
SCON = 0x50; //8位可變波特率 串口工作模式1
T2L = (65536 - (FOSC/4/BAUD)); //設置波特率重裝值
T2H = (65536 - (FOSC/4/BAUD))>>8;
AUXR = 0x14; //T2為1T模式, 并啟動定時器2
AUXR |= 0x01; //選擇定時器2為串口1的波特率發生器
ES = 1; //使能串口1中斷
EA = 1;
}
/*----------------------------
發送串口數據
----------------------------*/
void SendData(uchar dat)
{
SBUF = dat;
while(TI == 0);
TI = 0;
}
/*----------------------------
發送字符串
----------------------------*/
void SendString(char *s)
{
while (*s) //檢測字符串結束標志
{
SendData(*s++); //發送當前字符
}
}
//串口接收函數
__bit ReceiveString()
{
char * RecStr=RecvString_buf;
char num=0;
unsigned char count=0;
loop:
*RecStr=SBUF;
count=0;
RI=0;
if(num<14) //數據包長度為15個字符,嘗試連續接收15個字符
{
num++;
RecStr++;
while(!RI)
{
count++;
if(count>130)return 0; //接收數據等待延遲,等待時間太久會導致CPU運算閑置,太短會出現"數據包被分割",默認count=130
}
goto loop;
}
return 1;
}
__bit Deal_UART_RecData() //處理串口接收數據包函數(成功處理數據包則返回1,否則返回0)
{
if(RecvString_buf[0]==datapackage_headflag&&RecvString_buf[14]=='#')
{
if(RecvString_buf[1]=='0')
{
LED=1;
SendString("發送成功!\r\n");
}
else
{
LED=0;
SendString("發送失敗!\r\n");
}
}
return 0;
}
/*----------------------------
UART 中斷服務程序
-----------------------------*/
void Uart() __interrupt(4)
{
if(ReceiveString())
{
//數據包長度正確則執行以下代碼
Deal_UART_RecData();
}
else
{
//數據包長度錯誤則執行以下代碼
//LED=!LED;
SendString("沒有接收數據!\r\n");
}
RI=0; //接收并處理一次數據后把接收中斷標志清除一下,拒絕響應在中斷接收忙的時候發來的請求
}
/***************************
主函數
***************************/
void main()
{
EA=1;
UartInit();
while(1);
}
復制代碼
作者:
aking991
時間:
2023-11-25 09:19
你的中斷處理程序不對,比如那個num這個變量,你無論怎么運行它都是0,建議你修改中斷處理程序,中斷里只負責接收存入緩存,當接收完一幀數據后再利用起時機制在主程序中判斷接收的數據是否你想要的
作者:
coody_sz
時間:
2023-11-25 21:31
可以參考測試STC官方的例程,串口1使用定時器2的程序,STC-ISP里的范例程序就有,可以直接下載HEX文件測試。
作者:
hy47566398
時間:
2023-11-27 17:30
while(!RI) 里加個Delay()試試
歡迎光臨 (http://www.raoushi.com/bbs/)
Powered by Discuz! X3.1