版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
第五章C51單片機最小系統(tǒng)及應(yīng)用15.1并行接口5.2中斷系統(tǒng)5.3定時/計數(shù)器5.4串口通信5.1并行輸入/輸出接口5.1.1并行口應(yīng)用與編程【例5-1】利用單片機的P0口接8個發(fā)光二極管,P1口接8個開關(guān),編程實現(xiàn),當開關(guān)動作時,對應(yīng)的發(fā)光二極管亮或滅。匯編程序: ORG0100H MOVP1,#0FFHLOOP:MOVA,P1 MOVP0,A SJMPLOOP分析:只須把P1口的內(nèi)容讀入,通過P0口輸出即可。C51語言程序:#include<reg51.h>voidmain(void){unsignedchari;P1=0xff;for(;;){i=P1;P0=i;}}235.2中斷系統(tǒng)5.2.1中斷的基本概念中斷:平常CPU處理自己的工作,只有外設(shè)需要和CPU進行信息傳送時,采用中斷方式,暫停CPU工作,使CPU轉(zhuǎn)去處理外設(shè)的請求,處理完外設(shè)請求后,CPU繼續(xù)執(zhí)行原來被暫停的工作。中斷傳輸:是CPU與外設(shè)間最常用的一種數(shù)據(jù)傳輸方式。(a)單級中斷
(b)中斷嵌套
圖5-1CPU響應(yīng)斷過程的示意圖4中斷的功能:(1)CPU與外設(shè)同步工作(2)實時處理(3)故障處理:中斷的相關(guān)概念(1)中斷(2)中斷源:C51中有5個:兩個外部中斷,兩個定時/計數(shù)器中斷,一個串行口中斷。(3)中斷響應(yīng):CPU接受中斷申請,終止現(xiàn)行程序,轉(zhuǎn)為中斷服務(wù)。(4)斷點:現(xiàn)行程序被中斷的地址。(5)中斷優(yōu)先級:(6)中斷服務(wù)程序:實現(xiàn)中斷功能的處理程序;(7)中斷返回:完成中斷服務(wù)程序后,返回到被中斷的原程序,并繼續(xù)執(zhí)行該程序。55.2.2中斷系統(tǒng)中斷系統(tǒng)需要解決的問題:(1)CPU在不斷執(zhí)行指令過程中,如何檢測中斷請求?(2)如何使中斷雙方(CPU方和中斷源方)能人為控制——允許中斷或禁止中斷?(3)中斷的隨機性,如何實現(xiàn)轉(zhuǎn)移,更好地為該中斷源服務(wù)呢?(4)中斷源有多個,而CPU只有一個,當有多個中斷源同時有中斷請求時,怎樣控制CPU按照需要安排響應(yīng)次序?(5)中斷服務(wù)完畢,如何正確地返回到原斷點處?661.中斷系統(tǒng)的結(jié)構(gòu)
圖5-2C51的中斷系統(tǒng)結(jié)構(gòu)特殊功能寄存器:定時器控制寄存器TCON:保存中斷信息串行口控制寄存器SCON:保存中斷信息中斷允許寄存器IE:控制中斷的開放和關(guān)閉中斷優(yōu)先級寄存器IP:設(shè)置優(yōu)先級別7TCOND7D6D5D4D3D2D1D0(88H)TF1TR1TF0TR0IE1IT1IE0IT0IT0(IT1):外部中斷0(或1)觸發(fā)方式控制位。設(shè)置為0,選擇外部中斷為電平觸發(fā)方式;設(shè)置為1,則選擇外部中斷為邊沿觸發(fā)方式。IE0(IE1):外部中斷0(或1)的中斷請求標志位。在邊沿觸發(fā)方式時,若第一個機器周期采樣到P3.2(或P3.3)引腳為高電平,第二個機器周期采樣到P3.2(或P3.3)引腳為低電平時,由IE0(或IE1)置1,向CPU請求中斷,CPU響應(yīng)后自動將IE0(或IE1)清零。在電平觸發(fā)方式時,CPU在每個機器周期的S5P2采樣P3.2(或P3.3),若P3.2(或P3.3)引腳為高電平,則IE0(IE1)清0,若P3.2(或P3.3)引腳為低電平,則IE0(IE1)置1,向CPU請求中斷;響應(yīng)中斷后,并不對IE0(或IE1)進行處理。2.定時器控制寄存器TCON8如果在中斷服務(wù)程序返回時,P3.2(或P3.3)引腳還為低電平,則又會再一次響應(yīng)中斷。
為避免這種情況,只有在中斷服務(wù)程序返回前,撤消P3.2(或P3.3)的中斷請求信號??赏ㄟ^下圖所示電路實現(xiàn)。INTx8051P1.0QDSCLK外部中斷請求信號8#include<reg51.h>
sbitP10=P1^0;voidmain(){P10=0;P10=1;}9定時/計數(shù)器T0和T1中斷當T0(或T1)溢出時,由硬件置TF0(或TF1)為“1”,向CPU發(fā)送中斷請求,當CPU響應(yīng)中斷后,由硬件自動清除TF0(或TF1)。TR1、TR0:定時/計數(shù)器T1或T0的啟動位,置1啟動;0時停止。串行口中斷串行口中斷源對應(yīng)兩個中斷標志位:串行口發(fā)送TI、串接收中斷標志位RI。無論哪個標志位置“1”,都請求串行口中斷。TCOND7D6D5D4D3D2D1D0(88H)TF1TR1TF0TR0IE1IT1IE0IT0SCOND7D6D5D4D3D2D1D098HSM0SM1SM2RENTB8RB8TIRI103.中斷允許控制寄存器IEC51單片機中沒有專門的開中斷和關(guān)中斷指令,對各個中斷源的允許和屏蔽是由內(nèi)部的中斷允許寄存器IE的各位來控制的。中斷允許寄存器IE的字節(jié)地址為A8H,可以進行位尋址。IED7D6D5D4D3D2D1D0(A8H)EAET2ESET1EX1ET0EX0EA:中斷允許總控位。EA=0,屏蔽所有的中斷請求;EA=1,開放中斷。ET2:定時器/計數(shù)器T2的溢出中斷允許位ES:串行口中斷允許位。ET1:定時器/計數(shù)器T1的溢出中斷允許位。EX1:外部中斷INT1的中斷允許位。ET0:定時器/計數(shù)器T0的溢出中斷允許位。EX0:外部中斷INT0的中斷允許位。1011【例5-1】
開放INTl和Tl的溢出中斷,屏蔽其他中斷。分析:對應(yīng)的中斷允許控制字為:l0001100B,即8CH。只要將這個結(jié)果送入IE中,中斷系統(tǒng)就按所設(shè)置的結(jié)果來管理這些中斷源。形成這個控制結(jié)果的方法可以對IE按字節(jié)操作,也可以按位操作。
①按字節(jié)操作形式:IE=0x8C;②按位操作形式:EA=1;//開總中斷控制位EXl=1;//允許外部中斷1中斷ETl=1;//允許定時器/計數(shù)器1中斷IED7D6D5D4D3D2D1D0(A8H)EAET2ESET1EX1ET0EX0124.中斷優(yōu)先級寄存器IP
每個中斷源有兩級控制:高優(yōu)先級、低優(yōu)先級。中斷優(yōu)先級寄存器IP的字節(jié)地址為B8H,可以進行位尋址.IPD7D6D5D4D3D2D1D0(B8H)PT2PSPT1PX1PT0PX0PT2:定時器/計數(shù)器T2的中斷優(yōu)先級控制位,只用于52子系列。PS:串行口的中斷優(yōu)先級控制位。PT1:定時器/計數(shù)器T1的中斷優(yōu)先級控制位。PX1:外部中斷INT1的中斷優(yōu)先級控制位。PT0:定時器/計數(shù)器T0的中斷優(yōu)先級控制位。PX0:外部中斷INT0的中斷優(yōu)先級控制位。
如果某位被置“1”,則對應(yīng)的中斷源被設(shè)為高優(yōu)先級;
如果某位被清“0”,則對應(yīng)的中斷源被設(shè)為低優(yōu)先級。
對于同級中斷源,系統(tǒng)有默認的優(yōu)先權(quán)順序。13中斷源優(yōu)先級順序最高最低外部中斷0定時/計數(shù)器T0中斷外部中斷1定時/計數(shù)器T1中斷串行口中斷定時/計數(shù)器T2中斷中斷優(yōu)先級寄存器IP功能:改變中斷源的優(yōu)先權(quán)順序、實現(xiàn)二級中斷嵌套。對于中斷優(yōu)先權(quán)和中斷嵌套,C51單片機有以下三條規(guī)定:(1)正在進行的中斷過程不能被新的同級、低優(yōu)先級的中斷請求中斷。(2)正在進行的低優(yōu)先級中斷服務(wù)程序能被高優(yōu)先級中斷請求所中斷,實現(xiàn)兩級中斷嵌套。(3)CPU同時接收到幾個中斷請求時,首先響應(yīng)優(yōu)先級最高的中斷請求。145.各中斷服務(wù)程序的入口地址見表中斷源入口地址外部中斷00003H定時/計數(shù)器0000BH外部中斷10013H定時/計數(shù)器1001BH串行口0023H定時/計數(shù)器2(僅52子系列有)002BH6.中斷響應(yīng)時間
中斷響應(yīng)時間:是指CPU檢測到中斷請求信號到轉(zhuǎn)入中斷服務(wù)程序入口所需要的機器周期。C51單片機響應(yīng)中斷的最短時間為3個機器周期。最長8個機器周期。155.2.3中斷響應(yīng)過程1.中斷響應(yīng)的條件單片機響應(yīng)中斷的條件是中斷源有請求且CPU開中斷(即EA=1)。(1)無同級或高級中斷正在處理。(2)現(xiàn)行指令執(zhí)行到最后一個機器周期且已結(jié)束。(3)若現(xiàn)行指令為RETI或訪問IE、IP的指令時,執(zhí)行完該指令且緊隨其后的另一條指令也已執(zhí)行完畢。2.中斷響應(yīng)過程(1)根據(jù)中斷源的優(yōu)先級高低,對相應(yīng)的優(yōu)先級狀態(tài)觸發(fā)器置“1”,即關(guān)閉同級和低級的中斷;(2)保護斷點,即把程序計數(shù)器PC的內(nèi)容壓入堆棧保存。(3)清除內(nèi)部硬件可清除的中斷請求標志位(IE0、IE1、TF0、TF1)。(4)把被響應(yīng)的中斷服務(wù)程序入口地址送入PC,從而轉(zhuǎn)入相應(yīng)的中斷服務(wù)程序執(zhí)行。163.中斷服務(wù)程序設(shè)計的基本任務(wù)①
設(shè)置中斷允許控制寄存器IE,允許相應(yīng)的中斷源請求中斷。②設(shè)置中斷優(yōu)先級寄存器IP,確定并分配所使用的中斷源的優(yōu)先級。③
若是外部中斷源,還要設(shè)置中斷請求的觸發(fā)方式IT1或IT0,以決定采用電平觸發(fā)方式還是邊沿觸發(fā)方式。④
編寫中斷服務(wù)程序,處理中斷請求。中斷服務(wù)程序主要包括:中斷管理保護現(xiàn)場中斷處理恢復(fù)現(xiàn)場中斷返回175.2.4MCS-51中斷系統(tǒng)的應(yīng)用【例5-9】某工業(yè)監(jiān)控系統(tǒng),具有溫度、壓力、PH值等多路監(jiān)控功能,中斷源的連接如圖5.26所示。對于PH值,在小于7時向CPU申請中斷,CPU響應(yīng)中斷后使P3.0引腳輸出高電平,經(jīng)驅(qū)動,使加堿管道電磁閥接通1秒鐘,以調(diào)整PH值。17電磁閥P3.2INT0P3.08051P1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.7QRDCLK溫度1超限溫度2超限PH值超限壓力超限+5V18ORG0003H;外部中斷0中斷服務(wù)程序入口JBP1.0,INT00;查詢中斷源,轉(zhuǎn)對應(yīng)的中斷服務(wù)子程序JBP1.1,INT01JBP1.2,INT02JBP1.3,INT03 ORG0080H;PH值超限中斷服務(wù)程序INT02:PUSHPSW;保護現(xiàn)場 PUSHACC SETBPSW.3;工作寄存器設(shè)置為1組,以保護原0組的內(nèi)容 SETBP3.0;接通加堿管道電磁閥 ACALLDELAY;調(diào)延時1秒子程序 CLRP3.0;1秒鐘到關(guān)加堿管道電磁閥 ANLP1,#0BFH ORLP1,#40H;這兩條用來產(chǎn)生一個P1.6的負脈沖,
;用來撤除PH<7的中斷請求 POPACC POPPSW RETI匯編程序如下:19C語言程序:#include<reg51.h>sbitP10=P1^0;sbitP11=P1^1;sbitP12=P1^2;sbitP13=P1^3;sbitP16=P1^6;sbitP30=P3^0;voidint0()interrupt0using1{voidint00();voidint01();voidint02();voidint03();if(P10==1){int00();}//查詢調(diào)用對應(yīng)的函數(shù)elseif(P11==1){int01();}elseif(P12==1){int02();}elseif(P13==1){int03();}}voidint02(){unsignedchari;P30=1;for(i=0;i<255;i++);P30=0;P16=0;P16=1;}205.3定時/計數(shù)器5.3.1概述1.計數(shù)容量
:C51單片機中有兩個計數(shù)器,T0和T1,這兩個計數(shù)器分別是由兩個8位的RAM單元組成,即都是16位,最大計數(shù)容量是65536。2.定時:定時是對周期相等的脈沖進行計數(shù)。單片機內(nèi)部提供一個固定的計數(shù)源(即:晶振經(jīng)12分頻后的脈沖源),通過對計數(shù)源計數(shù)實現(xiàn)定時。定時/計數(shù)器的功能:
定時/計數(shù)器是單片機中最常用、最基本的組成功能部件之一,可用來實現(xiàn)定時控制、延時、頻率測量、脈沖寬度測量、信號發(fā)生、信號檢測等功能。3.溢出:
計數(shù)器溢出時,將使標志位TF0/TF1置“1”。一旦TF0/TF1由0變1,就會引發(fā)中斷處理事件。如:定時時間到,鬧鐘會響。4.定時方法:硬件定時定時功能全部由硬件電路完成,不占CPU時間,可通過修改電路中的元件參數(shù)(電阻或電容值)來調(diào)節(jié)定時時間,但硬件連接好后,定時值不能由軟件控制和修改,即不可編程。軟件定時
通過CPU循環(huán)執(zhí)行一段程序以實現(xiàn)延遲,延遲時間可通過指令和設(shè)計循環(huán)次數(shù)來實現(xiàn)。特點:時間精確,且無需外加硬件電路,占用CPU資源??删幊潭〞r
通過對系統(tǒng)時鐘脈沖計數(shù)來實現(xiàn)。計數(shù)值用程序設(shè)定和修改,使用靈活、方便。2151子系列單片機有兩個16位的可編程定時/計數(shù)器:定時/計數(shù)器T0和定時/計數(shù)器T1;52子系列有三個,還有一個定時/計數(shù)器T2每個定時/計數(shù)器既可以對系統(tǒng)時鐘計數(shù),實現(xiàn)定時;也可以對外部脈沖信號計數(shù),實現(xiàn)計數(shù)功能,通過編程設(shè)定來實現(xiàn)。每個定時/計數(shù)器都有多種工作方式,其中T0有四種工作方式;T1有三種工作方式,T2有三種工作方式。通過編程可設(shè)定工作方式。每一個定時/計數(shù)器定時或計數(shù)時間到時,產(chǎn)生溢出,使相應(yīng)的溢出位置位,溢出可通過查詢或中斷方式處理。5.定時/計數(shù)器的主要特性225.3.2定時/計數(shù)器T0、T1的結(jié)構(gòu)及工作原理定時/計數(shù)器T0、T1的結(jié)構(gòu)1.定時/計數(shù)器T0、T1的結(jié)構(gòu)232.定時/計數(shù)器T0、T1的工作原理
定時/計數(shù)器的核心是加1計數(shù)器;定時/計數(shù)器的控制電路受軟件控制、切換,TMOD;
定時器的定時時間與系統(tǒng)的振蕩頻率緊密相關(guān);
最短的定時時間?定時/計數(shù)器在計數(shù)時,外部脈沖的下降沿觸發(fā)計數(shù);
檢測一個跳變需要兩個機器周期,因此,外部事件的最高頻率為1/24振蕩頻率24計數(shù)過程:在每一個機器周期的S5P2時刻對T0(P3.4)或T1(P3.5)上信號采樣一次,如果上一個機器周期采樣到高電平,下一個機器周期采樣到低電平,則計數(shù)器在下一個機器周期的S3P2時刻加1計數(shù)。因而需要兩個機器周期才能識別一個計數(shù)脈沖,所以外部計數(shù)脈沖的頻率應(yīng)小于振蕩頻率的1/24。計數(shù)寄存器的溢出:(1)每來一個脈沖,計數(shù)寄存器加1;(2)計數(shù)器計滿時,再來一脈沖加1,計數(shù)器溢出,產(chǎn)生溢出信號,TF0或TF1置1;(3)計數(shù)器溢出表示定時時間到或計數(shù)值已滿,需要單片機處理。計數(shù)的初值為: 計數(shù)初值=2n-計數(shù)值。n=8、13、16位255.2.3定時/計數(shù)器的方式和控制寄存器1.定時/計數(shù)器的控制寄存器TCONTCOND7D6D5D4D3D2D1D0(88H)TF1TR1TF0TR0IE1IT1IE0IT0TF1、TF0:定時/計數(shù)器T1或T0的溢出標志位;TR1、TR0:定時/計數(shù)器T1或T0的啟動位,置1啟動;0時停止。IT0/IT1:外部中斷0(或1)的中斷觸發(fā)方式控制位IE0/IE1:外部中斷0(或1)的中斷請求標志位定時/計數(shù)器控制寄存器TCON,地址為88H,可位尋址,位地址范圍為88H~8FH。功能:控制定時器的啟動和停止、溢出中斷、觸發(fā)方式、鎖存中斷請求。262.定時/計數(shù)器的方式寄存器TMODTMODD7D6D5D4D3D2D1D0(89H)GATEC/TM1M0GATEC/TM1M0←定時器1→←定時器0→其中:M1、M0為工作方式選擇位,用于對T0的四種工作方式,T1的三種工作方式進行選擇,選擇情況如下M1M0工作方式方式說明00013位定時/計數(shù)器(8192)01116位定時/計數(shù)器(065535)1028位自動重置定時/計數(shù)器(255)113兩個8位定時/計數(shù)器(只有T0有)27C/T:定時或計數(shù)方式選擇位,當C/T=1時工作于計數(shù)方式;當C/T=0時工作于定時方式。GATE:門控位,用于控制定時/計數(shù)器的啟動是否受外部中斷請求信號的影響。GATE=0,運行只受TCON中運行控制位TR0/TR1的控制。GATE=1,運行同時受TR0/TR1和外中斷輸入信號的雙重控制。
只有當INT0/INT1=1且TR0/TR1=1,T0/T1才能運行。285.2.3定時/計數(shù)器的工作方式1.方式0振蕩器
12TLx(低5位)THx(高8位)TFx與或TxTRxGATEINTxS2S1C/TTcy中斷請求29方式1是13位的定時/計數(shù)方式,因而最大計數(shù)值(滿值)為2的13次冪,等于8192。如計數(shù)值為N,則置入的初值X為:
X=8192-N
如定時/計數(shù)器T0的計數(shù)值為1000,則初值為7192,轉(zhuǎn)換成二進制數(shù)為1110000011000B,則TH0=11100000B,TL0=00011000B。30【例5-6】設(shè)定時器T0選擇工作模式0,定時時間為1ms,fosc=6MHz。試確定T0初值,計算最大定時時間T。解:當T0處于工作模式0時,加1計數(shù)器為13位。(1)確定T0初值設(shè)T0的初值位X。據(jù)式5.2得:
X=7692D=1111000001100BT0的低5位:01100B=0CH即(TL0)=0CHT0的高8位:11110000B=F0H即(TH0)=0F0H(2)計算最大定時時間TT0的最大定時時間對應(yīng)于13位計數(shù)器T0的各位全為1,即(TL0)=1FH,(TH0)=FFH,初值為0。則:2.方式1方式1的結(jié)構(gòu)與方式0結(jié)構(gòu)相同,只是把13位變成16位,16位的加法計數(shù)器被全部用上。由于是16位的定時/計數(shù)方式,因而最大計數(shù)值(滿值)為2的16次冪,等于65536。如計數(shù)值為N,則置入的初值X為:X=65536-N如定時/計數(shù)器T0的計數(shù)值為1000,則初值為65536-1000=64536,轉(zhuǎn)換成二進制數(shù)為1111110000011000B,則TH0=11111100B,TL0=00011000B。31振蕩器
12TLx(低8位)THx(高8位)TFx與或TxTRxGATEINTxS2S1C/TTcy中斷請求3.方式2振蕩器
12TLx(8位)THx(8位)TFx與或TxTRxGATEINTxS2S1C/TTcy中斷請求重裝初值8
方式2下,16位的計數(shù)器只用了8位來計數(shù),用的是TL0(或TL1)的8位來進行計數(shù),而TH0(或TH1)用于保存初值。當TL0(或TL1)計滿時則溢出,一方面使TF0(或TF1)置位,另一方面溢出信號又會觸發(fā)圖上的三態(tài)門,使三態(tài)門導(dǎo)通,TH0(或TH1)的值就自動裝入TL0(或TL1)。32方式2是8位的定時/計數(shù)方式,最大計數(shù)值(滿值)為2的8次冪,等于256。如計數(shù)值為N,則置入的初值X為:
X=256-N
如定時/計數(shù)器T0的計數(shù)值為100,則初值為256-100=156,轉(zhuǎn)換成二進制數(shù)為10011100B,則TH0=TL0=10011100B。優(yōu)點:能夠進行自動重裝載。缺點:定時/計數(shù)范圍要小于方式0和方式133振蕩器
12TL0(8位)TF0與或T0TR0GATEINT0S2S1C/TTcy中斷請求TH0(8位)TF1S2中斷請求T1TR134四.方式3方式3只有定時/計數(shù)器T0才有,當M1M0為11時,T0工作于方式3。方式3下,T0被分為兩部分TL0和TH0,TL0作為定時/計數(shù)器使用,占用T0的全部控制位:GATE、C/T、TR0和TF0;TH0固定只能作定時器使用,對機器周期進行計數(shù),它占用T1的TR1位、TF1位和T1的中斷資源。5.2.4定時/計數(shù)器的初始化編程及應(yīng)用一.定時/計數(shù)器的編程定時/計數(shù)器初始化過程:1.選擇方式,確定方式控制字,寫入方式控制寄存器TMOD。2.預(yù)設(shè)定時或計數(shù)初值,寫入初值寄存器(TH0、TL0、TH1、TL1)。353.根據(jù)需要開放定時/計數(shù)器中斷(直接對IE賦值)。4.設(shè)置定時/計數(shù)器控制寄存器TCON值,啟動定時/計數(shù)器。(TR0、TR1置1,或外部中斷引腳電平啟動)定時方式:計數(shù)方式:5.等待定時/計數(shù)時間到,執(zhí)行中斷服務(wù)程序;如用查詢處理則編寫查詢程序判斷溢出標志,溢出標志等于1,則進行相應(yīng)處理。二.定時/計數(shù)器的應(yīng)用
利用定時/計數(shù)器來產(chǎn)生周期性波形。編程思想:
利用定時/計數(shù)器產(chǎn)生周期性的定時,定時時間到則對輸出端進行相應(yīng)處理。如產(chǎn)生周期性的方波只須定時時間到對輸出端取反一次?!纠?-2】設(shè)系統(tǒng)時鐘頻率為12MHz,用定時/計數(shù)器T0編程實現(xiàn)從P1.0輸出周期為500μs的方波。36分析:從P1.0輸出周期為500μs的方波,只須P1.0每250μs取反一次則可。當系統(tǒng)時鐘為12MHZ,定時/計數(shù)器T0工作于方式2時,最大定時時間為256μs,滿足250μs的定時要求。方式控制字應(yīng)設(shè)定為00000010B(02H)。系統(tǒng)時鐘為12MHZ,定時250μs,計數(shù)值N為250,初值X=256-250=6,則TH0=TL0=06H。匯編程序:ORG0000HLJMPMAINORG000BH;中斷處理CPLP1.0RETIORG0100H;主程序MAIN: MOVTMOD,#02HMOVTH0,#06HMOVTL0,#06HSETBEASETBET0SETBTR0SJMP$ENDC語言程序:#include<reg51.h>//包含特殊功能寄存器庫sbitP1_0=P1^0;voidmain(){TMOD=0x02;TH0=0x06;TL0=0x06;EA=1;ET0=1;TR0=1;while(1);}voidtime0_int(void)interrupt1//中斷服務(wù)程序{P1_0=!P1_0;}(1)采用中斷處理方式的程序:37(2)采用查詢方式處理程序匯編程序:ORG0000HLJMPMAINORG0100H;主程序MAIN: MOVTMOD,#02H MOVTH0,#06H MOVTL0,#06H SETBTR0LOOP: JBCTF0,NEXT;查詢計數(shù)溢出
SJMPLOOPNEXT: CPLP1.0 SJMPLOOP SJMP$ ENDC語言程序:#include<reg51.h>//包含特殊功能寄存器庫sbitP1_0=P1^0;voidmain(){chari;TMOD=0x02;TH0=0x06;TL0=0x06;TR0=1;for(;;){if(TF0){TF0=0;P1_0=!P1_0;}//查詢計數(shù)溢出}}38注意:如果定時時間大于65536μs,用一個定時/計數(shù)器直接處理不能實現(xiàn),可用兩個定時/計數(shù)器共同處理或一個定時/計數(shù)器配合軟件計數(shù)方式處理。根據(jù)例5-2的處理過程,應(yīng)產(chǎn)生500ms的周期性的定時。39【例5-3】設(shè)系統(tǒng)時鐘頻率為12MHz,編程實現(xiàn)從P1.1輸出周期為1s的方波。由于定時時間較長,一個定時/計數(shù)器不能直接實現(xiàn),可用定時/計數(shù)器T0產(chǎn)生周期性為10ms的定時,然后用一個寄存器R2對10ms計數(shù)50次或用定時/計數(shù)器T1對10ms計數(shù)50次實現(xiàn)。系統(tǒng)時鐘為12MHz,定時/計數(shù)器T0定時10ms,計數(shù)值N為10000,只能選方式1,方式控制字為00000001B(01H),初值X:X=65536-10000=55536=1101100011110000B則TH0=11011000B=D8H,TL0=11110000B=F0H。匯編程序:ORG0000HLJMPMAINORG000BHLJMPINTT0ORG0100HMAIN: MOVTMOD,#01H MOVTH0,#0D8H MOVTL0,#0F0H MOVR2,#00H SETBEA SETBET0 SETBTR0 SJMP$INTT0:MOVTH0,#0D8H MOVTL0,#0F0H INCR2 CJNER2,#32H,NEXT CPLP1.1 MOVR2,#00HNEXT:RETI END40(1)用寄存器R2作計數(shù)器軟件計數(shù),中斷處理方式。C語言程序:#include<reg51.h>//包含特殊功能寄存器庫sbitP1_1=P1^1;chari;voidmain(){TMOD=0x01;TH0=0xD8;TL0=0xf0;EA=1;ET0=1;i=0;TR0=1;while(1);}voidtime0_int(void)interrupt1//中斷服務(wù)程序{TH0=0xD8;TL0=0xf0;i++;if(i==50){P1_1=!P1_1;i=0;}}41(2)用定時/計數(shù)器T1計數(shù)實現(xiàn)42定時/計數(shù)器T1工作于計數(shù)方式時,計數(shù)脈沖通過T1(P3.5)輸入,設(shè)定時/計數(shù)器T0定時時間到對T1(P3.5)取反一次,則T1(P3.5)每20ms產(chǎn)生一個計數(shù)脈沖,那么定時500ms只須計數(shù)25次。設(shè)定時/計數(shù)器T1工作于方式2,初值X=256-25=231=11100111B=E7H,TH1=TL1=E7H。T0工作于方式1,定時,則這時方式控制字為01100001B(61H)。定時/計數(shù)器T0和T1都采用中斷方式工作。ORG0100HMAIN: MOVTMOD,#61H MOVTH0,#0D8H MOVTL0,#0F0H MOVTH1,#0E7H MOVTL1,#0E7H SETBEA SETBET0 SETBET1 SETBTR0 SETBTR1 SJMP$ END43匯編程序如下:ORG0000HLJMPMAINORG000BHMOVTH0,#0D8HMOVTL0,#0F0HCPLP3.5RETIORG001BHCPLP1.1RETIC語言程序如下:#include<reg51.h>//包含特殊功能寄存器庫sbitP1_1=P1^1;sbitP3_5=P3^5;voidmain(){TMOD=0x61;TH0=0xD8;TL0=0xf0;TH1=0xE7;TL1=0xE7;EA=1;ET0=1;ET1=1;TR0=1;TR1=1;while(1);}voidtime0_int(void)interrupt1//T0中斷服務(wù)程序{TH0=0xD8;TL0=0xf0;P3_5=!P3_5;}voidtime1_int(void)interrupt3//T1中斷服務(wù)程序{P1_1=!P1_1;}445.4串行接口5.4.1通信的基本概念1.并行通信和串行通信計算機與外界的通信有兩種基本方式:并行通信和串行通信。45根據(jù)信息傳送的方向,串行通信可以分為單工、半雙工和全雙工3種。(a)AB(b)(c)ABABss二.同步通信和異步通信串行通信按信息的格式分為:異步通信、同步通信。1.串行異步通信方式特點:數(shù)據(jù)傳送時以字節(jié)為單位,未傳送時線路處于空閑狀態(tài),空閑線路約定為高電平“1”。傳送一個字符又稱為一幀信息,傳送時每一個字符前加一個低電平的起始位,然后是數(shù)據(jù)位,數(shù)據(jù)位可以是5~8位,低位在前,高位在后,數(shù)據(jù)位后可以帶一個奇偶校驗位,最后是停止位,停止位用高電平表示,它可以是1位、1位半或2位。46第n+1個字符起始位奇偶校驗位停止位下一個起始位D2D1D0D3D4D5D6D7數(shù)據(jù)位D0D10010/10/10/10/10/10/10/10/10/10/10/1D2……第n個字符
一次只傳送一個字符,對發(fā)送時鐘、接收時鐘的要求相對不高,線路簡單,但傳送速度較慢。2.串行同步通信方式特點:數(shù)據(jù)傳送時以字符塊為單位,一次傳送多個字符,傳送時須在前面加上一個或兩個同步字符,后面加上校驗字符,格式如圖:同步字符1同步字符2數(shù)據(jù)塊校驗字符1校驗字符2同步方式一次連續(xù)傳送多個字符,傳送的速度快,但對發(fā)送時鐘和接收時鐘要求較高,需用一個時鐘源協(xié)調(diào)收發(fā)兩端的工作,控制線路復(fù)雜。47三.波特率波特率:是指串行通信中,單位時間傳送的二進制位數(shù),單位為bps。在異步通信中,傳輸速度往往又用每秒傳送多少個字節(jié)來表示(Bps)。它與波特率的關(guān)系為:波特率(bps)=一個字符的二進制位數(shù)×字符/秒(Bps)例如:每秒傳送200個字符,每個字符1位起始位、8個數(shù)據(jù)位、1個校驗位和1個停止位。則波特率為2200bps。48發(fā)送SBUF接收SBUF發(fā)送控制器接收控制器輸入移位寄存器串行口控制寄存器波特率發(fā)生器串行口中斷內(nèi)部總線門+RXD(P3.0)TXD(P3.1)RITI495.4.2MCS-51單片機串行口功能與結(jié)構(gòu)1.C51串行口結(jié)構(gòu)C51單片機具有一個全雙工、串行、異步通信接口。實現(xiàn)串行數(shù)據(jù)的發(fā)送和接收。既可以實現(xiàn)串行異步通信,也可作為同步移位寄存器。C51單片機串行口主要由發(fā)送數(shù)據(jù)寄存器、發(fā)送控制器、輸出控制門、接收數(shù)據(jù)寄存器、接收控制器、輸入移位寄存器等組成。由三個特殊功能寄存器組成:發(fā)送數(shù)據(jù)寄存器和接收數(shù)據(jù)寄存器合起用一個特殊功能寄存器SBUF(串行口數(shù)據(jù)寄存器)、串行口控制寄存器SCON、電源控制寄存器PCON。1).串行口控制寄存器SCON2.C51串行口相關(guān)寄存器圖5-22串行口控制寄存器SCON位格式51SM0、SM1:串行口工作方式選擇位。用于選擇四種工作方式SM0SM1方式功能波特率00方式0移位寄存器方式fosc/1201方式18位異步通信方式可變10方式29位異步通信方式fosc/32或fosc/6411方式39位異步通信方式可變②多機通信控制位SM2(SCON.5)主要用于方式2和方式3。如果SM2=1,允許多機通信。若SM2=0,直通方式,當收到RB8(0或1),則接收一幀數(shù)據(jù)后,不管第九位數(shù)據(jù)是0還是1,都置RI=1,使接收到的數(shù)據(jù)裝入SBUF。若SM2=1,允許多機通信。當主機與多片C51(從機)通信時,所有從機的SM2位都置1。主機首先發(fā)送一幀數(shù)據(jù)為地址,即從機編號,其中第9位為1,所有的從機接收到數(shù)據(jù)后,將其中第9位裝入RB8中。各個從機根據(jù)收到的第9位數(shù)據(jù)(RB8中)的值來決定從機可否再接收主機的信息。SM2:多機通信控制位。REN:允許接收控制位。當REN=1,則允許接收,當REN=0,則禁止接收。TB8:發(fā)送數(shù)據(jù)的第9位。RB8:接收數(shù)據(jù)的第9位。TI:發(fā)送中斷標志位。RI:接收中斷標志位。2)電源控制寄存器PCONPCOND7D6D5D4D3D2D1D087HSMOD當SMOD位為1,則串行口方式1、方式2、方式3的波特率加倍。525.4.3串行口的工作方式1)方式0
方式0,通常用來作為同步移位寄存器,擴展I/O口。在方式0工作時波特率固定為:fosc/12。工作時,串行數(shù)據(jù)通過RXD輸入和輸出,同步時鐘通過TXD輸出。發(fā)送和接收數(shù)據(jù)時低位在前,高位在后,長度為8位。5354(1)發(fā)送過程
在TI=0時,當CPU執(zhí)行一條向SBUF寫數(shù)據(jù)的指令時,如MOVSBUF,A,就啟動發(fā)送過程。經(jīng)過一個機器周期,寫入發(fā)送數(shù)據(jù)寄存器中的數(shù)據(jù)按低位在前,高位在后從RXD依次發(fā)送出去,同步時鐘從TXD送出。8位數(shù)據(jù)(一幀)發(fā)送完畢后,由硬件使發(fā)送中斷標志TI置位,向CPU申請中斷。再次發(fā)送數(shù)據(jù)之前,TI必須由軟件清零。55(2)接收過程
在RI=0條件下,將REN(SCON.4)置“1”,啟動一次接收過程。串行數(shù)據(jù)通過RXD接收,同步移位脈沖通過TXD輸出。在移位脈沖的控制下,串行數(shù)據(jù)依次移入移位寄存器。當8位數(shù)據(jù)全部移入移位寄存器后,接收控制器發(fā)出“裝載SBUF”信號,將8位數(shù)據(jù)并行送入接收數(shù)據(jù)緩沖器SBUF,同時,由硬件使接收中斷標志RI置位1,向CPU申請中斷。2)方式1
方式1是8位異步通信方式。一幀信息為10位:1位起始位(0),8位數(shù)據(jù)位(低位在前)和1位停止位。TXD發(fā)送數(shù)據(jù)端,RXD為接收數(shù)據(jù)端。波特率可變,由定時/計數(shù)器T1的溢出率和電源控制寄存器PCON中的SMOD位決定。即:波特率=2SMOD×(T1的溢出率)/32。5657(1)方式1發(fā)送過程在TI=0時,方式1的發(fā)送過程與方式0的發(fā)送過程類似,當執(zhí)行寫發(fā)送緩沖寄存器語句:SBUF=x(x為任意值)時,就啟動發(fā)送,數(shù)據(jù)由TXD送出,發(fā)送時鐘由定時/計數(shù)器T1送來的溢出信號經(jīng)過16分頻或32分頻后得到。在發(fā)送時鐘的作用下,先通過TXD端送出一個低電平的起始位,然后是8位數(shù)據(jù)(低位在前),其后是一個高電平的停止位,當一幀數(shù)據(jù)發(fā)送完畢后,由硬件使發(fā)送中斷標志TI置位,向CPU申請中斷,完成一次發(fā)送過程。(2)方式1接收過程當允許接收控制位REN置1,接收器開始工作。接收器以選波特率的16倍速率對RXD上的電平進行采樣。當采樣到負跳變時,啟動接收控制器,開始接收數(shù)據(jù)。在接收移位脈沖的控制下,依次把數(shù)據(jù)移入移位寄存器,當8位數(shù)據(jù)及停止位全部移入后,根據(jù)以下狀態(tài),進行響應(yīng)操作。①RI=0、SM2=0,接收控制器將輸入移位寄存器中的8位數(shù)據(jù)裝入接收數(shù)據(jù)寄存器SBUF,停止位裝入RB8,并置RI=1,向CPU申請中斷。②RI=0、SM2=1,那么只有停止位為“1”才發(fā)生上述操作。③RI=0、SM2=1,停止位為“0”,接收的數(shù)據(jù)不裝入SBUF,數(shù)據(jù)丟失。④RI=1,接收的數(shù)據(jù)在不裝入SBUF,即數(shù)據(jù)丟失。583)方式2和方式3
方式2和方式3都為9位異步通信接口。一幀信息長度為11位:1個低電平的起始位,9位數(shù)據(jù)位,1個高電平的停止位。發(fā)送的第9位數(shù)據(jù)放于TB8中,接收的第9位數(shù)據(jù)放于RB8中。方式2和方式3的區(qū)別在于波特率不同。方式2的波特率有兩種:fosc/32或fosc/64,方式3的波特率與方式1的波特率相同,由定時/計數(shù)器T1的溢出率和電源控制寄存器PCON中的SMOD位決定,即:波特率=2SMOD×(T1的溢出率)/32。在方式3時,也要對定時/計數(shù)器T1進行初始化。5960(1)方式2和方式3發(fā)送過程
方式2和方式3發(fā)送的數(shù)據(jù)為9位,其中發(fā)送的第9位在TB8中,在啟動發(fā)送之前,必須把要發(fā)送的第9位數(shù)據(jù)裝入SCON寄存器中的TB8中。準備好TB8后,就可以向SBUF中寫入發(fā)送的字符數(shù)據(jù)來啟動發(fā)送過程。發(fā)送時前8位數(shù)據(jù)從發(fā)送數(shù)據(jù)寄存器中取得,發(fā)送的第9位從TB8中取得。一幀信息發(fā)送完畢,置TI為1。發(fā)送前,由軟件設(shè)置TB8,可使用如下語句完成:TB8=1; //TB8位置1TB8=0; //TB8位清零61(2)接收過程方式2和方式3的接收過程與方式1類似,當REN位置1時啟動接收過程,所不同的是接收的第9位數(shù)據(jù)是發(fā)送過來的TB8位,而不是停止位,接收到后存放到SCON中的RB8中,對接收是否有判斷也是用接收的第9位,而不是用停止位。其余情況與方式1相同。625.4.4串行口波特率設(shè)計方式0:波特率是固定的,為單片機晶振頻率的1/12:BR=fOSC/12(fOSC為晶振頻率)方式2:晶振頻率的1/32或1/64:
BR=2SMOD
×fOSC/64方式1和方式3:波特率是可變的,其波特率由定時器1的溢出率決定,定時器1溢出率:單位時間定時器溢出次數(shù);當定時器1作波特率發(fā)生器時,通常選用定時工作方式2(8位自動加載)。設(shè)TH1為計數(shù)初值,T1溢出率計算公式為:波特率計算公式:
63串口工作方式及波特率(b/s)fosc(MHz)SMOD定時器1C/工作方式初值方式1、362.5K12102FFH19.2L11.0592102FDH960011.0592002FDH480011.0592002FAH240011.0592002F4H120011.0592002E8H如果串行通信選用很低的波特率,可將定時器T1置于模式0或模式1,即13位或16位定時方式;但在這種情況下,T1溢出時,需要中斷服務(wù)程序重裝初值。中斷響應(yīng)時間、執(zhí)行指令時間會使波特率產(chǎn)生一定的誤差,可用改變初值的辦法加以調(diào)整。5.4.5串行口的編程及應(yīng)用1)串行口的初始化編程1.串行口控制寄存器SCON的確定。根據(jù)工作方式確定SM0、SM1位;對于方式2和方式3還要確定SM2位;如果是接收端,則置允許接收位REN為1;如果方式2和方式3發(fā)送數(shù)據(jù),則應(yīng)將發(fā)送數(shù)據(jù)的第9位寫入TB8中。對于方式0,不需要對波特率進行設(shè)置。對于方式2,設(shè)置波特率僅須對PCON中的SMOD位進行設(shè)置。642.設(shè)定波特率倍增寄存器(PCON)中SMOD的值;3.確定T1的工作方式(編程TMOD寄存器);4.設(shè)置波特率,計算并裝入定時初值。
對于方式1和方式3,不僅需對PCON中的SMOD位編程,還需開啟定時器1,對T1編程,計算T1初值,裝載TH1、TL1,并啟動定時(編程TCON中的TR1位)。5.選擇查詢方式或中斷方式,在中斷工作方式時,需對IE編程。65【例5-13】8051單片機時鐘振蕩頻率為11.0592MHz,選用定時器T1工作模式2作為波特率發(fā)生器,波特率為2400b/s,采用查詢方式,求初值。并編寫初始化程序。解:根據(jù)要求定時器/計數(shù)器T1的方式控制字TMOD為20H。
串行口波特率為2400b/s,波特率不倍增,SMOD=0,據(jù)波特率計算公式:所以:(TH1)=(TL1)=F4H初始化程序:#include<reg51.h>voidInitUART(void){PCON=0x00;//波特率不倍增
SCON=0x50;//串行口工作在方式1,允許接收
TMOD=0x20;TH1=0xF4;TL1=0xF4;TR1=1;
}2)串行口的應(yīng)用
通常用于三種情況:利用方式0擴展并行I/O口;利用方式1實現(xiàn)點對點的雙機通信;利用方式2或方式3實現(xiàn)多機通信。(1)利用方式0擴展并行I/O口66【例5-4】8051單片機的串行口外接串入并出的芯片CD4094擴展并行輸出口控制一組發(fā)光二極管,使發(fā)光二極管從左至右延時輪流顯示。CD4094是串入并出的芯片,帶有一個控制端STB,當STB=0時,打開串行輸入控制門,在時鐘信號CLK的控制下,數(shù)據(jù)從串行輸入端DATA依次輸入;當STB=1,打開并行輸出控制門,CD4094中的8位數(shù)據(jù)并行輸出。使用時,8051串行口工作于方式0,8051的TXD接CD4094的CLK,RXD接DATA,STB用P1.0控制,8位并行輸出端接8個發(fā)光二極管。67設(shè)串行口采用查詢方式,顯示的延時依靠調(diào)用延時子程序來實現(xiàn)。匯編程序:ORG0000HLJMPMAINORG0100HMAIN: MOVSCON,#00H MOVA,#01H CLRP1.0START:MOVSBUF,ALOOP:JNBTI,LOOP SETBP1.0 ACALLDELAY CLRTI RLA CLRP1.0 SJMPSTARTDELAY:MOVR7,#05HLOOP2:MOVR6,#0FFHLOOP1:DJNZR6,LOOP1 DJNZR7,LOOP2 RET END68C語言程序:#include<reg51.h>//包含特殊功能寄存器庫sbitP1_0=P1^0;voidmain(){unsignedchari,j;SCON=0x00;j=0x01;for(;;){P1_0=0;SBUF=j;while(!TI){;}P1_0=1;TI=0;for(i=0;i<=254;i++){;}j=j*2;if(j==0x00)j=0x01;}}69【例5-5】用8051單片機的串行口外接并入串出的芯片CD4014擴展并行輸入口,輸入一組開關(guān)的信息。CD4014是一塊8位的并入串出的芯片,帶有一個控制端P/S,當P/S=1時,8位并行數(shù)據(jù)置入到內(nèi)部的寄存器;當P/S=0時,在時鐘信號CLK的控制下,內(nèi)部寄存器的內(nèi)容按低位在前從QB串行輸出端依次輸出;使用時,8051串行口工作于方式0,8051的TXD接CD4094的CLK,RXD接QB,P/S用P1.0控制,另外,用P1.1控制8并行數(shù)據(jù)的置入。如圖所示。8051RXDTXDP1.0QBCLKP/SP1.1K0K7K70
串行口方式0數(shù)據(jù)的接收,用SCON寄存器中的REN位來控制,采用查詢RI的方式來判斷數(shù)據(jù)是否輸入。程序如下:匯編程序: ORG0000H LJMPMAIN ORG0100HMAIN:SETBP1.1START:JBP1.1,START SETBP1.0 CLRP1.0 MOVSCON,#10HLOOP:JNBRI,LOOP CLRRI MOVA,SBUF ……71C語言程序:#include<reg51.h>//包含特殊功能寄存器庫sbitP1_0=P1^0;sbitP1_1=P1^1;voidmain(){unsignedchari;P1_1=1;while(P1_1==1){;}P1_0=1;P1_0=0;SCON=0x10;while(!RI){;}RI=0;i=SBUF;……}72(2)利用方式1實現(xiàn)點對點的雙機通信
要實現(xiàn)甲與乙兩臺單片機點對點的雙機通信,線路只須將甲機的TXD與乙機的RXD相連,將甲機的RXD與乙機的TXD相連,地線與地線相連?!纠?-6】用匯編語言編程通過串行實現(xiàn)將甲機的片內(nèi)RAM中30H~3FH單元的內(nèi)容傳送到乙機的片內(nèi)RAM的40H~4FH單元中。80518051甲機RXDTXDGNDTXDRXDGND
乙機線路連接如圖甲、乙兩機都選擇方式1:8位異步通信方式,最高位用作奇偶校驗,波特率為1200bps,甲機發(fā)送,乙機接收,因此甲機的串口控制字為40H,乙機的串口控制字為50H。7374(2)利用方式1實現(xiàn)點對點的雙機通信
要實現(xiàn)甲與乙兩臺單片機點對點的雙機通信,線路只須將甲機的TXD與乙機的RXD相連,將甲機的RXD與乙機的TXD相連,地線與地線相連。80518051甲機RXDTXDGNDTXDRXDGND
乙機75【例5-15】通信雙方采用方式1,即:一幀信息中有1個起始位、8個數(shù)據(jù)位和1個停止位;波特率為2400bps,單片機時鐘振蕩頻率選用11.0592MHz。T1工作在定時器方式2,經(jīng)計算可得:TH1=TL1=0F4H,PCON寄存器的SMOD位為0。通信協(xié)議:1號機發(fā)送時,先發(fā)送一個“E1”聯(lián)絡(luò)信號,2號機收到后回答一個“E2”應(yīng)答信號,表示同意接收。當1號機收到應(yīng)答信號“E2”后,開始發(fā)送數(shù)據(jù),每發(fā)送一個字節(jié)數(shù)據(jù)都要計算“校驗和”,假定數(shù)據(jù)塊長度為16個字節(jié),起始地址為40H,一個數(shù)據(jù)塊發(fā)送完畢后立即發(fā)送“校驗和”。2號機接收數(shù)據(jù)并轉(zhuǎn)存到數(shù)據(jù)緩沖區(qū),起始地址也為40H,每接收到一個字節(jié)數(shù)據(jù)便計算一次“校驗和”;當收完一個數(shù)據(jù)塊后,再接收1號機發(fā)來的“校驗和”,并將它與2號機求出的校驗和進行比較。若兩者相等,說明接收正確,2號機回答00H;若兩者不相等,說明接收不正確,2號機回答0FFH,請求重發(fā)。1號機接到00H后結(jié)束發(fā)送;若收到答復(fù)非零,則重新發(fā)送一次數(shù)據(jù)。76771號機發(fā)送程序如下:#include#defineucharunsignedcharucharidatabuf[10];ucharsum;uchari;voidmain(){TMOD=0X20;TH1=TL1=1;TR1=1;PCON=0x00;SCON=0x50;//串行口工作在方式1,允許接收do{SBUF=0Xe1;//發(fā)送聯(lián)絡(luò)信號“E1”while(TI==0);TI=0;while(RI==0);RI=0;//等待乙機回答}while((SBUF^0XE2)!=0);//乙機未準備好,繼續(xù)聯(lián)絡(luò)do{sum=0;for(i=0;i<10;i++){SBUF=buf[i];sum+=buf[i];//求校驗和while(TI==0);TI=0;}SBUF=sum;//發(fā)送校驗和while(TI==0);TI=0;while(RI==0);RI=0;//等待乙機應(yīng)答}while(SBUF!=0);//出錯則重發(fā)}782號機接收程序:#include#defineucharunsignedcharucharidatabuf[10];ucharsum;uchari;voidmain(){TMOD=0X20;TH1=TL1=0XF4;TR1=1;PCON=0x00;SCON=0x50;//串行口工作在方式1,允許接收Do{while(RI==0);RI=0;}while((SBUF^0Xe1)!=0)//判斷A機是否發(fā)出請求SBUF=0Xe2;//發(fā)送應(yīng)答信號“E2”while(TI==0);TI=0;//等待結(jié)束while(1){sum=0;//清校驗和for(i=0;i<10;i++){while(RI==0);RI=0;buf[i]=SBUF;//接收數(shù)據(jù)sum+=buf[i];}while(RI==0);RI=0;if((SBUF^sum)==0)//比較檢驗和{SBUF=0x00;break;}//校驗和相同則發(fā)“00”else{SBUF=0xFF;//出錯則發(fā)“FF”,重新接收while(TI==0);TI=0;}}} MOVC,P MOVA.7,C MOVSBUF,AWAIT:JNBTI,WAIT CLRTI INCR0 DJINZR7,LOOP RET例:通信方式1,波特率由T1的溢出率和電源控制寄存器PCON中的SMOD位決定。則須對定時/計數(shù)器T1初始化。設(shè)SMOD=0,甲、乙兩機的振蕩頻率為12MHz,由于波特率為1200。定時/計數(shù)器T1選擇為方式2,則初值為:初值=256-fosc×2SMOD/(12×波特率×32)=256-12000000/(12×1200×32)≈230=E6H根據(jù)要求定時/計數(shù)器T1的方式控制字為20H。甲機發(fā)送程序:TSTART:MOVTMOD,#2
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 《導(dǎo)醫(yī)工作流程》課件
- 單位管理制度集合大全【人員管理篇】
- 單位管理制度集粹選集【人事管理篇】
- 單位管理制度匯編大全【員工管理】
- 單位管理制度分享合集【職工管理】十篇
- 單位管理制度呈現(xiàn)大全【員工管理篇】十篇
- 《員工的激勵與考核》課件
- 《語文大自然的語言》課件
- 八年級下冊期末考試專項訓(xùn)練03 論述題30(答案及解析)
- 《標準的理解要點》課件
- 青島版科學(xué)三年級上冊全冊課件教材
- Project項目管理(從菜鳥到實戰(zhàn)高手)
- 6S視覺管理之定置劃線顏色管理及標準樣式
- 2024國家開放大學(xué)電大本科《西方行政學(xué)說》期末試題及答案
- 四年級數(shù)學(xué)(除數(shù)是兩位數(shù))計算題專項練習及答案
- DL∕T 5783-2019 水電水利地下工程地質(zhì)超前預(yù)報技術(shù)規(guī)程
- 2024-2030年中國電子級四氟化硅行業(yè)風險評估及未來全景深度解析研究報告
- JGJ106-2014建筑基樁檢測技術(shù)規(guī)范
- 中考字音字形練習題(含答案)-字音字形專項訓(xùn)練
- 四柱萬能液壓機液壓系統(tǒng) (1)講解
- JTT 1501-2024 潛水作業(yè)現(xiàn)場安全監(jiān)管要求(正式版)
評論
0/150
提交評論