2019-07-15 09:09发布
zs920918 发表于 2017-12-17 16:09 还有一个问题,我看串口通信读写全靠一个SBUF,请问这个SBUF内存是多大,好像REN=1后就默认不停处于接收状态,如果我一直不停给他传输数据那么SBUF会接收一个字符就把上一个字符顶掉吗?如果想吧接收的数据都存起来应该怎么做?数据都放在哪? ...
zs920918 发表于 2017-12-17 17:05 刚刚又想到了两个问题: 1.如果我同时设置了2个计数器,方式都相同就是初值不一样,那么他会按照哪个速率进行传输 2.定时器定波特率应该是从初值开始计数,每溢出一次就传送一位,但这个定时器是从初始化就开始计时了,不是从传输开始计时的。比如初值是240,传送第一位时已经计数到245了,那么他就不是按照预设的那个速率 ...
最多设置5个标签!
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;
}
}
1.普通51芯片只能是用定时器1做波特率发生器,增强版51可以有多种选择,只要设置相关寄存器即可。
2.波特率(传输速率)与定时器溢出率相关但不相同,相差N倍。
串口的SBUF是1个字节大小,跟串口的帧格式协议定义一致。
串口的定时器只能指定一个,不会出现使用两个定时器的情况,因为定时器的出口不一样,串口使用的定时器的出口是串口单元,普通定时器的出口是定时器中断。
串口定时器是自动重装载模式,所以在定时器溢出后,也就是串口每发送一位后,定时器的初始值都是重新设置的,等于一次全新的计时。
一周热门 更多>