版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
第6章
單片機串行通信接口講述串行通信的基本原理、單片機串行口的內(nèi)部結(jié)構(gòu)和工作原理,重點講述MCS-51單片機串行通信的應(yīng)用編程。第6章
單片機串行通信接口串行通信的基本概念6.1串行口的內(nèi)部結(jié)構(gòu)和工作原理6.2串行通信的應(yīng)用6.36.1串行通信的基本概念1.并行通信多個數(shù)據(jù)位同時傳輸,速度快。因傳輸線多,特別適用于近距離通信。2.串行通信數(shù)據(jù)是一位一位地在通信線上傳輸,速度慢。因傳輸線少,特別適用于遠(yuǎn)距離通信。6.1.1串行通信的分類1.異步通信以字符為單位傳送,字符間隔不固定發(fā)送端和接收端時鐘彼此獨立(異步)通信雙方須規(guī)定相同的字符幀格式和波特率
6.1.1串行通信的分類①字符幀格式由起始位、數(shù)據(jù)位、校檢位、停止位4部分組成。起始位:位于字符的開頭,1位,用低電平0表示,表示字符的開始,通知接收端準(zhǔn)備接收。數(shù)據(jù)位:緊跟在起始位之后,可以是5-8位數(shù)據(jù),發(fā)送時低位在前,高位在后。校驗位:1位,位于數(shù)據(jù)位之后,用戶根據(jù)需要加入。停止位:位于字符最后,以高電平1表示字符的結(jié)束,告訴接收端本幀數(shù)據(jù)發(fā)送完畢,為下一幀數(shù)據(jù)作準(zhǔn)備。6.1.1串行通信的分類②波特率波特率是單位時間內(nèi)傳輸碼元符號的個數(shù)(傳符號率),即每秒鐘傳送的二進(jìn)制位數(shù),其單位為b/s(bitspersecond),是衡量串行數(shù)據(jù)速度快慢的重要指標(biāo)。國際標(biāo)準(zhǔn):110b/s、300b/s、600b/s、1200b/s、1800b/s、2400b/s、4800b/s、9600b/s、14.4Kb/s、19.2Kb/s、28.8Kb/s、33.6Kb/s、56Kb/s。假如在異步串行通信中,傳送一個字符,包括12位(其中有1個起始位,8個數(shù)據(jù)位,1個校驗位,2個停止位),其傳輸速率是1200b/s,每秒所能傳送的字符數(shù)是1200/(1+8+1+2)=100個。6.1.1串行通信的分類2.同步通信一個信息幀中包含許多字符,每個信息幀用同步字符作為開始。由統(tǒng)一的時鐘來實現(xiàn)發(fā)送端與接收端之間的嚴(yán)格同步。
接收端檢測到有一串?dāng)?shù)位和同步字符相匹配時,把此后的數(shù)位作為實際傳輸信息來處理。同步信息幀通常由同步字符、數(shù)據(jù)字符和校驗字符CRC三部分組成。同步字符1同步字符2數(shù)據(jù)字符1數(shù)據(jù)字符2……數(shù)據(jù)字符nCRC1CRC26.1.2串行通信的數(shù)據(jù)傳輸方式單工方式:信息傳送只能在一個方向上進(jìn)行。半雙工方式:通信雙方之間只有一根數(shù)據(jù)傳輸信號線,通過接收和發(fā)送轉(zhuǎn)換開關(guān),使得雙方可以交替進(jìn)行發(fā)送和接收,但兩個方向的數(shù)據(jù)傳送不能同時進(jìn)行。全雙工方式:通信雙方之間有兩條數(shù)據(jù)傳輸信號線,可以在同一時刻進(jìn)行兩個方向的數(shù)據(jù)傳送。6.2串行接口的內(nèi)部結(jié)構(gòu)和工作原理-內(nèi)部結(jié)構(gòu)MCS-51單片機內(nèi)部具有一個采用UART工作方式的全雙工的串行通信接口。該接口有兩根串行通信傳輸線RxD(P3.0)和TxD(P3.1),數(shù)據(jù)的接收和發(fā)送就是通過這兩根信號線來實現(xiàn)的。收發(fā)數(shù)據(jù)是在發(fā)送/接收控制器的作用下完成的,波特率由定時器T1決定。MCS-51單片機在物理上存在兩個互相獨立的接收、發(fā)送緩沖器SBUF,通過特殊功能寄存器SBUF來訪問。兩個緩沖器共用一個地址99H(特殊功能寄存器SBUF的地址)發(fā)送數(shù)據(jù)需要執(zhí)行以SBUF為目的操作數(shù)的指令,讀出數(shù)據(jù)需要執(zhí)行以SBUF為源操作數(shù)的指令,例如:SBUF=a;//將變量a中數(shù)據(jù)通過串口一位一位地發(fā)送出去a=SBUF;//從串口接收緩沖器中取走數(shù)據(jù)給變量a6.2串行接口的內(nèi)部結(jié)構(gòu)和工作原理-工作原理雙機通信連接示意圖當(dāng)單片機串行口和其他設(shè)備的串行口連接時:本機的接收連接對方的發(fā)送;本機的發(fā)送連接對方的接收;雙方的地相連(三線制)。6.2串行接口的內(nèi)部結(jié)構(gòu)和工作原理6.2.3串行口的控制與狀態(tài)1.串行口的控制寄存器SCON(98H)D7D6D5D4D3D2D1D0SM0SM1SM2RENTB8RB8TIRI①SM0、SM1:指定串行口的工作方式。SM0SM1工作方式說明波特率00方式0同步移位寄存器fosc/1201方式110位異步收發(fā)由定時器控制10方式211位異步收發(fā)fosc/32或fosc/6411方式311位異步收發(fā)由定時器控制6.2.3串行口的控制與狀態(tài)②SM2:多機通信控制位。主要用于方式2和方式3中。在方式2和方式3處于接收狀態(tài)時,如SM2=1,REN=1,且接收到的第9位數(shù)據(jù)RB8是1,則RI(接收中斷標(biāo)志位)才被置1。若接收到的第9位數(shù)據(jù)RB8是0,則RI不會置1。在方式2和方式3處于接收狀態(tài)時,如SM2=0,無論接收到的第9位數(shù)據(jù)RB8是0還1,則RI都會被置1。在方式1中,如SM2=1,只有在接收到有效停止位時,則RI才會被置1。所以,方式1中SM2一般設(shè)置為0,以免丟失數(shù)據(jù)。在方式0中,SM2必須為0。6.2.3串行口的控制與狀態(tài)③REN:允許串行接收控制位。由軟件置1或清除。REN=1,允許接收REN=0,禁止接收④TB8:發(fā)送數(shù)據(jù)位8,由軟件進(jìn)行置1或清0。在方式2和方式3時,它就是要發(fā)送的第9個數(shù)據(jù)位。如在多處理通信中,用于表示是地址幀還是數(shù)據(jù)幀。在方式0和方式1中,此位不用。⑤RB8:接收數(shù)據(jù)位8。在方式2和3時,它是接收到的第9個數(shù)據(jù)位。在方式1中,若SM2=0,RB8是接收到的停止位。在方式0中,此位不用。6.2.3串行口的控制與狀態(tài)⑥TI:發(fā)送中斷請求標(biāo)志位。在方式0中,當(dāng)發(fā)送完第8位數(shù)據(jù)時,由硬件置1在其他方式中,在發(fā)送停止位前,由硬件置1。TI=1時,申請中斷,CPU響應(yīng)中斷后,發(fā)送下一幀數(shù)據(jù)。該位必須由軟件清0。⑦RI:接收中斷請求標(biāo)志位。在方式0中,接收第8位結(jié)束時,由硬件置1;在其他方式中,在接收停止位的中間時刻,由硬件置1。RI=1時,申請中斷,要求CPU取走數(shù)據(jù)。(但在模式1中,SM2=1時,若未接收到有效的停止位,則不會對RI置位。)該位必須由軟件清0。6.2.3串行口的控制與狀態(tài)2.電源控制寄存器PCON(87H)D7D6D5D4D3D2D1D0SMODD7位SMOD是串行口波特率倍增位。SMOD=1時,串行口工作方式1、方式2、方式3的波特率加倍。具體值見各種工作方式下的波特率計算公式。6.2.4串行口的工作方式1.方式0:移位寄存器輸入/輸出方式,用于擴展并行口
RxD:輸入或輸出引腳TxD:移位脈沖輸出接收和方式都是8位波特率固定為:fosc/12注意:SM2必須為0!?。?!6.2.4串行口的工作方式(2)接收過程:
(1)發(fā)送過程:
注意:SM2必須為0?。。?!6.3.2串行口方式0用做擴展并行I/O口6.2.4串行口的工作方式起始位:1位數(shù)據(jù)位:8位停止位:1位2.方式1:10位異步通信接口,用于雙機通信,波特率可變。方式1的波特率=(2SMOD/32)×T1的溢出頻率方式1的波特率=(2SMOD/32)×T1的溢出頻率定時器1溢出頻率=fosc/[12×(256-X)]方式1的波特率=2SMOD×fosc/[12×32×(256-X)]6.2.4串行口的工作方式10位的異步通信接口,即傳送一幀信息為10位。1位起始位“0”,8位數(shù)據(jù)位(先低位后高位),1位停止位“1”,其中起始位和停止位是在發(fā)送時自動插入的,數(shù)據(jù)位由TxD發(fā)送,由RxD接收。波特率可變。硬件上,T1的計數(shù)輸出不僅使TF1置位,而且會產(chǎn)生一個脈沖送串行口。方式1的波特率這時就取決于T1(注意只是T1,不是T0)的溢出頻率(每秒鐘T1溢出多少次)和PCON中的SMOD的值。方式1的波特率=(2SMOD/32)×T1的溢出頻率6.2.4串行口的工作方式(1)發(fā)送過程:(寫SBUF啟動發(fā)送過程)
(2)接收過程:(置REN=1啟動接收過程)
6.2.4串行口的工作方式3.方式2和方式3:11位異步通信接口,可用于多機通信起始位:1位數(shù)據(jù)位:9位停止位:1位6.2.4串行口的工作方式串行口發(fā)送/接收的一幀信息共11位:1位是起始位“0”,8位數(shù)據(jù),1位奇偶校驗位或其他數(shù)據(jù)位,1位停止位“1”。方式2和方式3的發(fā)送、接收過程是完全一樣的,只是波特率不同。方式2的波特率=(2SMOD/64)×fosc方式3的波特率=(2SMOD/32)×T1的溢出頻率6.2.4串行口的工作方式(1)發(fā)送過程:(寫SBUF啟動發(fā)送過程)
(2)接收過程:(置REN=1啟動接收過程)
6.3串行通信的應(yīng)用1.波特率的計算(1)方式0的波特率=fosc/12。(2)方式2的波特率=(2SMOD/64)×fosc。SMOD為波特率加倍位。(3)方式1或方式3的波特率=(2SMOD/32)×T1的溢出頻率。定時器1溢出頻率=fosc/[12×(256-X)]方式1、3的波特率=2SMOD×fosc/[12×32×(256-X)]SMOD位數(shù)值的選擇直接影響著波特率的精確度6.3.1串行口波特率的確定和初始化6.3.3雙機通信設(shè)fosc=6MHz,在波特率=2400b/s,SMOD=0,則T1的時間常數(shù)X的值為:
實際產(chǎn)生的波特率及誤差為:6.3.3雙機通信設(shè)fosc=6MHz,在波特率=2400b/s,SMOD=1,則T1的時間常數(shù)X的值為:
實際產(chǎn)生的波特率及誤差為:6.3串行通信的應(yīng)用1.波特率的計算(1)方式0的波特率=fosc/12。(2)方式2的波特率=(2SMOD/64)×fosc。SMOD為波特率加倍位。(3)方式1或方式3的波特率=(2SMOD/32)×T1的溢出頻率。定時器1溢出頻率=fosc/[12×(256-X)]方式1、3的波特率=2SMOD×fosc/[12×32×(256-X)]SMOD位數(shù)值的選擇直接影響著波特率的精確度當(dāng)時鐘頻率選用11.0592MHz時,極易獲得標(biāo)準(zhǔn)的波特率6.3.1串行口波特率的確定和初始化6.3.3雙機通信設(shè)fosc=11.0592MHz,在波特率=2400b/s,SMOD=0,則T1的時間常數(shù)X的值為:
實際產(chǎn)生的波特率及誤差為:6.3.3雙機通信設(shè)fosc=11.0592MHz,在波特率=2400b/s,SMOD=1,則T1的時間常數(shù)X的值為:
實際產(chǎn)生的波特率及誤差為:6.3.1串行口波特率的確定和初始化波特率(b/s)晶振(MHz)初值誤差(%)晶振(MHz)初值誤差(%)SMOD=0SMOD=1SMOD=0SMOD=1SMOD=0SMOD=130011.0592A0H40H01298H30H0.160.1660011.0592D0HA0H012CCH98H0.160.16120011.0592E8HD0H012E6HCCH0.160.16180011.0592F0HE0H012EFHDDH2.12-0.79240011.0592F4HE8H012F3HE6H1.161.16360011.0592F8HF0H012F7HEFH-3.352.12480011.0592FAHF4H012F9HF3H-6.99-3.55720011.0592FCHF8H012FCHF7H8.51-6.99960011.0592FDHFAH012FDHF9H8.518.511440011.0592FEHFCH012FEHFCH8.518.511920011.0592——FDH012FEHFDH-18.68.512880011.0592FFHFEH012FFHFEH8.518.51表6-2常用波特率設(shè)置方法2.串行口初始化的步驟確定串行口工作方式(配置SCON寄存器)確定T1的工作方式(配置TMOD寄存器)設(shè)置SMOD位(若不用SMOD,可跳過此步)計算T1的初值,裝載TH1和TL1啟動T1(置位TR1)串行口中斷設(shè)置(配置IE、IP寄存器)X=256-2SMOD×fosc/[12×32×波特率]方式1、3的波特率=2SMOD×fosc/[12×32×(256-X)]6.3.1串行口波特率的確定和初始化6.3.1串行口波特率的確定和初始化【例6-1】某8051單片機控制系統(tǒng),主振頻率為12MHz,要求串行口發(fā)送數(shù)據(jù)為8位、波特率為1200b/s,編寫串行口的初始化程序(設(shè)SMOD=1)。分析:設(shè)SMOD=1,則T1的時間常數(shù)X的值為:X=256-2SMOD×fosc/(12×32×波特率)=256-21×12×106/(12×32×1200)=256-52.08=203.92≈204=CCH初始化程序為:
SCON=0x40;//串行口工作于方式1 PCON|=0x80;//SMOD=1 TMOD=0x20;//T1工作于方式2,定時方式 TH1=0xcc;//設(shè)置時間常數(shù)初值 TL1=0xcc; TR1=1;//啟動T16.3.2串行口用于擴展并行I/O口1.用方式0擴展并行輸出口【例6-2】用89C51串行口外接CD4094擴展8位并行輸出口,8位并行輸出口的各位都接一個顯示發(fā)光二極管。要求發(fā)光二極管從左到右以一定延時輪流顯示,且不斷循環(huán)。發(fā)光二極管為共陰極接法。6.3.2串行口方式0用做擴展并行I/O口#include <reg51.h> #include <intrins.h> #define ucharunsignedchar #define uintunsignedint uchar temp; sbit STB=P1^0;voiddelaynms(uintn){ uinti,j; for(i=0;i<n;i++) for(j=0;j<125;j++);}6.3.2串行口用于擴展并行I/O口參考程序void main() { SCON=0x00; //串行口方式0初始化 temp=0x80; //最左邊的發(fā)光二極管先亮 STB=0; while(1) { SBUF=temp; while(!TI); STB=1;//啟動并行輸出 delaynms(1000); TI=0; temp=_cror_(temp,1);//右環(huán)移一次 STB=0; }}2.用方式0擴展并行輸入口【例6-3】用89C51串行口外加移位寄存器擴展8位并行輸入口。輸入數(shù)據(jù)由8個開關(guān)提供,另有一個開關(guān)S提供聯(lián)絡(luò)信號。當(dāng)S=0時,表示要求輸入數(shù)據(jù)。輸入的8位開關(guān)量為邏輯模擬子程序LOG提供輸入信號。6.3.2串行口用于擴展并行I/O口#include
<reg51.h> #include
<intrins.h> #define
uchar
unsignedchar #define
uintunsignedint uchar temp; sbit PNS=P1^0; sbit S=P1^1;voiddelaynms(uintn){ uinti,j;for(i=0;i<n;i++)
for(j=0;j<125;j++);}6.3.2串行口用于擴展并行I/O口參考程序void
LOG(uchartemp)
//模擬處理程序{
//處理程序...}void
main()
//主函數(shù){
while(1)
{
while(S);
PNS=1; //并行置入數(shù)據(jù)
PNS=0; //開始串行移位
SCON=0x10; //串行口方式0啟動接收
while(!RI); //查詢RI
RI=0;
temp=SBUF;
LOG(temp); //數(shù)據(jù)交給LOG函數(shù)
delaynms(1000);
}}雙機通信現(xiàn)象6.3.3雙機通信【例6-4】按圖連接兩個單片機系統(tǒng)進(jìn)行串行通信,雙機的RxD和TxD交叉相連,甲機的P1端口連接8個開關(guān),乙機的P1端口通過上拉電阻連接8個LED燈,甲機讀取P1口的8個開關(guān)狀態(tài)后,通過串行口發(fā)送到乙機,乙機收到甲機收到的8個開關(guān)狀態(tài)后送入P1端口控制8個LED燈的狀態(tài),波特率為1200b/s,晶振頻率為12MHz。進(jìn)行雙機通信時,兩機應(yīng)設(shè)定相同的數(shù)據(jù)格式和相同的波特率。6.3.3雙機通信分析:設(shè)SMOD=0,則T1的時間常數(shù)X的值為:
6.3.3雙機通信//甲機發(fā)送#include <reg51.h>
#define ucharunsignedchar
void main()
{TMOD=0x20;TH1=0xe6;TL1=0xe6;SCON=0x40;PCON=0x00;TR1=1;EA=1;ES=1;P1=0xff;
//讀P1口之前先給P1口送高電平
SBUF=P1;
//啟動串行發(fā)送while(1);}voidsend()interrupt4
{TI=0;SBUF=P1;}參考程序1(采用中斷方式)://乙機接收#include
<reg51.h> #define ucharunsignedchar void main() {TMOD=0x20;TH1=0xe6;TL1=0xe6;SCON=0x50;PCON=0x00;TR1=1;EA=1;ES=1;while(1);}voidreceiver()interrupt4{RI=0;P1=SBUF;}6.3.3雙機通信//甲機發(fā)送#include
<reg51.h> #define ucharunsignedchar void main() {TMOD=0x20;TH1=0xe6;TL1=0xe6;SCON=0x40;PCON=0x00;TR1=1;P1=0xff; //讀P1口之前先給P1口送高電平SBUF=P1; //啟動串行發(fā)送while(1){while(!TI);TI=0;SBUF=P1;}}參考程序2(采用查詢方式)://乙機接收#include
<reg51.h> #define ucharunsignedchar void main() {TMOD=0x20;TH1=0xe6;TL1=0xe6;SCON=0x50;PCON=0x00;TR1=1;while(1){while(!RI);RI=0;P1=SBUF;}}6.3.3雙機通信【例6-5】按圖連接兩個單片機系統(tǒng)進(jìn)行串行通信,雙機的RxD和TxD交叉相連,甲乙雙機分別配有1個按鍵和2個LED數(shù)碼管。2個LED數(shù)碼管分別代表發(fā)送和接收的數(shù)據(jù)。甲機通過按鍵SW2產(chǎn)生一個0~9之間的隨機數(shù)并在LED2上顯示,同理乙機通過按鍵SW3產(chǎn)生一個0~9之間的隨機數(shù)并在LED3上顯示。按鍵SW1按下時,甲機和乙機同時通過串行口發(fā)送產(chǎn)生的隨機數(shù),甲機接收的數(shù)據(jù)顯示在LED1上,乙機收到的數(shù)據(jù)顯示在LED4上,實現(xiàn)全雙工通信,波特率為2400b/s,雙方晶振都采用11.0592MHz,預(yù)置值TH1=0F4H。6.3.3雙機通信分析:(1)產(chǎn)生隨機數(shù)的方法有很多,由于串行通信要開啟T1,所以需要隨機數(shù)的時候去讀取TL1獲取隨機數(shù)。(2)圖中LED數(shù)碼管全部采用共陽極接法,顯示數(shù)字時需要將對應(yīng)的字形碼送入LED數(shù)碼管的數(shù)據(jù)線上。(3)甲機和乙機都是P1口對應(yīng)LED顯示數(shù)據(jù),P2口對應(yīng)LED顯示接收數(shù)據(jù),SW1按鈕控制發(fā)送,所以甲機和乙機程序相同。字符01234字形碼C0HF9HA4HB0H99H字符56789字形碼92H82HF8H80H90H6.3.3雙機通信#include <reg51.h> //51系列單片機頭文件#define ucharunsignedchar //宏定義#define LEDsend P1#define LEDrec P2uchar seg[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};uchar send,rec;void main() //主函數(shù){TMOD=0x20;TH1=0xf4;TL1=0xf4;SCON=0x50;PCON=0x00;TR1=1;EA=1;EX1=1;EX0=1;ES=1;while(1){LEDsend=seg[send];LEDrec=seg[rec];}}參考程序void int0()interrupt0 {send=TL1%10;}void int1()interrupt2 {ES=0;SBUF=send;while(!TI);TI=0;ES=1;}void serial()interrupt4 {RI=0;rec=SBUF;}【例10】試編寫程序,將片內(nèi)RAM40H~50H單元的數(shù)據(jù)塊,全部搬移到片外RAM從2000H起始的存儲區(qū)域。
#defineucharunsignedchardataucharbuffer1[17]_at_0x40;xdatauchar buffer2[17]_at_0x2000;voidmain(){ uchari; for(i=0;i<17;i++) { buffer2[i]=buffer1[i]; } while(1);}3.4.2循環(huán)語句參考程序:擴展:試編程將甲機片內(nèi)RAM的40H~50H單元的數(shù)據(jù)塊通過串行口發(fā)送到乙機片外RAM的2000H~2010H單元中去,要求接收和發(fā)送均采用中斷方式。設(shè)晶振頻率為12MHz,波特率為1200b/s。6.3.4多機通信1.多機通信原理單片機的主從式多機通信方式要有一臺主機和多臺從機。主機發(fā)送的信息可以傳送到各個從機或指定的從機,各從機發(fā)送的信息只能被主機接收,從機之間不能直接進(jìn)行通信。6.2.3串行口的控制與狀態(tài)②SM2:多機通信控制位。主要用于方式2和方式3中。在方式2和方式3處于接收狀態(tài)時,如SM2=1,REN=1,且接收到的第9位數(shù)據(jù)RB8是1,則RI(接收中斷標(biāo)志位)才被置1。若接收到的第9位數(shù)據(jù)RB8是0,則RI不會置1。在方式2和方式3處于接收狀態(tài)時,如SM2=0,無論接收到的第9位數(shù)據(jù)RB8是0還1,則RI都會被置1。在方式1中,如SM2=1,只有在接收到有效停止位時,則RI才會被置1。所以,方式1中SM2一般設(shè)置為0,以免丟失數(shù)據(jù)。在方式0中,SM2必須為0。6.3.4多機通信具體過程如下:全部從機均初始化為方式2或方式3,SM2=1,允許中斷。主機發(fā)送要尋址的從機地址,其中TB8=1表示發(fā)送的是呼叫地址幀(TB8=0時為數(shù)據(jù)幀)。所有從機均接收主機發(fā)送的地址,并進(jìn)行地址比較。被尋址的從機確認(rèn)地址后,置本機的SM2=0,向主機返回地址,供主機核對。核對無誤后,主機向被尋址的從機發(fā)送命令,通知從機接收或發(fā)送數(shù)據(jù)。通信只能在主、從機之間進(jìn)行,兩個從機之間的通信需通過主機作中介。本次通信結(jié)束后,從機重置SM2=1,主機可再對其他從機尋址。6.3.4多機通信【例6-7】如圖6-10所示,采用查詢方式將主機字符數(shù)組send中的8個字符發(fā)送給02號從機;02號從機將接收到的數(shù)據(jù)放到內(nèi)部字符數(shù)組rec中,波特率為1200b/s,fosc=11.0592MHz,預(yù)置值TH1=0E8H。#include <reg51.h> #define ucharunsignedchar #define uint
unsignedint uchar send[8]={0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07};void main() //主函數(shù){bit
flag02=0;uint
i;uchar
temp;TMOD=0x20; //設(shè)置T1工作方式2TH1=0xe8; //產(chǎn)生1200b/s波特率的初值TL1=0xe8;TR1=1;SCON=0xd8; //方式3,SM2=0,允許接收,TB8=1表示發(fā)送的是呼叫地址幀①主機程序:
while(!flag02){SBUF=0x02;//主機發(fā)送要尋址的從機地址while(!TI);TI=0;while(!RI);RI=0;temp=SBUF;if(temp==0x02)
flag02=1;}TB8=0;//主機向被尋址的從機發(fā)送數(shù)據(jù),TB8=0for(i=0;i<8;i++){SBUF=send[i];while(!TI);TI=0;}}6.3.4多機通信②從機程序:
#include <reg51.h> #define ucharunsignedchar #define uintunsignedint uchar rec[8];void main() {bit
flag02=0;uinti;uchartemp;TMOD=0x20;//設(shè)置T1工作方式2TH1=0xe8; //產(chǎn)生1200b/s波特率的初值TL1=0xe8;TR1=1;SCON=0xf0;//方式3,SM2=1(接收地址幀)允許接收while(!flag02){while(!RI);RI=0;temp=SBUF;if(temp==0x02);//判斷是否尋址本機{SM2=0;//確認(rèn)地址后,置本機的SM2=0SBUF=0x02;//向主機返回地址while(!TI);TI=0;for(i=0;i<8;i++){while(!RI);RI=0;if(RB8){SM2=1;//若接收的仍為地址幀,則置位SM2,返回重新接收地址幀break;}else{rec[i]=SBUF;}}if(i==8)flag02=1;}}}6.3.5單片機與PC機之間的通信1.RS-232接口1)機械特性現(xiàn)在的PC機上出現(xiàn)的COM1和COM2就是標(biāo)準(zhǔn)的RS-232C接口,采用9針陽頭。單片機和PC機都具有異步通信接口,但輸出電平不同,單片機為TTL電平,PC機為RS-232電平,所以單片機與PC機之間必須通過電平轉(zhuǎn)換才能實現(xiàn)串行通信。6.3.5單片機與PC機之間的通信引腳序號信號名稱符號流向功能2(3)發(fā)送數(shù)據(jù)TXDDTE→DCEDTE發(fā)送串行數(shù)據(jù)3(2)接收數(shù)據(jù)RXDDTE←DCEDTE接收串行數(shù)據(jù)4(7)請求發(fā)送RTSDTE→DCEDTE請求DCE將線路切換到發(fā)送方式5(8)允許發(fā)送CTSDTE←DCEDCE告訴DTE線路已接通可以發(fā)送數(shù)據(jù)6(6)數(shù)據(jù)設(shè)備準(zhǔn)備好DSRDTE←DCEDCE準(zhǔn)備好7(5)信號地
信號公共地8(1)載波檢測DCDDTE←DCE表示DCE接收到遠(yuǎn)程載波20(4)數(shù)據(jù)終端準(zhǔn)備好DTRDTE→DCEDTE準(zhǔn)備好22(9)振鈴指示RIDTE←DCE表示DCE與線路接通,出現(xiàn)振鈴
注:引腳序號括號內(nèi)的是DB-9連接器的引腳2)功能特性
RS-232C接口的主要信號線的功能定義如表所示。6.3.5單片機與PC機之間的通信3)電氣特性RS232采用負(fù)邏輯,即:邏輯“0”:+5V~+15V,邏輯“1”:-5V~-15V而單片機的輸入、輸出電平均為TTL電平,兩者連接時要加電平轉(zhuǎn)換電路。6.3.5單片機與PC機之間的通信4)適用范圍RS-232C接口總線適用于通信距離僅為幾十米、傳輸速率小于20Kb/s的設(shè)備。5)采用RS-232C總線標(biāo)準(zhǔn)連接系統(tǒng)①遠(yuǎn)程通信6.3.5單片機與PC機之間的通信②近程通信采用RS-232C總線標(biāo)準(zhǔn)作近距離串行通訊時,可將兩個DTE直接接連
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 軟件的項目管理系統(tǒng)規(guī)章制度
- 機械類實習(xí)報告模板10篇
- 烏河小學(xué)關(guān)于群眾滿意度調(diào)查的自查報告和整改方案
- 豆類作物種植與生態(tài)環(huán)境保護(hù)考核試卷
- 行政職業(yè)能力測試模擬436
- 2024-2030年嬰兒護(hù)膚油市場發(fā)展現(xiàn)狀分析及行業(yè)投資戰(zhàn)略研究報告
- 2024-2030年奶粉分析儀行業(yè)市場現(xiàn)狀供需分析及重點企業(yè)投資評估規(guī)劃分析研究報告
- 2024-2030年多功能引流導(dǎo)管行業(yè)市場現(xiàn)狀供需分析及投資評估規(guī)劃分析研究報告
- 2024-2030年聲級計行業(yè)市場深度分析及發(fā)展策略研究報告
- 2024-2030年塔式燈箱行業(yè)市場現(xiàn)狀供需分析及投資評估規(guī)劃分析研究報告
- 繪制建筑平面圖的步驟
- 凈化空調(diào)系統(tǒng)基礎(chǔ)培訓(xùn)課件
- 暖氣片安裝施工方案
- 神內(nèi)2格林巴利綜合癥病人的個案護(hù)理查房課件
- 民宿服務(wù)管理考核試題及答案
- 高級家政服務(wù)員考試(重點)題庫300題(含答案解析)
- 熱電廠危險源辨識風(fēng)險評價和風(fēng)險控制策劃表
- 小學(xué)國家德育質(zhì)量監(jiān)測試卷
- 不同性格員工的管理與溝通方法
- 西師大版五年級上冊數(shù)學(xué)課件除數(shù)是整數(shù)的除法
- 出國留學(xué)英文動機信出國動機信模板
評論
0/150
提交評論