请教一下51串口通信问题

2019-07-15 09:09发布

本人小白,今天看书的时候给了一个例程,如图

我看到了设定定时器但是没有定时器中断。后边解释说因为定时器的模式是方式1,自动重置所以中断里什么都不用做,所以不需要中断。但是我看了下如果没有中断那么这个定时器在这个程序里完全没有意义啊,只是一个人在那不停计时,其他地方也没有调用他。
按前文将的是应该用定时器来控制波特率,请问这是怎么控制的,谢谢大神。




2.png
1.png
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
4条回答
wulinwl
2019-07-15 15:24
zs920918 发表于 2017-12-17 16:09
还有一个问题,我看串口通信读写全靠一个SBUF,请问这个SBUF内存是多大,好像REN=1后就默认不停处于接收状态,如果我一直不停给他传输数据那么SBUF会接收一个字符就把上一个字符顶掉吗?如果想吧接收的数据都存起来应该怎么做?数据都放在哪? ...

1.这是用定时器1做串口通讯的载波信号源,不需要开定时器1中断,只要开串口中断就可以了。一般应用只要会设置相关寄存器就行了,不必深究内部机理。
2.对于串口可以理解为是单片机的一个外围硬件,SBUF在物理上是两个8位寄存器共用一个地址,分别用于发送和接收。
3.如果想把接收的数据都存起来可以定义一个缓存数组保存SBUF接收到的数据。例如:
void ser() interrupt 4
{
        static unsigned char num=0;       
        RI=0;
        rec_buf[num]=SBUF;
        num++;
        if(num>=6)
        {
                num=0;
                flag=1;       
        }
}

一周热门 更多>