|
RS232串行通信是常見(jiàn)的通信方式之一,本版采用MAX232電平轉(zhuǎn)換芯片使單片機(jī)的串口和計(jì)算機(jī)的串口相連進(jìn)行通信。
C語(yǔ)言源程序:
/***************************************************************************
功能:首先LED顯示串口接收的數(shù)據(jù),然后將該數(shù)據(jù)發(fā)送給上位機(jī)
***************************************************************************/
#include <reg52.h> //52單片機(jī)頭文件包含
#define uint unsigned int //定義uint 為 unsigned int 型
#define uchar unsigned char //定義uchar 為 unsigned char 型
sbit wei1=P2^0; //定義wei1 為 P2端口的0號(hào)引腳接數(shù)碼管第一位
sbit wei2=P2^1; //定義wei2 為 P2端口的1號(hào)引腳接數(shù)碼管第二位
uchar code table[]={0xC0,0xF9,0xA4,0xB0,
0x99,0x92,0x82,0xF8,
0x80,0x90,0x88,0x83,
0xC6,0xA1,0x86,0x8E}; //定義共陽(yáng)數(shù)碼管碼表
uchar idata buffer[32]; //定義一個(gè)32個(gè)字節(jié)的緩沖區(qū)
uchar l_datatemp; //定義l_datatemp用于存儲(chǔ)新接收的數(shù)據(jù)
uchar l_data; //定義l_data用于存儲(chǔ)顯示的數(shù)據(jù)
void init (void); // 初始化函數(shù)聲明
void send_char_com(uchar ch); //串口發(fā)送函數(shù)聲明
void delay(uint z); //延時(shí)函數(shù)聲明
void main() //入口函數(shù)
{
uchar l_data1,l_data2; //定義臨時(shí)變量l_data1,l_data2用于處理臨時(shí)數(shù)據(jù)
l_datatemp=0; //將l_datatemp賦值為0
l_data=0; //將l_data賦值為0
init(); //串口收發(fā)初始化
while(1) //主循環(huán)
{
if(l_data!=l_datatemp) //如果接收的數(shù)據(jù)與原來(lái)顯示的數(shù)據(jù)不同,更新原來(lái)顯示的數(shù)據(jù)
{
l_data=l_datatemp; //更新原來(lái)的數(shù)據(jù)
send_char_com(l_data); //向串口發(fā)送更新后的數(shù)據(jù)
}
l_data1=l_data&0xf0;//取高四位顯示
l_data1=l_data1>>4;
wei1=0;
P0=table[l_data1];
delay(5);
wei1=1;
l_data2=l_data&0x0f; //取低四位顯示
wei2=0;
P0=table[l_data2];
delay(5);
wei2=1;
}
}
void init(void) //串口初始化,波特率2400 方式1 8 UART
{
TMOD=0x20;
PCON=0x00;
SCON=0x50;
TH1=0xF3;
TL1=0xF3;
TR1=1; //啟動(dòng)定時(shí)器/計(jì)數(shù)器,還與GATE位狀態(tài)有關(guān)
ES=1; //允許串行中斷
EA=1; //總中斷開(kāi)
}
void send_char_com(uchar ch) //查詢方式向串口發(fā)送一個(gè)字符
{
SBUF=ch;
while(TI==0);
TI=0;
}
void receive(void) interrupt 4 using3 //中斷方式從串口接收字符
{
if(RI)
{
if(TI) //處理發(fā)送中斷
{
TI=0;
}
RI=0;
l_datatemp=SBUF;
}
}
void delay(uint z) //延時(shí)
{
uint x,y; //定義x,y用于循環(huán)計(jì)數(shù)
for(x=z;x>0;x--) //主循環(huán)循環(huán)z次
for(y=110;y>0;y--) //子循環(huán)循環(huán)110次
}
//實(shí)驗(yàn)現(xiàn)象用串口調(diào)試助手軟件向單片機(jī)發(fā)送字符09則數(shù)碼管將顯示09
|
|