專注電子技術(shù)學(xué)習(xí)與研究
當(dāng)前位置:單片機教程網(wǎng) >> MCU設(shè)計實例 >> 瀏覽文章

51單片機串口與PC機通信

作者:huqin   來源:本站原創(chuàng)   點擊數(shù):  更新時間:2009年05月24日   【字體:
采用模式1(8位),定時器1采用模式2產(chǎn)生波特率,11.0592MHz晶體,9600波特率,PC機上運行的串口助手向單片機發(fā)送16進制數(shù)據(jù),然后單片機將接收到的數(shù)據(jù)(16進制)返回串口助手。單片機用P2口連接的LED燈和P1和P0口連接的數(shù)碼管顯示接收到的數(shù)據(jù)。源程序如下:
//此程序首發(fā):51hei單片機學(xué)習(xí)網(wǎng)http://www.torrancerestoration.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是接收到數(shù)據(jù)的低4位,ns是高四位,temp是暫存接收數(shù)據(jù)的變量
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);                  //無限循環(huán)
}  
void serial_IT(void) interrupt 4        //串口中斷服務(wù)程序
{if (RI == 1)                       //如果是接收中斷,則執(zhí)行如下語句
{
RI = 0;                           //清除接收中斷標(biāo)志
uart_data = SBUF;                  //接收數(shù)據(jù)
SBUF = uart_data                   //將接收的數(shù)據(jù)發(fā)送
temp=uart_data;                    //暫存接收到的數(shù)據(jù)
P2=~ temp;                        //將接收的數(shù)據(jù)求反后送P2口,用LED燈顯示
ng=temp & 0x0f;                    //取低4位,ng是接收到數(shù)據(jù)的低4位
ns=temp>>4;                       //將高4位右移4位
ns &=0x0f;                        //取低4位。ns是接收到數(shù)據(jù)的高4位
P0=table[ng];                      //將低4位送P0口,用數(shù)碼管顯示低4位
P1=table[ns];                      //將高4位送P1口,用數(shù)碼管顯示高4位
}

else TI = 0;                        //清除發(fā)送標(biāo)志
}
關(guān)閉窗口

相關(guān)文章