标题:
单片机新手入门,不太明白串口!帮忙解答,谢谢
[打印本页]
作者:
SXP210624
时间:
2020-3-6 20:39
标题:
单片机新手入门,不太明白串口!帮忙解答,谢谢
晶振:11.0592M 波特率:9600B/s 波特率发生器:定时器1(8位自动装载) 芯片:STC89C52
串口通信中断程序:void SerialPort_breakoff() interrupt 4{
uchar date = 0;
date = SBUF;
//while(!RI)
RI = 0; //接收完成时,由软件复位
SBUF = date;
while(!TI);
TI = 0; //发送完成时,由软件复位
}
若要把“//while(!RI)”改成while(!RI)。为什么PC发送一个数据后,无法发送第二个数据;并且同时PC的接收端多次重复第一个数据?
作者:
huang123456789
时间:
2020-3-6 23:26
不停在复位
作者:
csmyldl
时间:
2020-3-7 01:49
这要看你的主程序是如何编写的,一个不完整的程序他人是无法给你正确的答案的
作者:
wulin
时间:
2020-3-7 08:23
在这里while(!RI)就是一赘句,必须去掉。因为只有RI=1才能使CPU响应串口接收中断,不需要再次判断。可在接收中断中直接软件复位RI=0;。
如果非得画蛇添足加while(!RI)则必须加分号while(!RI);,否则RI永远无法清0。
不加分号语句含义就成
while(!RI)//此时RI=1,!RI就是为假,无循环条件,不执行花括号内容,直接跳过。
{
RI = 0;
}
所以接收中断结束后RI还是1,就会重复进入接收中断并重复回传第一个数据。
作者:
zhy123654
时间:
2020-3-7 08:29
你那个括号后面少了个冒号,所以就和下面那一句组成了一个无限循环,
作者:
想进步要学习
时间:
2020-3-7 09:02
while(!RI)
RI=0;
//当RI=1时,跳出while循环。没分号的话,上面RI=0是在while内的指令。
和
while(!RI);
RI=0;
是不一样的
作者:
yyh_sd
时间:
2020-3-7 09:29
这样加个冒号,你的循环写错了,和下一行作为一个循环了
while(!RI);
RI = 0; //接收完成时,由软件复位
作者:
TTQ001
时间:
2020-3-7 09:49
软件复位, RI = 0;
循环条件不满足, while(!RI) 以及以下程序行不执行, 直接跳过
作者:
haierzaifei11
时间:
2020-3-7 09:52
组成了一个无限循环
作者:
xianming
时间:
2020-3-7 15:43
while(!RI) 后面少了一个分号,c语言分号表示空语句,如果没有分号,就会是下面一句在循环
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1