立即注册 登录
返回首页

uid:195121的个人空间

日志

MCS-51系列单片机C语言编程UART串口程序模板

已有 465 次阅读2017-4-30 22:29 | 单片机, C语言, 程序

/*********************************************************************************************
函数名:UART串口初始化函数
 调  用:UART_init();
参  数:无
 返回值:无
 结  果:启动UART串口接收中断,允许串口接收,启动T/C1产生波特率(占用)
 备  注:振荡晶体为12MHz,PC串口端设置 [ 4800,8,无,1,无 ]
 /**********************************************************************************************/
void UART_init (void){
 EA = 1; //允许总中断(如不使用中断,可用//屏蔽)
ES = 1; //允许UART串口的中断
TMOD = 0x20; //定时器T/C1工作方式2
 SCON = 0x50; //串口工作方式1,允许串口接收(SCON = 0x40 时禁止串口接收)
TH1 = 0xF3; //定时器初值高8位设置
TL1 = 0xF3; //定时器初值低8位设置
PCON = 0x80; //波特率倍频(屏蔽本句波特率为2400)
TR1 = 1; //定时器启动   
 }
 /**********************************************************************************************/
 /*********************************************************************************************
函数名:UART串口初始化函数
 调  用:UART_init();
参  数:无
 返回值:无
 结  果:启动UART串口接收中断,允许串口接收,启动T/C1产生波特率(占用)
 备  注:振荡晶体为11.0592MHz,PC串口端设置 [ 19200,8,无,1,无 ]
 /**********************************************************************************************/
void UART_init (void){
 EA = 1; //允许总中断(如不使用中断,可用//屏蔽)
ES = 1; //允许UART串口的中断
TMOD = 0x20; //定时器T/C1工作方式2
 SCON = 0x50; //串口工作方式1,允许串口接收(SCON = 0x40 时禁止串口接收)
TH1 = 0xFD; //定时器初值高8位设置
TL1 = 0xFD; //定时器初值低8位设置
PCON = 0x80; //波特率倍频(屏蔽本句波特率为9600)
TR1 = 1; //定时器启动   
 }
 /**********************************************************************************************/
 /*********************************************************************************************
函数名:UART串口接收中断处理函数
 调  用:[SBUF收到数据后中断处理]
参  数:无
 返回值:无
 结  果:UART串口接收到数据时产生中断,用户对数据进行处理(并发送回去)
 备  注:过长的处理程序会影响后面数据的接收
/**********************************************************************************************/
void UART_R (void) interrupt 4  using 1{ //切换寄存器组到1
 unsigned char UART_data; //定义串口接收数据变量
RI = 0;   //令接收中断标志位为0(软件清零)
UART_data = SBUF; //将接收到的数据送入变量 UART_data
 //用户函数内容(用户可使用UART_data做数据处理)
//SBUF = UART_data; //将接收的数据发送回去(删除//即生效)
//while(TI == 0); //检查发送中断标志位
//TI = 0;  //令发送中断标志位为0(软件清零)
}
 /**********************************************************************************************/
 /*********************************************************************************************
函数名:UART串口接收CPU查寻语句(非函数体)
 调  用:将下面内容放入主程序
 参  数:无
 返回值:无
 结  果:循环查寻接收标志位RI,如有收到数据则进入if (RI == 1){}
备  注:
/**********************************************************************************************/
unsigned char UART_data; //定义串口接收数据变量
if (RI == 1){  //接收中断标志位为1时
UART_data = SBUF; //接收数据 SBUF 为单片机的接收发送缓冲寄存器
RI = 0;   //令接收中断标志位为0(软件清零)
//用户函数内容(用户可使用UART_data做数据处理)
//SBUF = UART_data; //将接收的数据发送回去(删除//即生效)
//while(TI == 0); //检查发送中断标志位
//TI = 0;  //令发送中断标志位为0(软件清零)
}
 /**********************************************************************************************/
 /*********************************************************************************************
函数名:UART串口发送函数
 调  用:UART_T (?);
参  数:需要UART串口发送的数据(8位/1字节)
 返回值:无
 结  果:将参数中的数据发送给UART串口,确认发送完成后退出
 备  注:
/**********************************************************************************************/
void UART_T (unsigned char UART_data){ //定义串口发送数据变量
SBUF = UART_data; //将接收的数据发送回去
while(TI == 0);  //检查发送中断标志位
TI = 0;   //令发送中断标志位为0(软件清零)
}
 /**********************************************************************************************/
 /*********************************************************************************************
函数名:UART串口发送字符串函数
 调  用:UART_TC (?);
参  数:需要UART串口发送的数据(8位/1字节)
 返回值:无
 结  果:向串口发送一个字符串,长度不限。
 备  注:例:UART_TC("d9887321$"); 此函数需要#include <string.h>头文件支持。
/**********************************************************************************************/
void UART_TC (unsigned char *str){
 while(*str != '\0'){
   UART_T(*str);
   *str++;
 }
 *str = 0;
 }
 /**********************************************************************************************
 /*********************************************************************************************
程序名:    UART串口查寻方式程序实例
 硬件支持:  STC12C2052AD 外部12MHZ晶振
 接口说明:  连接串口ISP下载线 
 /*********************************************************************************************
说明:
 用Windows系统中的“超级终端”软件,将串口端设置 [ 4800,8,无,1,无 ]
或采用STC-ISP软件中的串口助手功能,将串口端设置 [ 4800,8,无,1,无 ]
向串口发送数据,单片机将数据发还给PC端并显示。
/*********************************************************************************************/
 #include <STC12C5A60S2.h> //STC12C5AxxS2系列单片机头文件
//#include <STC12C2052AD.H> //STC12Cx052或STC12Cx052AD系列单片机头文件
/*********************************************************************************************
函数名:UART串口初始化函数
 调  用:UART_init();
参  数:无
 返回值:无
 结  果:启动UART串口接收中断,允许串口接收,启动T/C1产生波特率(占用)
 备  注:振荡晶体为12MHz,PC串口端设置 [ 4800,8,无,1,无 ]
 /**********************************************************************************************/
void UART_init (void){
 //EA = 1; //允许总中断(如不使用中断,可用//屏蔽)
//ES = 1; //允许UART串口的中断
TMOD = 0x20; //定时器T/C1工作方式2
 SCON = 0x50; //串口工作方式1,允许串口接收(SCON = 0x40 时禁止串口接收)
TH1 = 0xF3; //定时器初值高8位设置
TL1 = 0xF3; //定时器初值低8位设置
PCON = 0x80; //波特率倍频(屏蔽本句波特率为2400)
TR1 = 1; //定时器启动   
 }
 /**********************************************************************************************/
 /*********************************************************************************************
函数名:主函数
 调  用:无
 参  数:无
 返回值:无
 结  果:程序开始处,无限循环
 备  注:
/**********************************************************************************************/
void main (void){
 unsigned char UART_data; //定义串口接收数据变量
UART_init();
 while(1){
   if (RI == 1){  //接收中断标志位为1时
   UART_data = SBUF; //接收数据 SBUF 为单片机的接收发送缓冲寄存器
   RI = 0;   //令接收中断标志位为0(软件清零)
   SBUF = UART_data; //将接收的数据发送回去(删除//即生效)
   while(TI == 0); //检查发送中断标志位
   TI = 0;  //令发送中断标志位为0(软件清零)
  }
 }
 }
 /**********************************************************************************************/
 /*********************************************************************************************
程序名:    UART串口中断方式程序实例
 硬件支持:  STC12C2052AD 外部12MHZ晶振
 接口说明:  连接串口ISP下载线 
 /*********************************************************************************************
说明:
 用Windows系统中的“超级终端”软件,将串口端设置 [ 4800,8,无,1,无 ]
或采用STC-ISP软件中的串口助手功能,将串口端设置 [ 4800,8,无,1,无 ]
向串口发送数据,单片机将数据发还给PC端并显示。
/*********************************************************************************************/
 #include <STC12C5A60S2.h> //STC12C5AxxS2系列单片机头文件
//#include <STC12C2052AD.H> //STC12Cx052或STC12Cx052AD系列单片机头文件
/*********************************************************************************************
函数名:UART串口初始化函数
 调  用:UART_init();
参  数:无
 返回值:无
 结  果:启动UART串口接收中断,允许串口接收,启动T/C1产生波特率(占用)
 备  注:振荡晶体为12MHz,PC串口端设置 [ 4800,8,无,1,无 ]
 /**********************************************************************************************/
void UART_init (void){
 EA = 1; //允许总中断(如不使用中断,可用//屏蔽)
ES = 1; //允许UART串口的中断
TMOD = 0x20; //定时器T/C1工作方式2
 SCON = 0x50; //串口工作方式1,允许串口接收(SCON = 0x40 时禁止串口接收)
TH1 = 0xF3; //定时器初值高8位设置
TL1 = 0xF3; //定时器初值低8位设置
PCON = 0x80; //波特率倍频(屏蔽本句波特率为2400)
TR1 = 1; //定时器启动   
 }
 /**********************************************************************************************/
 /*********************************************************************************************
函数名:UART串口接收中断处理函数
 调  用:[SBUF收到数据后中断处理]
参  数:无
 返回值:无
 结  果:UART串口接收到数据时产生中断,用户对数据进行处理(并发送回去)
 备  注:过长的处理程序会影响后面数据的接收
/**********************************************************************************************/
void UART_R (void) interrupt 4  using 1{ //切换寄存器组到1
 unsigned char UART_data; //定义串口接收数据变量
RI = 0;   //令接收中断标志位为0(软件清零)
UART_data = SBUF; //将接收到的数据送入变量 UART_data
  
 SBUF = UART_data; //将接收的数据发送回去(删除//即生效)
while(TI == 0); //检查发送中断标志位
TI = 0;  //令发送中断标志位为0(软件清零)
}
 /**********************************************************************************************/
 /*********************************************************************************************
函数名:主函数
 调  用:无
 参  数:无
 返回值:无
 结  果:程序开始处,无限循环
 备  注:
/**********************************************************************************************/
void main (void){
 UART_init();
 while(1){
 }
 }
 /**********************************************************************************************/
 1. MCS-51通用的UART串口是使用T1定时器产生波特率,即使用UART串口时T1不能作为他用。
2. 硬件上UART串口占用单片机的P3.0和P3.1接口(8051系列),除有特别设计,否则此接口不得复用。
 可将其模板下载到本地硬盘,在编写新程序的时候复制、粘贴到工程当中,然后根据情况写入具体内容

路过

鸡蛋

鲜花

握手

雷人

评论 (0 个评论)

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

返回顶部