RS232作為標(biāo)準(zhǔn)的計算機串行接口已被廣泛使用,與此同時,隨著現(xiàn)場總線技術(shù)的飛速發(fā)展,具有實時性好、可靠性高、結(jié)構(gòu)簡單等優(yōu)點的CAN總線在測控系統(tǒng)中也越來越多地被采用,但由于兩者的總線結(jié)構(gòu)、通信協(xié)議及傳輸特點各不相同,因而給不同設(shè)備之間的連接帶來諸多不便。因此,如何以最簡單的方式實現(xiàn)CAN節(jié)點與RS232串行口的通信就成為工程實踐中一個不可回避的問題。
本文主要就是說at89c51接max232方法和程序,具體的我們一起來了解一下吧。
at89c51接max232方法
MAX232與51單片機之間的通信連接很簡單,因為所謂的MAX232通信標(biāo)準(zhǔn),就是對插件樣式、信號名稱和意義以及所謂的驅(qū)動器/接收器的電氣模式這種硬件作出規(guī)定。一般的都是9針的接口,其中包括CD接口:數(shù)據(jù)通道接收載波的檢測;RD接口:接收數(shù)據(jù);SD接口:發(fā)送數(shù)據(jù);ER接口:數(shù)據(jù)終端就緒;SG接口:信號用接地;DR接口:數(shù)據(jù)集就緒;RS接口:請求發(fā)送;CS接口:允許發(fā)送;CI接口:被呼表示。
用以上接口進(jìn)行數(shù)據(jù)通信,還有對電平的要求。所以與51單片機進(jìn)行通信連接的方式很簡單,首先要解決的是電平標(biāo)準(zhǔn),51的I/O口最大輸出5V電壓,而RS-232要求電壓在±10V,為達(dá)到電平匹配,需用到MAX232CPF電平轉(zhuǎn)換芯片,將0~5V電平轉(zhuǎn)換為±10V電平,從而實現(xiàn)電平匹配;然后,數(shù)據(jù)接口只用到了數(shù)據(jù)發(fā)送與接收2個端口,還有數(shù)據(jù)的請求發(fā)送與允許發(fā)送,共4個端口,MAX232CPF還有其他一些外圍電路接口,但比較簡單,都是些電容接口,從而實現(xiàn)單片機與RS232接口的通信。
51單片機串口max232通信程序
//工作晶振為11.0592MHz,否則出現(xiàn)返回值錯誤,一個字節(jié)的發(fā)送
//工作晶振為11.0592MHz,否則出現(xiàn)返回值錯誤,一個字節(jié)的發(fā)送
#include《regx52.h》
#define uchar unsigned char
#define uint unsigned int
uchar a,flag;
uchar table[]={“very good ”};
//-----------初始化定時器和串口-
void inital_timer1()
{
TMOD=0X20; //必須使用定時器1,串口使用規(guī)定
TH1=0Xfd; //定時器1,工作方式2,8位 自動重裝
TL1=0Xfd; //高8位與低8位數(shù)值必須相同
TR1=1; //定時器1允許位
REN=1; //串口使能
SM0=0; //串口 工作方式設(shè)置,工作方式1
SM1=1; ES=1; //串口中斷使能
EA=1; // 總中斷使能
}
//----------串口中斷---------
void gorpe() interrupt 4
{
RI=0; //接受中斷標(biāo)志位,硬件置1,必須軟件置0
a=SBUF; // 特殊功能寄存器
flag=1; // 檢測標(biāo)志位
}
//-----接收數(shù)據(jù),并向上位機作出反應(yīng)(即發(fā)送返回數(shù)據(jù))---
void display()
{
uchar i;
if(flag==1)
{
ES=0; //關(guān)閉串口中斷,接下來要發(fā)送數(shù)據(jù),否則發(fā)送完一個數(shù)據(jù)仍會產(chǎn)生中斷,產(chǎn)生死循環(huán)
for(i=0;i《10;i++)
{
SBUF=table[i];
while(!TI); //判斷是否發(fā)送完成
TI=0; //發(fā)送中斷標(biāo)志位
}
SBUF=a;
while(!TI);
TI=0;
ES=1;
flag=0;
}
}
評論