专注电子技术学习与研究
当前位置:单片机教程网 >> MCU设计实例 >> 浏览文章

51单片机串口与PC机通信

作者:huqin   来源:本站原创   点击数:  更新时间:2009年05月24日   【字体:
采用模式1(8位),定时器1采用模式2产生波特率,11.0592MHz晶体,9600波特率,PC机上运行的串口助手向单片机发送16进制数据,然后单片机将接收到的数据(16进制)返回串口助手。单片机用P2口连接的LED灯和P1和P0口连接的数码管显示接收到的数据。源程序如下:
//此程序首发:51hei单片机学习网http://www.51hei.com
#include "reg_c51.h"
unsigned char uart_data;
unsigned char   code table[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,
                          0x08,0x03,0x46,0x21,0x06,0x0e};  //十六进制-7段译码表
unsigned char ng, ns, temp;  //ng是接收到数据的低4位,ns是高四位,temp是暂存接收数据的变量
void main (void)
{SCON = 0x50;           //8位串行口模式1,允许接收,REN=1  
TMOD = TMOD | 0x20 ;   //定时器1,在模式2
TH1  = 0xFD;           //波特率为9600,晶体频率为 11.059MHz
TL1  = 0xFD;           //波特率为9600,晶体频率为11.059MHz
ES = 1;                      //使能串行口中断
EA = 1;                      //使能全局中断
TR1 = 1;                   //启动定时器
while(1);                  //无限循环
}  
void serial_IT(void) interrupt 4        //串口中断服务程序
{if (RI == 1)                       //如果是接收中断,则执行如下语句
{
RI = 0;                           //清除接收中断标志
uart_data = SBUF;                  //接收数据
SBUF = uart_data                   //将接收的数据发送
temp=uart_data;                    //暂存接收到的数据
P2=~ temp;                        //将接收的数据求反后送P2口,用LED灯显示
ng=temp & 0x0f;                    //取低4位,ng是接收到数据的低4位
ns=temp>>4;                       //将高4位右移4位
ns &=0x0f;                        //取低4位。ns是接收到数据的高4位
P0=table[ng];                      //将低4位送P0口,用数码管显示低4位
P1=table[ns];                      //将高4位送P1口,用数码管显示高4位
}

else TI = 0;                        //清除发送标志
}
关闭窗口

相关文章