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