具體代碼如上,為什么在串口初始化函數里,TI要被置為1呢?還有,在Uart_SendB函數里,為什么要開頭清零一次TI,末尾再清零一次TI?
單片機源程序如下:
- #include <stc15f2k60s2.h>
- #include <absacc.h>
- #include <intrins.h>
- #include <stdio.h>
- void UartInit(void);//串口初始化函數。
- void Uart_SendB(unsigned char us);//串口單個字節發送函數。
- void main(void)
- {
- XBYTE[0xA000]=0;
- UartInit();
- EA=1;
- while(1)
- {
- Uart_SendB('a');
- }
- }
- void UartInit(void) //9600bps@12.000MHz
- {
- SCON = 0x50; //8位數據,可變波特率
- AUXR &= 0xBF; //定時器1時鐘為Fosc/12,即12T
- AUXR &= 0xFE; //串口1選擇定時器1為波特率發生器
- TMOD &= 0x0F; //設定定時器1為16位自動重裝方式
- TL1 = 0xE6; //設定定時初值
- TH1 = 0xFF; //設定定時初值
- ET1 = 0; //禁止定時器1中斷
- TR1 = 1; //啟動定時器1
- TI=1;
- ES=1; //開啟串口中斷。
- }
- void Uart_SendB(unsigned char us)
- {
- TI=0
- SBUF=us;
- while(TI==0);//等待發送結束。
- TI=0;
- }
復制代碼
|