|
本帖最后由 Michael1999 于 2018-4-2 10:46 編輯
單片機萌新,剛學習串口通信,現在實現了將單個字符數據發送到單片機再返回PC,但是換成字符串數據實現不了。
我大致的思路是,變量定義為字符數組,一個個字符發送,以 '\0' 為終點,與代碼中發送字符串數組 str[] 類似。
但是現象,就是在死循環了。
以下是我的代碼:
#include <reg52.h>
typedef unsigned char uchar;
uchar str[]={"Receive: "};
void UartInit() //初始化
{
SCON=0x50; //SM1=1,方式1;REN=1,使允許接收;
TMOD=0x20; //定時器1,方式2;
PCON=0x80; //波特率倍增;
TH1=0xf3; //波特率為4800;
TL1=0xf3;
ES=1; //打開串口中斷
EA=1; //打開總中斷
TR1=1; //啟動定時器
}
void main() //主函數
{
UartInit(); //初始化
while(1);
}
void Uart() interrupt 4 //中斷函數
{
uchar receiveData[100],i,j; //定義字符數組receiveData[]用于存放接收的字符串
while(str!='\0') //在返回數據前加“Receive: ”
{
SBUF=str; //從字符數組中取字符
i++; //自加,發送下一位的字符
while(!TI); //是否發送成功
TI=0; //若發送完畢,TI清零,等待下一次發送中斷
}
i=0; //i清零,到下一組數據時進行加“Receive: ”
while(receiveData[j]!='\0') //將字符數組中的數據逐個字符接收再發送
{
receiveData[j]=SBUF; //接收字符
RI=0; //接收完畢,RI清零,等待下一次接收
SBUF=receiveData[j]; //發送字符
j++; //自加,接收下一位的字符
while(!TI) //是否發送成功
TI=0; //若發送完畢,TI清零,等待下一次發送中斷
}
j=0; //j清零,等待下一組數據進行接收與發送
}
而把 receiveData 定義為uchar型變量,然后把紅色部分代碼替換成以下代碼,能實現字符數據的通信:
receiveData=SBUF;
RI=0;
SBUF=receiveData;
while(!TI);
TI=0;
附件里是兩種實現的情況,字符數據是成功的,然而字符串數據失敗了。
求過路大神出手相助!
|
-
-
錄屏.rar
2018-4-2 10:46 上傳
點擊文件名下載附件
1.38 MB, 下載次數: 10
|