目录
一、简介
1.1、开发环境
KeilC51,单片机型号STC15F2K60S2。
1.2、功能描述
使用51单片机的串口1中断,实现无阻塞发送数据。
二、串口程序
2.1、串口配置
void Uart1Init() //9600bps@11.0592MHz
{
SCON = 0x50; //8位数据,可变波特率
AUXR |= 0x40; //定时器时钟1T模式
AUXR &= 0xFE; //串口1选择定时器1为波特率发生器
TMOD &= 0x0F; //设置定时器模式
TL1 = 0xE0; //设置定时初始值
TH1 = 0xFE; //设置定时初始值
ET1 = 0; //禁止定时器%d中断
TR1 = 1; //定时器1开始计时
ES = 1; //使能串口中断
EA = 1; //开总中断
}
2.2、变量定义
struct Uart1Variable //串口1变量
{
uchar* p_data; //发送数据
uchar transmit_bit; //发送位
uchar transmit_size; //发送数据串大小
}
U1VE;
2.3、中断函数
void Uart1Intrerrupt() interrupt 4 //串口1中断函数
{
if(RI) //判定:接收中断
{
RI = 0; //复位:接收中断
}
if(TI) //判定:发送中断
{
TI = 0; //复位:接收中断
if(U1VE.transmit_bit < U1VE.transmit_size) //判定:发送未完成
{
SBUF = *U1VE.p_data; //赋值发送数据
U1VE.p_data ++; //地址位+1
U1VE.transmit_bit ++; //发送位+1
}
else //判定:发送完成
{
U1VE.transmit_size = 0; //清零:发送长度
}
}
}
2.4、发送函数
void U1Transimt(uchar* p_data,uchar data_size) //串口1发送函数
{
TI = 0; //清除:串口1发送中断
U1VE.transimt_size = data_size; //赋值:发送长度
U1VE.transmit_bit = 1; //赋值:发送位为1
U1VE.p_data = p_data; //赋值:数据串首地址
SBUF = *U1VE.p_data //赋值:发送数据到SBUF
}