UART:Universal Asynchronous Receiver / Transmitter,通用异步收发器。它包括了RS-232、RS-422、RS-485等,由于历史原因,IBM的PC外部接口配置为RS-232,成为实际上的PC界默认标准。所以,现在PC机的COM口均为RS-232。我的开发板上51单片机的UART通过MAX232与PC相连,一方面是用于程序的下载,一方面还用于单片机与PC的通信。
下面的代码主要用于测试单片机通过串口与PC通信的。由于我的开发板上串口接口为公头,而我的USB转串口线的接口也是公头,所以我又加上了一段延长线,由于通信线路较长,所以将波特率设为4800bps,以保证数据传送的正确率。
#include <reg52.h>
#include "Config.h"
code uchar TestTab1[]={"I Love
MCU!\n"};
code uchar TestTab2[]={"Serial
Interface Testing is OK!\n"};
/********************
函数名称:UART_Initial
函数功能:串口初始化
入口参数:无
返回参数:无
备 注:无
*********************/
void UART_Initial(void)
{
EA
= 0; //关中断
TMOD
&= 0x0F; //定时器1模式控制在高4位
TMOD
|= 0x20; //定时器1,工作模式2,自动重载
SCON
= 0x50; //串口模式1
TH1
= 256 - Fosc / (BaudRate * 12 * 16); //计算重载值
TL1
= 256 - Fosc / (BaudRate * 12 * 16);
PCON
|= 0x80; //串口波特率加倍
ES
= 1; //串口中断允许
TR1
= 1; //启动定时器1
REN
= 1; //允许接收
EA
= 1; //允许总中断
}
/***********End of Function***********/
/********************
函数名称:PutString2UART
函数功能:向串口发送一个字符串
入口参数:uchar* pi——要向串口发送的字符串指针
返回参数:无
备 注:无
*********************/
void PutString2UART(uchar *ps)
{
EA
= 0;
while((*ps)!='\0')
{
SBUF
= *ps;
while(TI==0);
TI
= 0;
ps++;
}
EA
= 1;
}
/***********End of Function***********/
/********************
函数名称:UART_ISR
函数功能:串口中断服务
入口参数:无
返回参数:无
备 注:无
*********************/
void UART_ISR(void) interrupt 4
{
uchar
Temp;
EA
= 0; //清除中断标志,硬件置位,软件清零
RI
= 0;
Temp
= SBUF; //接受串口缓冲区数据
if(Temp==0xAA)
{
//当上位机发送16进制0xAA时,MCU将TestTab的字符串发给上位机
PutString2UART(TestTab2);
}
EA=1;
}
/***********End of Function***********/
void main(void)
{
UART_Initial();
PutString2UART(TestTab1);
while(1);
}
文章评论(0条评论)
登录后参与讨论