简单51单片机串口程序

简单51单片机串口程序,第1张

试试下列程序,这时用中断发送的。

#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单片机串口通讯的一段小程序中的一部分,新手不明白什么意思,希望高手能一行行指点下等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/10087688.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-05
下一篇 2023-05-05

发表评论

登录后才能评论

评论列表(0条)

保存