51单片机串口的问题

时间:2013-01-16来源:网络


即想每次读入缓冲区内容后,送回上位机,然后再送回一个字母o,以此来判断单片机读入缓冲区内容的是每次读一个字节还是能够一次性都读完,运行结果为:

上位机发送11223344,单片机传回的是11223344o
看来单片机每次串口接收终端后,缓冲区中能把全部数据读入,但是SBUF只有一个字节,怎么会能够都读入进来呢?
-------------------------------------
把中断函数里面的内容继续修改为:

if(RI) // 判断是接收中断产生

{

RI=0; // 标志位清零

Temp=SBUF; // 读入缓冲区的值

P1=Temp; // 把值输出到 P1 口,用于观察

SBUF=Temp; // 把接收到的值再发回电脑端

while(!TI);

TI=0;

SBUF='o';

while(!TI);

TI=0;

}
运行结果为:
上位机用串口助手发送11223344,单片机收到后,传回串口助手,内容显示为1o1o2o3o4o
这就不明白了。
上位机发送的数据单片机每次应该只能收到一个字符,然后下一个字符会触发一个新的接收中断,如此经过多次中断处理后才能收到完整的内容,不知道我这么理解是否正确。请指点,谢谢。

NE5532回复:

楼主在犯一个常见错误——在接收中断里面等发送,接收缓冲区溢出了咋办?

楼主:确实如此,但是
RI=0; // 标志位清零

Temp=SBUF; // 读入缓冲区的值

P1=Temp; // 把值输出到 P1 口,用于观察

SBUF=Temp; // 把接收到的值再发回电脑端

while(!TI);

TI=0;

SBUF='o';
怎么就能全部收到11223344,而且最后能加一个字符o

NE5532版主:

在错误的东西基础上研究如何错误没有任何意义,正确只有一种,错误有无数种。你实在要找是怎么错的,可能找得到,但是对解决问题意义不大,用来培养自己熟悉单片机还成。

中断倒不是不能在里面做事,是看在做事的同时,外面还有没有事要做,如果没有,呆里面也没问题。具体问题具体分析,不能胡子眉毛一把抓。总的来说中断服务程序是尽量短。

1 2

关键词: 51单片机 串口中断 缓冲区

加入微信
获取电子行业最新资讯
搜索微信公众号:EEPW

或用微信扫描左侧二维码

相关文章

查看电脑版