您的位置 首页 产品

51单片机串口问题

51单片机的串口,是个全双工的串口,发送数据的同时,还可以接收数据。当串行发送完毕后,将在标志位TI置1,同样,当收到了数据后,

51单片机的串口,是个全双工的串口,发送数据的一起,还能够接纳数据。
当串行发送结束后,将在标志位 TI 置 1,相同,当收到了数据后,也会在 RI 置 1。
不管 RI 或 TI 呈现了 1,只需串口中止处于敞开状况,单片机都会进入串口中止处理程序。
在中止程序中,要区别出来究竟是发送引起的中止,仍是接纳引起的中止,然后别离进行处理。
看到过一些书本和文章,在串口收、发数据的处理办法上,许多人都有不当之处。
接纳数据时,根本上都是运用“中止办法”,这是正确合理的。
即:每逢收到一个新数据,就在中止函数中,把 RI 清零,并用一个变量,告诉主函数,收到了新数据。
发送数据时,许多的程序都是运用的“查询办法”,便是履行 while(TI ==0); 这样的句子来等候发送结束。
这时,处理欠好的话,就或许带来问题。
看了一些网友编写的程序,发现有如下几条简单犯错:
1.有人在发送数据之前,先封闭了串口中止!等候发送结束后,再翻开串口中止。
这样,在发送数据的等候期间内,假如收到了数据,将不能进入中止函数,也就不会保存的这个新收到的数据。
这种处理办法,就会遗失收到的数据。
2.有人在发送数据之前,并没有封闭串口中止,当 TI = 1 时,是能够进入中止程序的。
可是,却在中止函数中,将 TI 清零!
这样,在主函数中的while(TI ==0);,将永久等不到发送结束的标志。
3.还有人在中止程序中,并没有区别中止的来历,反而让发送引起的中止,履行了接纳中止的程序。
对此,做而论道宣布自己常用的办法:
接纳数据时,运用“中止办法”,铲除 RI 后,用一个变量告诉主函数,收到新数据。
发送数据时,也用“中止办法”,铲除 TI 后,用另一个变量告诉主函数,数据发送结束。
这样一来,收、发两者根本共同,编写程序也很标准、易懂。
更重要的是,主函数中,不必在那儿死等发送结束,能够有更多的时刻检查其它的标志。

实例:
求一个PC与单片机串口通讯的程序,要求如下:
1、假如在电脑上发送以$开端的字符串,则将整个字符串原样回来(字符串长度不是固定的)。
2、假如接纳到1,则将P10置高电平,接纳到0,P10置低电平。(用来操控一个LED
单片机是STC89C52RC/晶振11.0592/波特率要求是9600或4800。谢谢!
问题弥补:或许会将【$ABCD,123456,987654ccc,aasdasd,aaaa,sssd,4D】这样的字符串(字符串长度约为50-150个字符)传送给单片机,只能能原样回来。

最佳答案:
下列程序,现已调试成功。
#include
sbit LED = P1^0;
unsigned char UART_buff;
bit New_rec = 0, Send_ed = 1, Money = 0;
//———————————————-
void main (void)
{
SCON = 0x50; //串口办法1, 8-n-1, 答应接纳.
TMOD = 0x20; //T1办法2
TH1 = 0xFD; [url=]//9600bps@11.0592MHz[/url]
TL1 = 0xFD;
TR1 = 1;
ES= 1; //开中止.
EA= 1;
while(Money == 0); //等着交费,呵呵,等着接纳$.
while(1){
if ((New_rec == 1) && (Send_ed == 1)){//假如收到新数据及发送结束
SBUF = UART_buff; //那就发送.
New_rec = 0;
Send_ed = 0;
} }
}
//———————————————-
void ser_int (void) interrupt 4
{
if(RI == 1) {//假如收到.
RI = 0; //铲除标志.
New_rec = 1;
UART_buff = SBUF;//接纳.
if(UART_buff == 1)LED = 1;
if(UART_buff == 0)LED = 0;
if(UART_buff == $)Money = 1;
}
else{ //假如送毕.
TI = 0; //铲除标志.
Send_ed = 1;
}
}
//———————————————-

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/xinpin/chanpin/259129.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部