试试下列程序,这时用中断发送的。
#include<reg51h>
#define uchar unsigned char
uchar txt[] = "hello";
uchar i = 0;
void main(void)
{
PCON = 0X00;
SCON = 0X50;
TMOD = 0X20;
TH1 = 0XFD;
TL1 = 0XFD;
TR1 = 1;
EA = 1;
ES = 1;
TI = 1;
while(1) {
if(i == 6) {
i = 0;
TI = 1;
}
}
}
void uart() interrupt 4
{
if(RI == 1) RI = 0;
if(TI == 1) {SBUF = txt[i++]; TI = 0;}
}
本程序,可以用串口助手接收。收到的是:hellohellohellohellohello
SBUF = p;TI = 0;
这里的SBUF与TI都没有定义,应该不在这个函数里。猜测,SBUF,是发送缓冲区。TI是发送标志位。当发送缓冲区有字符时,等待发送标志位为0。也即这个标志位为0的时候,这个字符已经发送出去了。然后,p++,SBUF=p,再发送下一个字符。
全部的循环,直到遇到字符串的结束标志'\0'。也即最后一个字符之后的字符串结束标志,这个发送函数也就执行完了。
while(1) //循环
{
while(RI0==0); //RI0=0表示未收到数据,则一直等待,直到收到数据,即RI0=1
a=SBUF0; //SBUF0是收发寄存器。即:收到的数据是存在它里面,所以令a=SBUF0,即将收到的数取到a里面
RI0=0; //清除收到数据标识
if(a!='\0') //所收到的数据有效
{
SBUF0=a; //再将收到的数据发送出去 如上面所述,SBUF0很好玩,收时是收到它里面,发时也是发到它里面。
while(TI0==0); //TI0是发送是否成功的标识。TI0为0,表示发送未完成,等待,直到发送完成。
TI0=0; //清除发送完成标志
a='\0'; //将a清空
}
}
根据200smart的通信协议和指令集。发送指令之后,200smart会回复一个响应报文,需要在串口调试工具上正确接收并打印出来,根据200smart的通信协议和指令集,可以解析出响应报文中的具体数据内容。报文解析不仅需要对200smart的协议和通信规则有深入了解,还需要对串口通信和相应的软件开发领域有足够的技术实力和经验。
以上就是关于简单51单片机串口程序全部的内容,包括:简单51单片机串口程序、串口通信的一个子程序,求注释、c8051f340单片机串口通讯的一段小程序中的一部分,新手不明白什么意思,希望高手能一行行指点下等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)