请教一下51串口通信问题

2019-07-15 09:09发布

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

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




2.png
1.png
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
4条回答
wulinwl
1楼-- · 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;       
        }
}
wulinwl
2楼-- · 2019-07-15 17:34
zs920918 发表于 2017-12-17 17:05
刚刚又想到了两个问题:
1.如果我同时设置了2个计数器,方式都相同就是初值不一样,那么他会按照哪个速率进行传输
2.定时器定波特率应该是从初值开始计数,每溢出一次就传送一位,但这个定时器是从初始化就开始计时了,不是从传输开始计时的。比如初值是240,传送第一位时已经计数到245了,那么他就不是按照预设的那个速率 ...

1.普通51芯片只能是用定时器1做波特率发生器,增强版51可以有多种选择,只要设置相关寄存器即可。
2.波特率(传输速率)与定时器溢出率相关但不相同,相差N倍。
人中狼
3楼-- · 2019-07-15 20:43
串口的定时器是给串口做发送位的时间间隔做定时的,原理和用法跟普通定时器一样,只是计时溢出后不产生中断,而是给串口部分信号,这时的定时器相当与串口单元的时钟信号。
串口的SBUF是1个字节大小,跟串口的帧格式协议定义一致。
串口的定时器只能指定一个,不会出现使用两个定时器的情况,因为定时器的出口不一样,串口使用的定时器的出口是串口单元,普通定时器的出口是定时器中断。
串口定时器是自动重装载模式,所以在定时器溢出后,也就是串口每发送一位后,定时器的初始值都是重新设置的,等于一次全新的计时。
勇哥-lzu
4楼-- · 2019-07-16 01:30
 精彩回答 2  元偷偷看……

一周热门 更多>