51单片机串口中断的两种方式中出现的问题

phangbob 2016-10-29 02:33:12
串口中断的方式有三种,其中两种是 查询方式 以及 中断方式
其中涉及一个问题,就是当我使用查询方式的时候, 我开启了 串口中断,只是开始了中断,并没有串口中断函数
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
void serialportinit()
{
EA=1;//中断全开
ES=1;//串口中断开
TMOD=0x20;//定时计数器1,8位自动装载计数器,作用是产生波特率
SCON=0x70;//串口使用工作模式1,8位UART,波特率可变
PCON|=0x00;//计算波特率中的smod位在PCON寄存器中
TH1=0xfd;//设置串口波特率为9600bps;
TR1=1;//定时计数器1开启
}

void main()
{
uchar ch;
serialportinit(); //串口初始化
while(1)
{
if(RI)
{
ch=SBUF;
RI=0;
SBUF=ch;
}
}
}



效果如上图。

问题:
1,为何第一组数据(123),一直是只有23发送回来?

2,观察了串口工具接收的数据,除了第一组数据一直是23,后面的数据也有错误的时候(13 12等),搜索的结果说是在使用查询方式的时候,需要把串口中断关闭,原因是什么?能详细说下这个 处理 的过程 吗??谢谢


PS:学习心态提问,先不考虑 说采取哪种方式好, 仅想了解出现以上两个问题的原因,还有,本人还是贵网站菜鸟哈,给分不高,见谅。 虚心讨教,谢谢。
...全文
844 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
phangbob 2017-07-14
  • 打赏
  • 举报
回复
结贴结贴。哈哈
phangbob 2016-11-01
  • 打赏
  • 举报
回复
引用 1 楼 wangfan027 的回复:
你怎么接线的? 用串口精灵不停的给单片机发“123”? 这种情况下设个时间间隔,不然 if(RI) { ch=SBUF; 这两条之间SBUF可能已经刷新过了 还是直接TX接RX? 如果是这样的话那第一个“123”你怎么发出来的?
谢谢,嗯嗯,是TX,RX,我是在串口助手给单片机发送数据,然后,再发送回给串口助手。还有,我不是连续发的,是手动发的。
dceacho 2016-10-31
  • 打赏
  • 举报
回复
你怎么接线的? 用串口精灵不停的给单片机发“123”? 这种情况下设个时间间隔,不然 if(RI) { ch=SBUF; 这两条之间SBUF可能已经刷新过了 还是直接TX接RX? 如果是这样的话那第一个“123”你怎么发出来的?

27,511

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧