串口中断的方式有三种,其中两种是
查询方式 以及
中断方式。
其中涉及一个问题,就是当我使用
查询方式的时候, 我
开启了 串口中断,只是开始了中断,并没有串口中断函数:
#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:学习心态提问,先不考虑 说采取哪种方式好, 仅想了解出现以上两个问题的原因,还有,本人还是贵网站菜鸟哈,给分不高,见谅。 虚心讨教,谢谢。