具体代码如上,为什么在串口初始化函数里,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;
- }
复制代码
|