程序中也没有赋初值为0xfe这一行啊。明明是 TH1=0xfd; TL1=0xfd;
是不是想问为什么都是赋值为0xfd啊,在串行通信时,T1定时器是用作波特率发生器的,且为方式2,这样,TL1是作为8位计数器的,而TH1是作为时间常数的寄存器的,可以实现TL1计数回0时自动重装时间常数,即将TH1中的数自动送给TL1,再次计数。
TH1,TL1是单片机的16位定时器T1,只有给TH1,TL1赋值,定时器就开始计数,才能控制串行通信的波特率,而这值是根据需要的波特率计算出来的。不是来显示波特率的,而是由这个值来决定波特率的。其实,这些都是单片机最基础的常识,虽说是新手,但是最基础的知识还是要自己看书学习的,总不能什么问题都来这里问吧!
TMOD是定时器的方式寄存器
0X20是0010 0000
对应的是意思是
定时器1不受外部中断的影响。(不相应外部中断)
定时器1处于定时方式
定时器1定时方式为“8位自动充值定时”
TH1=0xFF,TL1=0xFF,就是说定时器1的初始值是255,数到256后,从新赋值到255继续数。
也就是数一下中断一次数一下中断一次。
算波特率有2个公式
T1的溢出率=晶振的频率/(12*(256-初值))
T1的溢出率=波特率*32
所以呢 晶振的频率/(12*(256-初值))=波特率*32
这里呢初值是255,晶振是11.0592M。所以算呀算波特率是28800
这个我感觉没有啥好说的了,你应该仔细看看单片机data数据手册,你这个是串口中断装初值,TH1 = 0xFD,TL1= 0xFD,是波特率9600计算出来的初值,晶振是11.0592MHZ。
初值为0xfd,波特率是9600bps,初值为0xfe,波特率是14400bps