|
本帖最后由 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;
附件里是两种实现的情况,字符数据是成功的,然而字符串数据失败了。
求过路大神出手相助!
|
|