这里暂且不说其他工作方式,以后有时间补上。仅总结下STC15串口工作方式1的一些注意点。
串口1:
setp1 波特率发生器:
T2定时器(默认)、T1定时器: 设置位:S1ST2(AUXR.0),1--T2,0--T1,此位复位值为1。
12T模式(默认):通过T2x12(AUXR.2),T1x12(AUXR.6)位确定,0--12T模式,1--1T模式;这两位复位值位0。
(这里可能有点模糊, 解释一下:所谓1T模式就是T1X12位置1,相当于T1速度提高12倍,原来计数加1需要12T,现在只需要1T)
16位自动重装(默认):即T1定时器工作方式0,STC15这里是自动重装的。T2的不用设置TCON,固定为16位自动重装。
8位自动重装(可选):如果用8位重装,只能通过S1ST2位选择T1定时器。然后把T1定时器设置为工作方式2。为了与传统8051程序兼容
setp2 设置波特率:
这一步用T2定时器来说明,T1定时器的设置方法与其完全相同。
情况1:16位重装模式下
波特率 = T2溢出率 / 4
其中,T2溢出率 = 1 / 溢出周期 = 1 / ( 时钟周期 * 计数次数 ) = Fosc / 计数次数 ;
则
计数次数 = Fosc / 波特率 / 4
[T2H,T2L] = ( 65536 - 计数次数 ) = 65536 - Fosc / 波特率 / 4
(Fosc是晶振频率,如果T2定时器工作在12T模式下Fosc需除以12)
注意:STC15的16位重装计数波特率和SMOD无关,与传统51不同 ,如果用T1的8位重装计数的话与传统51计算方法是一样的。
情况2 :8位自动重装计数
与传统的相同: 波特率 = ( 2^smod / 32 ) * Fosc / ( 256 - TH1 )
setp3 设置串口模式启动串口
串口模式工作方式1 设置SCON为0x40
开启定时器2:T2R(AUXR.4)置1
关闭定时器2中断允许:ET2(IE2.2)置0
定时器1的不多讲了
示例:串口1,晶振为FOSC,波特率为BAUD,定时器用定时器1
AUXR |= 0x40;
AUXR &= ~0x01;
TMOD &= ~0xF0;
SCON = 0x40;
TL1 = (65536 - (FOSC/4/BAUD));
TH1 = (65536 - (FOSC/4/BAUD))>>8;
TR1 = 1;
ET1 = 0;
ES = 1;
REN=1;