這里暫且不說其他工作方式,以后有時間補上。僅總結下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;