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