Uart
串口极简使用方法
- 初始化
- 中断服务函数
- 发送数据/接收数据
/*
STC15F2K60S2 定时器2用作串口1的波特率发生器
*/
// 串口1中断服务函数
void UartInit(void) //9600bps@12.000MHz
{
SCON = 0x50; //8位数据,可变波特率
AUXR |= 0x01; //串口1选择定时器2为波特率发生器
AUXR |= 0x04; //定时器2时钟为Fosc,即1T
T2L = 0xC7; //设定定时初值
T2H = 0xFE; //设定定时初值
AUXR |= 0x10; //启动定时器2
ES = 1;
EA = 1;
}
// UART 中断服务程序
void Uart() interrupt 4
{
uchar i = 0; //i用于存储接收数据
if (RI)
{
RI = 0; //清除RI位
i = SBUF; //P0显示串口数据
}
}
// 发送字符串
void SendString(char *s)
{
while (*s != '\0') //检测字符串结束标志
{
SBUF = *s++;
while(TI==0);
TI = 0;
}
}
-
利用stc-isp软件生成初始化程序:(中断服务函数与发送数据函数基本在stc-isp软件范例程序中可以找到)
-
RI为接收中断标志位,即RI==1时表示有被数据写入SBUF。
-
TI为发送标志位,TI==1时表示数据已发送。(RI=1或者TI=1都可以触发串口中断,进入中断函数)
SCON寄存器详情:
D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 | |||
---|---|---|---|---|---|---|---|---|---|---|
SCON | SM0 | SM1 | SM2 | REN | TB8 | RB8 | TI | RI | 98H | |
位地址 | 9FH | 9EH | 9DH | 9CH | 9BH | 9AH | 99H | 98H |