串口1选择定时器1为波特率发生器,可以利用STC-ISP软件获取串口相关例程
这里必须使用定时器1,不能用定时器0
串口初始化如下:
void UartInit(void) //9600bps@12.000MHz
{
PCON &= 0x7F; //波特率不倍速
SCON = 0x50; //8位数据,可变波特率
AUXR |= 0x40; //定时器时钟1T模式
AUXR &= 0xFE; //串口1选择定时器1为波特率发生器
TMOD &= 0x0F; //设置定时器模式
TMOD |= 0x20; //设置定时器模式
TL1 = 0xD9; //设置定时初始值
TH1 = 0xD9; //设置定时重载值
ET1 = 0; //禁止定时器%d中断
TR1 = 1; //定时器1开始计时
EA = 1;
ES = 1;
}
串口中断里,一般放置读取串口收到的值,中断号为4
void Uart() interrupt 4 //串口1中断服务函数
{
if(RI) //接收完成标志
{
Uart_Value = SBUF; //获取串口收到的值
RI = 0; //需要手动清0
}
}
发送函数如下:
void SendByte(unsigned char Dat) //发送
{
SBUF = Dat; //发送
while(TI == 0);//等待发送完成,为TI为1时,表示发送完成
TI = 0; //清除标志
}
void SendStr(unsigned char *Str) //发送文本
{
while(*Str != '\0') //不是结束符时,一直发送
SendByte(*Str ++); //发送下一个字符
}
//**发送文本时,是发送ASCII码值,数字0的ASCII的值是48