一.51單片計(jì)算機(jī)串口結(jié)構(gòu)圖如下:
二. SCON 是一個(gè)特殊功能寄存器說明: 用以設(shè)定串行口的工作方式、接收/發(fā)送控制以及設(shè)置狀態(tài)標(biāo)志
各位功能如下: SM0和SM1 為工作方式選擇位
SM2,多機(jī)通信控制位,主要用于方式2和方式3。當(dāng)接收機(jī)的SM2=1時(shí)可以利用收到的RB8來控制是否激活RI(RB8=0時(shí)不激活RI,收到的信息丟棄;RB8=1時(shí)收到的數(shù)據(jù)進(jìn)入SBUF,并激活RI,進(jìn)而在中斷服務(wù)中將數(shù)據(jù)從SBUF讀走)。當(dāng)SM2=0時(shí),不論收到的RB8為0和1,均可以使收到的數(shù)據(jù)進(jìn)入SBUF,并激活RI(即此時(shí)RB8不具有控制RI激活的功能)。通過控制SM2,可以實(shí)現(xiàn)多機(jī)通信。
在方式0時(shí),SM2必須是0。在方式1時(shí),若SM2=1,則只有接收到有效停止位時(shí),RI才置1。
REN,允許串行接收位。由軟件置REN=1,則啟動(dòng)串行口接收數(shù)據(jù);若軟件置REN=0,則禁止接收。 TB8,在方式2或方式3中,是發(fā)送數(shù)據(jù)的第九位,可以用軟件規(guī)定其作用。可以用作數(shù)據(jù)的奇偶校驗(yàn)位,或在多機(jī)通信中,作為地址幀/數(shù)據(jù)幀的標(biāo)志位。
在方式0和方式1中,該位未用。
RB8,在方式2或方式3中,是接收到數(shù)據(jù)的第九位,作為奇偶校驗(yàn)位或地址幀/數(shù)據(jù)幀的標(biāo)志位。在方式1時(shí),若SM2=0,則RB8是接收到的停止位。 TI,發(fā)送中斷標(biāo)志位。在方式0時(shí),當(dāng)串行發(fā)送第8位數(shù)據(jù)結(jié)束時(shí),或在其它方式,串行發(fā)送停止位的開始時(shí),由內(nèi)部硬件使TI置1,向CPU發(fā)中斷申請。在中斷服務(wù)程序中,必須用軟件將其清0,取消此中斷申請。
RI,接收中斷標(biāo)志位。在方式0時(shí),當(dāng)串行接收第8位數(shù)據(jù)結(jié)束時(shí),或在其它方式,串行接收停止位的中間時(shí),由內(nèi)部硬件使RI置1,向CPU發(fā)中斷申請。也必須在中斷服務(wù)程序中,用軟件將其清0,取消此中斷申請。
三.串口開發(fā)例程,下面程式實(shí)現(xiàn)向單片機(jī)發(fā)關(guān)信息后,它收完后再返回送回來。
#include<reg52.h>
unsigned char flag,a;
void main()
{
TMOD=0x20; //設(shè)置定時(shí)器1為工作方式2,串口是靠在、定時(shí)器工作的
TH1=0xfd;
TL1 =0xfd; //裝串口初值,設(shè)置串口波特率9600,計(jì)算出來的
TR1=1;//打開定時(shí)器
REN=1; // 打開串口允許位
SM0=0;
SM1=1;//設(shè)置串口工作方式1 EA=1; //打開總中斷
ES=1; //打開串口中斷
while(1)
{
if (RI==1) //這個(gè)是用來讀取到P1口
{
RI=0;
P1=SBUF:
}
if(flag==1) //表明串口收到的數(shù)據(jù)可以用來發(fā)送
{
ES=0; //防止TI進(jìn)入串口中斷關(guān)串口中斷
flag=0;
SBUF=a; //向發(fā)送SBUF送a
while(!TI); //等待 發(fā)送結(jié)束。未發(fā)送結(jié)束之前T1一直是0
TI=0; // 通過軟件將TI置0防止中斷后進(jìn)入中斷服務(wù)程序
ES=1;
}
} } void ser() interrupt 4
{
RI=0;
P1=SBUF;
a=SBUF;
flag=1;
}
附:max232芯片接線圖
max 232 內(nèi)部合并了MC1488和MC1489能夠?qū)崿F(xiàn)TTL電平和232電平的雙向轉(zhuǎn)換
除了232接口外還有其它的接口,都有自己不同的特性
RS-485是一點(diǎn)對多點(diǎn)的通信接口,一般采用雙絞線的結(jié)構(gòu)。普通的PC機(jī)一般不帶RS485接口,因此要使用RS-232C/RS-485轉(zhuǎn)換器。對于單片機(jī)可以通過芯片MAX485來完成TTL/RS-485的電平轉(zhuǎn)換。在計(jì)算機(jī)和單片機(jī)組成的RS-485通信系統(tǒng)中,下位機(jī)由單片機(jī)系統(tǒng)組成,上位機(jī)為普通的PC機(jī),負(fù)責(zé)監(jiān)視下位機(jī)的運(yùn)行狀態(tài),并對其狀態(tài)信息進(jìn)行集中處理,以圖文方式顯示下位機(jī)的工作狀態(tài)以及工業(yè)現(xiàn)場被控設(shè)備的工作狀況。系統(tǒng)中各節(jié)點(diǎn)(包括上位機(jī))的識別是通過設(shè)置不同的站地址來實(shí)現(xiàn)的。
|