UART串口程序
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
/*空出主循环*/
#include
void ConfigUART(unsigned int baud);
void main(){
ConfigUART(9600); //配置波特率为 9600
while (1){
while (!RI); //等待接收完成
RI = 0; //清零接收中断标志位
SBUF = SBUF + 1; //接收到的数据+1 后,发送回去
while (!TI); //等待发送完成
TI = 0; //清零发送中断标志位
}
}
/* 串口配置函数,baud-通信波特率 */
void ConfigUART(unsigned int baud){
SCON = 0x50; //配置串口为模式 1
TMOD &= 0x0F; //清零 T1 的控制位
TMOD |= 0x20; //配置 T1 为模式 2
TH1 = 256 - (11059200/12/32)/baud; //计算 T1 重载值
TL1 = TH1; //初值等于重载值
ET1 = 0; //禁止 T1 中断
TR1 = 1; //启动 T1
}
/*工程上中断实现,接收和发送触发的是同一个串口中断,所以在串口中断函数中就必须先判断是哪种中断,然后再作出相应的处理*/
#include
void ConfigUART(unsigned int baud);
void main(){
EA = 1; //使能总中断
ConfigUART(9600); //配置波特率为 9600
while (1);
}
/* 串口配置函数,baud-通信波特率 */
void ConfigUART(unsigned int baud){
SCON = 0x50; //配置串口为模式 1
TMOD &= 0x0F; //清零 T1 的控制位
TMOD |= 0x20; //配置 T1 为模式 2
TH1 = 256 - (11059200/12/32)/baud; //计算 T1 重载值
TL1 = TH1; //初值等于重载值
ET1 = 0; //禁止 T1 中断
ES = 1; //使能串口中断
TR1 = 1; //启动 T1
}
/* UART 中断服务函数 */
void InterruptUART() interrupt 4{
if (RI){ //接收到字节
RI = 0; //手动清零接收中断标志位
SBUF = SBUF + 1; //接收的数据+1 后发回,左边是发送 SBUF,右边是接收 SBUF
}
if (TI){ //字节发送完毕
TI = 0; //手动清零发送中断标志位
}
}