1、Mode 2:波特率发生器
串口方式1和3的波特率计算如下:
波特率bps=振荡器频率freq/[32*(65536-(RCAP2H, RCAP2L))]
则:RCAP2=65536-(freq/32s)
如果freq=11.0592MHZ,bps=9600,则:RCAP2 = 65500
RCAP2H = 255;RCAP2L = 220
此时的程序设置如下:
uint a, bps = 96; // 9600 bps SCON |= 0x50; // 0101 0000 串口方式1,允许接收 a=3456s; a=~a; RCAP2H = a/256; RCAP2L = a; T2MOD=0x00; // T2CON = 0 0 1 1 0 1 0 0 = 0x34 // TF2 EXF2 RCLK TCLK EXEN2 TR2 C/T2 CP/RL2 T2CON=0x34; // TF2=0;EXF2=0;RCLK=1;TCLK=1;EXEN2=0;TR2=1;C/T2=0;CP/RL2=0 EA = 1; ES = 1; TI = 1;
2、Mode 0:自动装载16位定时器
// 10000周期定时
#define MSB_reload_value 216 /* msb reload value exemple */ #define LSB_reload_value 240 /* lsb reload value exemple */ T2EX=1; TH2=MSB_reload_value; // Init msb_value TL2=LSB_reload_value; // Init lsb_value RCAP2H=MSB_reload_value; // reload msb_value RCAP2L=LSB_reload_value; // reload lsb_value EA=1; // interupt enable ET2=1; // enable timer2 interrupt // T2CON = 0 0 0 0 0 1 0 0 = 0x04 // TF2 EXF2 RCLK TCLK EXEN2 TR2 C/T2 CP/RL2 T2CON = 0x04;