原创 51单片机复习札记之五——UART

2010-7-18 11:10 3638 12 12 分类: MCU/ 嵌入式

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);       


}

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
12
关闭 站长推荐上一条 /3 下一条