版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
單片機原理、接口及應用51系列單片機內(nèi)部結構如圖1-1所示。1.1.2CPUCPU是單片機的核心部件。它由運算器和控制器等部件組成。1.運算器 運算器的功能是進行算術運算:加、減、乘、除、加1、減1、比較、BCD碼十進制調(diào)整等 邏輯運算:與、或、異或、求反、循環(huán)等邏輯操作 位操作:內(nèi)部有布爾處理器,它以進位標志位C為位累加器,用來處理位操作。可對位置“1”、對位清零、位判斷等。 操作結果的狀態(tài)信息送至狀態(tài)寄存PSW。2.程序計數(shù)器PC
程序計數(shù)器PC是16位的寄存器,用來存放即將要執(zhí)行的指令地址,可對64KB程序存儲器直接尋址。執(zhí)行指令時,PC內(nèi)容的低8位經(jīng)P0口輸出,高8位經(jīng)P2口輸出。
3.指令寄存器
指令寄存器中存放指令代碼。CPU執(zhí)行指令時,由程序存儲器中讀取的指令代碼送入指令存儲器,經(jīng)指令譯碼器譯碼后由定時與控制電路發(fā)出相應的控制信號,完成指令功能。
1.2存儲器MCS-51的儲存器結構與常見的微型計算機的配置方法不同,它將程序存儲器和數(shù)據(jù)存儲器分開,各有自己的尋址方式、控制信號和功能。程序存儲器用來存放程序和始終要保留的常數(shù)。數(shù)據(jù)存儲器存放程序運行中所需要的常數(shù)和變量。從物理空間看,MCS-51有四個存儲器地址空間:片內(nèi)數(shù)據(jù)存儲器、片外數(shù)據(jù)存儲器片內(nèi)程序存儲器、片外程序存儲器MCS-51存儲器物理結構見下圖所示:引腳EA的接法決定了程序儲存器的0000~0FFFH4KB地址范圍是在單片機片內(nèi)還是片外。1.2.1程序儲存器程序存儲器用來存放編制好的始終保留的固定程序和表格常數(shù)。程序儲存器以程序計數(shù)器PC作為地址指針,通過16位地址總線,可尋址的地址空間為64KB。在8051/8751/89C51片內(nèi),分別內(nèi)置最低地址空間的4KBROM/EPROM程序儲存器(內(nèi)部程序儲存器),而在8031片內(nèi),則無內(nèi)部程序儲存器,必須外部擴展EPROM。MCS-51單片機中64KB內(nèi)、外程序儲存器的地址是統(tǒng)一編排的。8031單片機無內(nèi)部程序存儲器,地址從0000H~FFFFH都是外部程序存儲空間。應始終接地,對于內(nèi)部有ROM的單片機(51、52系列),引腳接高電平,使程序從內(nèi)部ROM開始執(zhí)行。當PC值超出內(nèi)部ROM的容量時,會自動轉向外部程序存儲器空間。外部程序存儲器地址空間為1000H~FFFFH。訪問程序存儲器使用MOVC指令。程序存儲器中的幾個特殊地址的使用:地址用途0000H復位操作后的程序入口0003H外部中斷0服務程序入口000BH定時器0中斷服務程序入口0013H外部中斷1服務程序入口001BH定時器1中斷服務程序入口0023H串行口中斷服務程序入口由于兩入口地址之間的存儲空間有限,因此在編程時,通常在這些入口地址開始的兩三個地址單元中,放入一條轉移類指令,已使相應的程序轉到指定的程序存儲器區(qū)域中執(zhí)行。1.2.2外部數(shù)據(jù)存儲器 用于存放隨機讀寫的數(shù)據(jù)。 外部I/O口地址影像區(qū)。MCS-51單片機的外部數(shù)據(jù)存儲器和外部I/O口實行統(tǒng)一編址,并使用相同的作選通控制信號,均使用MOVX指令訪問。 MCS-51單片機最多可擴展64KB外部數(shù)據(jù)存儲器1.2.3內(nèi)部數(shù)據(jù)儲存器內(nèi)部數(shù)據(jù)存儲器是使用最多的地址空間,存放隨機讀寫的數(shù)據(jù) 通用寄存器區(qū)堆棧區(qū)運算操作數(shù)存放區(qū)指令(算術運算、邏輯運算、位操作運算等)的操作數(shù)只能在此地址空間或功能寄存器地址空間。內(nèi)部數(shù)據(jù)存儲器的地址分配51系列單片機內(nèi)部數(shù)據(jù)存儲器地址范圍為00~7FH。各區(qū)域地址見下表。(1)地址0~1FH的前32個單元稱為寄存器區(qū)用途:①作通用寄存器R0~R7。②R0與R1可作間址寄存器使用。使用時應注意:32個單元的寄存器區(qū)分為四組,使用時只能選其中一組寄存器。寄存器的選組由程序狀態(tài)字PSW的RS1和RS0位定。RS1RS0選寄存器組000組011組102組113組初始化時或復位時,自動選中0組。一旦選中一組,其它三組只能作為數(shù)據(jù)存儲器使用,而不能作為寄存器使用。設置多組寄存器可以方便保護現(xiàn)場。(2)20H~2FH為位地址區(qū)共16個單元,每單元有八個位,每位有一個位地址,共128位,位地址范圍為00H~7FH,該區(qū)既可位尋址,又可字節(jié)尋址。如MOV20H,C(這里C是Cy進位標志位),該指令是將Cy內(nèi)容送20H位,如果Cy=1,位20H值為“1”。(3)除選中的寄存組以外的存儲器均可以作為通用RAM區(qū)。(4)堆棧區(qū)8XX51單片機的堆棧設在內(nèi)部RAM區(qū),深度不大于128字節(jié),初始化時SP指向07H。 注:對51基本型單片機只有00H-7FH單元128字節(jié)的RAM區(qū)。對52增強型的單片機還有80H-FFH組成的高128字節(jié)RAM區(qū)(共256字節(jié)RAM)。1.3特殊功能寄存器MCS-51單片機共有21個字節(jié)的特殊功能寄存器用英文縮寫SFR(SpecialFuctionRegister)表示。1.用途: A累加器、狀態(tài)標志寄存器 單片機內(nèi)部各部件專用的控制、狀態(tài)寄存器 并行口、串行口影射寄存器2.地址空間: 21個特殊功能器不連續(xù)的分布在80H~FFH128個字節(jié)地址空間,見表1-2。地址為X0H和X8H是可位尋址的寄存器,表1-2中用“*”表示。表1-2中還標注了各SFR的名稱、字節(jié)地址、可尋址位的位地址和位名稱。21個特殊功能寄存器的名稱及主要功能介紹如下,詳細的用法見后面各節(jié)的內(nèi)容。A—累加器,自帶有全零標志Z,A=0則Z=1;A≠0則Z=0。該標志常用于程序分支轉移的判斷條件。B—寄存器,常用于乘除法運算(見第2章)。PSW—程序狀態(tài)字。主要起著標志寄存器的作用,其8位定義見表1-3。其中CY:進/借位標志反映最高位的進位借位情況,加法為進位、減法為借位。CY=1,有進/借位;CY=0,無進/借位。AC:輔助進/借位標志反映高半字節(jié)與低半字節(jié)之間的進/借位,AC=1有進/借位;AC=0無進/借位。FO:用戶標志位??捎捎脩粼O定其含義。RS1,RS0:工作寄存器組選擇位。OV:溢出標志反映補碼運算的運算結果有無溢出有溢出OV=1,無溢出OV=0。-:無效位。P:奇偶標志運算結果有奇?zhèn)€“1”,P=1;運算結果有偶個“1”,P=0。影響標志位的指令及其影響方式見第2章。SP—堆棧指針。8XX51單片機的堆棧設在片內(nèi)RAM,對堆棧的操作包括壓入(PUSH)和彈出(POP)兩種方式,并且遵循后進先出的原則,但在堆棧生成的方向上,與8086正好相反8XX51單片機的堆棧操作遵循先加后壓,先彈后減的順序,按字節(jié)進行操作。此外還有如下寄存器,它們將在后面章節(jié)介紹:IP——中斷優(yōu)先級控制寄存器。IE——中斷允許控制寄存器。TMOD——定時器/計數(shù)器方式控制寄存器。TCON——定時器/計數(shù)器控制寄存器。TH0,TL0——定時器/計數(shù)器0。TH1,TH1——定時器/計數(shù)器1。SCON——串行端口控制寄存器。SBUF——串行數(shù)據(jù)緩沖器。PCON——電源控制寄存器。注:在52子系列中,高128字節(jié)RAM和SFR的地址是重疊的,究竟訪問哪一塊可通過不同的尋址方式加以區(qū)分,訪問高128字節(jié)RAM采用寄存器間址,訪問SFR則只能采用直接尋址,訪問低128字節(jié)RAM時,兩種尋址均可采用。1.4時鐘電路與復位電路
內(nèi)部振蕩方式:在引腳XTAL1和XTAL2外接晶體振蕩器(簡稱晶振)如圖1-3所示。由于單片機內(nèi)部有一個高增益運算放大器,當外接晶振后,就構成了自激振蕩器并產(chǎn)生振蕩時鐘脈沖。1.4.2基本時序單位單片機的時序單位有:。狀態(tài)周期:振蕩頻率經(jīng)單片機內(nèi)的二分頻器分頻后提供給片內(nèi)CPU的時鐘周期。因此,一個狀態(tài)周期包含2個振蕩周期。機器周期(MC):1個機器周期由6個狀態(tài)周期及12個振蕩周期組成。是計算機執(zhí)行一種基本操作的時間單位。4種時序單位中,振蕩周期和機器周期是單片機內(nèi)計算其他時間值(例如,波特率、定時器的定時時間等)的基本時序單位。例:單片機外接晶振頻率12MHZ時的各種時序單位:振蕩周期=1/fosc=1/12MHZ=0.0833us狀態(tài)周期=2/fosc=2/12MHZ=0.167us機器周期=12/fosc=12/12MHZ=1us指令周期=(1~4)機器周期=1~4us上電后,由于電容充電,使RST持續(xù)一段高電平時間。當單片機已在運行過程中時,按下復位鍵也能使RST持續(xù)一段時間的高電平,從而實現(xiàn)上電且開關復位的操作。通常選擇C=10f,R=10K單片機的復位操作是使SFR寄存器進入初始化,不改變片內(nèi)RAM區(qū)中的內(nèi)容。幾個主要特殊功能寄存器復位狀態(tài)歸納如下:PC=0000H程序計數(shù)器為零表明單片機復位后程序從0000H地址單元開始執(zhí)行。A=00H表明累加器已被清零。PSW=00H表明選寄存器0組為工作寄存器組。SP=07H表明堆棧指針指向片內(nèi)RAM07H單元,根據(jù)堆棧操作的先加后壓法則,第一個被壓入的數(shù)據(jù)被寫入08H單元中。P0~P3=FFH表明已向各端口線寫入1,各端口既可用于輸入又可用于輸出。記住一些特殊功能寄存器復位后的主要狀態(tài),對于熟悉單片機操作,減短應用程序中的初始化部分是十分必要的。其它的特殊功能寄存器復位后的狀態(tài)見教材表1-4。1.5引腳功能各個引腳的功能說明如下:Vss:接地端。Vcc:電源端,接+5V。XTAL1,XTAL2:接外部晶體或外部時鐘。RST/VPD:①復位信號輸入。②接備用電源,當VCC掉電后,在低功耗條件下保持內(nèi)部RAM中的數(shù)據(jù)。ALE/PROG:①ALE地址鎖存允許。ALE輸出脈沖的頻率為振蕩頻率的1/6。②PROG對8751單片機片內(nèi)EPROM編程時,編程脈沖由該引腳引入。PSEN:程序存儲器允許。輸出讀外部程序存儲器的選通信號。EA/VPP:①EA=0,單片機只訪問外部程序存儲器。EA=1,單片機訪問內(nèi)部程序存儲器。②在8751單片機片內(nèi)EPROM編程期間,此引腳引入21V編程電源VPP。在增強型的52系列單片機中,P1.0、P1.1除為端口線外,還為定時/計數(shù)器2的外部引腳T2和T2EX。P0.0~P0.7:P0口,數(shù)據(jù)/低八位地址復用總線端口。P1.0~P1.7:P1口,靜態(tài)通用端口。P2.0~P2.7:P2口,高八位地址總線端口。P3.0~P3.7:P3口,雙功能靜態(tài)端口。1.6小單片機是集CPU、存儲器、I/O接口于一體的大規(guī)模集成電路芯片。MCS-51系列單片機是目前市場上應用最廣泛的單片機機型。本章重點是單片機的內(nèi)部結構和存儲器結構51系列單片機內(nèi)部包含:一個8位的CPU。4KB程序存儲器ROM(視不同產(chǎn)品型號不同:8031內(nèi)部無ROM;8051內(nèi)部為掩模式ROM;8751為EPROM;89C51內(nèi)部為FLASHEEPROM)。128字節(jié)RAM數(shù)據(jù)存儲器。兩個16位定時器/計數(shù)器。可尋址64KB外部數(shù)據(jù)存儲器和64KB外部程序存儲器空間的控制電路。32條可編程的I/O線(四個8位并行I/O端口)。一個可編程全雙工串行口。具有兩個優(yōu)先級嵌套中斷結構的五個中斷源?!镎莆?1系列單片機各存儲空間的地址分配,使用特點及數(shù)據(jù)操作方法?,F(xiàn)將此內(nèi)容歸納于教材表1-5中,此表是編程和硬件擴展的基礎,相當重要,務必要熟記和掌握。MCS-51單片機的編程語言可以是匯編語言也可以是高級語言(如C語言),高級語言編程快捷,但程序長,占用存儲空間大,執(zhí)行慢;匯編語言產(chǎn)生的目標程序簡短,占用存儲空間小,執(zhí)行快,能充分發(fā)揮計算機的硬件功能。無論是高級語言還是匯編語言,源程序都要轉換成目標程序(機器語言)單片機才能執(zhí)行。
目前很多公司將編輯器、匯編器、編譯器、連接/定位器、符號轉換程序做成集成軟件包,用戶進入該集成環(huán)境,編輯好程序后,只需點擊相應菜單就可以完成上述的各步,如WAVE、KEIL,WAVE集成軟件的使用見附錄。匯編的方法:匯編的方法有兩種1.手工匯編:人工查指令表,查出程序中每條指令對應的機器代碼。早期的計算機使用。2.機器匯編:用計算機中的匯編程序對用戶源程序進行匯編。用機器匯編要提供給匯編一些信息,遵循匯編程序的一些約定。這些由偽指令指定。1)確定程序中每條匯編語言指令的指令機器碼2)確定每條指令在存儲器中的存放地址3)提供錯誤信息 4)提供目標執(zhí)行文件(*.OBJ/*.HEX)和列表文件(*.LST)二.偽指令常用偽指令及功能:1.起始指令ORGnn功能:定義程序或數(shù)據(jù)塊的起始地址。指示此語句后面的程序或數(shù)據(jù)塊以nn為起始地址,連續(xù)存放在程序存儲器中。指令地址機器碼 源程序 ORG 2000H 2000H7830 MAIN: MOVR0,#30H2002HE6 MOVA,@R0 …3.字定義標號:DW(字常數(shù)或表達式)作用:指示在程序存儲器中以標號為起始地址的單元里存放的數(shù)為字數(shù)據(jù)(即16位的二進制數(shù)),例如:GH:DW1234H,5678H,085.等值指令標號EQU(數(shù)值表達式)
表示EQU兩邊的量等值,用于為標號或標識符賦值。
例如:X1 EQU2000H
X2 EQU0FH
…
MAIN:MOVDPTR,#X1;DPTR=2000H ADDA,#X2;A=A+0FH6.位定義標號BIT[位地址]作用:同EQU指令,不過定義的是位操作地址。例如AICBITP1.1。匯編語言程序設計步驟一.確定方案和計算方法二.了解應用系統(tǒng)的硬件配置、性能指標三.建立系統(tǒng)數(shù)學模型,確定控制算法和操作步驟四.合理分配存儲器單元和了解I/O接口地址常用程序結構
順序程序、分支程序、
循環(huán)程序、子程序順序程序設計例3-1編程將外部數(shù)據(jù)存儲器的000EH和000FH單元的內(nèi)容相換。ORG0000HMOVP2,#0H;送地址高八位至P2口MOVR0,#0EH;R0=0EHMOVR1,#0FH;R1=OFHMOVXA,@R0;A=(000EH)MOV20H,A;(20H)=(000EH)MOVXA,@R1;A=(000FH)XCHA,20H;A=(000EH),(20H)=(000FH)MOVX@R1,AMOVA,20HMOVX@R0,A;交換后的數(shù)送各單元SJMP$END3.3順序程序設計順序程序(簡單程序),程序走向只有一條路徑例3-3分解壓縮式BCD碼,使其成為非壓縮式BCD碼。ORG0000HMOV R0,#40H ;設指針MOV A,@R0 ;取一個字節(jié)MOV R2,A ;暫存ANL A,#0FH ;清0高半字節(jié)INC R0MOV @R0,A ;保存數(shù)據(jù)個位例2用單片機加重力傳感器作磅秤,秤出重量后算出行李運費價格,其秤出的重量以10kg為1個計價單位G,G已存入40H單元。計價方法
為50kg以內(nèi)按3元,50kg以上
分段計價:50kg按3元計價
,超過部分按2元計價。
由此列出算式:1.利用轉移地址表實現(xiàn)轉移例3-7根據(jù)R3的內(nèi)容轉向對應的程序,R3的內(nèi)容為0~n,處理程序的入口符號地址分別為PR0~PRn(n<128)。分析:將PR0—PRn入口地址列在表格中,每一項占兩個單元,PRn在表中的偏移量為2n,因此將R3的內(nèi)容乘2即得PRn在表中的偏移地址,從偏移地址2n和2n+1兩個單元分別取出PRn的高八位地址和低八位地址送DPTR寄存器,用JMP@A+DPTR指令(A先清零)即轉移到PRn入口執(zhí)行。ORG0000HMOVA,R3;R3→AADDA,ACC;A*2MOVDPTR,#TABPUSHACCMOVCA,@A+DPTR;取地址表中高字節(jié)MOVB,A;暫存于BINCDPLPOPACCMOVCA,@A+DPTR;取地址表中低字節(jié)MOVDPL,AMOVDPH,B;DPTR為表中地址CLRA;A=0JMP@A+DPTR;轉移TAB:DWPR0,PR1,PR2,…..,PRn;轉移地址表END2.利用轉移指令表實現(xiàn)轉移例3-8設有五個按鍵0、1、2、3、4其編碼分別為3AH、47H、65H、70H、8BH,要求根據(jù)按下的鍵轉向不同的處理程序,分別為PR0、PR1//PR2、PR3、PR4,設按鍵的編碼已在B寄存器中,編出程序。AJMPPR0的機器碼為2110H,PR1入口地址為0220HAJMPPR1的機器碼為4120H,轉移指令表JPT的內(nèi)容如下所示。設B=65H,鍵值為2:ORG0000HMOVDPTR,#TAB;置鍵碼表首址MOVA,#0;表的起始位的偏移量為0NEXT:PUSHACCMOVCA,@A+DPTR;A=鍵碼表的編碼CJNEA,B,AGAN;將B中值和鍵碼表的值比較POPACCRLA;如相等,序號乘2得分支表內(nèi)偏移量MOVDPTR,#JPT;置分支表首址JMP@A+DPTRAGAN:POPACC;不相等比較下一個INCA;序號加1CJNEA,#5,NEXTSJMP$;鍵碼查完還沒有B中按鍵編碼程序結束JPT:AJMPPR0;分支轉移表AJMPPR1AJMPPR2AJMPPR3AJMPPR4TAB:DB3AH,47H,65H,70H,8BH;鍵碼表END例3-9設計一個延時10ms的延時子程序,已知單片機使用的晶振為6MHz。分析:延時時間與兩個因素有關:晶振頻率和循環(huán)次數(shù)。由于晶振采用6MHz,一個機器周期是2μs,用單循環(huán)可以實現(xiàn)1ms延時,外循環(huán)10次即可達10ms延時。內(nèi)循環(huán)如何實現(xiàn)1ms延時呢,程序中可先以未知數(shù)MT代替,從附錄A查每條指令機器周期計算程序的執(zhí)行時間。ORG0020HMOVR0,#0AH;外循環(huán)10次DL2:MOVR1,#MT;內(nèi)循環(huán)MT次DL1:NOPNOP;空操作指令DJNZR1,DL1DJNZR0,DL2
RET例3-10編寫多字節(jié)數(shù)×10程序。
內(nèi)部RAM以20H為首址的一片單元中存放著一個多字節(jié)符號數(shù),字節(jié)數(shù)存放在R7中,存放方式為低位字節(jié)在低地址,高位字節(jié)在高地址,要求乘10后的積仍存放在這一片單元中。
分析用R1作該多字節(jié)的
地址指針,部分積的低位仍
存放于本單元,部分積的高
位存放于R2,以便和下一
位的部分積的低位相加。
以R7作字節(jié)數(shù)計數(shù)。
編程如下:
ORG0000HCLRC;清進位位CMOVR1,#20H;R1指示地址MOVR2,#00H;存積的高八位寄存器R2清0S10:MOVA,@R1;取一字節(jié)送AMOVB,#0AH;10送BPUSHPSWMULAB;字節(jié)乘10POPPSWADDCA,R2;上次積高八位加本次積低八位MOV@R1,A;送原存儲單元MOVR2,B;積的高八位送R2INCR1;指向下一字節(jié)DJNZR7,S10;未乘完去SH10,否則向下執(zhí)行MOV@R1,B;存最高字節(jié)積的高位SJMP$例如1223650989比較大小MCS-51單片機有著優(yōu)異的位邏輯功能,可以方便的實現(xiàn)各種復雜的邏輯運算.這種用軟件替代硬件的方法,可以大大簡化甚至完全不用硬件,但比硬件要多花運算時間。例3-17編寫一程序,以實現(xiàn)圖3-4中的邏輯運算電路.程序如下:START:MOVC,P2.2ORLC,TF0ANLC,P1.1MOVF0,CMOVC,IE1ORLC,/25HANLC,F0ANLC,/26HMOVP1.3,CSJMP$例3-18設累加器A的各位ACC.0~ACC.7分別記為X0~X7,編制程序用軟件實現(xiàn)下式:
Y=X0X1X2+X0X1X2+X0X1X2X3+X4X5X6X7X0BITACC.0X1BITACC.1X2BITACC.2X3BITACC.3X4BITACC.4X5BITACC.5X6BITACC.6X7BITACC.7ORG0000HMOVC,X0ANLC,X1ANLC,X2MOV00H,C;X0X1X2MOVC,X0ANLC,/X1MOV01H,C;X0X1ANLC,/X2ORLC,00HMOV00H,CMOVC,X2ANLC,01HANLC,X3;X0X1X2X3ORLC,/00HMOV00H,CMOVC,X7ANLC,/X6ANLC,/X5ANLC,/X4;X4X5X6X7ORLC,00H;最終結果Y→CSJMP$子程序是構成單片機應用程序必不可少的部分,通過ACALL和LCALL兩條子程序調(diào)用指令,可以十分方便地用來調(diào)用任何地址處的子程序。子程序節(jié)省占用的存儲單元,使程序簡短、清晰,善于靈活的使用子程序,是程序設計的重要技巧之一。子程序必須以RET指令結尾.在調(diào)用子程序時,有以下幾點應注意:1)保護現(xiàn)場。如果在調(diào)用前主程序已經(jīng)使用了某些存儲單元或寄存器,在調(diào)用時,這些寄存器和存儲單元又有其他用途,就應先把這些單元或寄存器中的內(nèi)容壓入堆棧保護,調(diào)用完后再從堆棧中彈出以便加以恢復。如果有較多的寄存器要保護,應使主、子程序使用不同的寄存器組。2)設置入口參數(shù)和出口參數(shù)。用之前主程序要按子程序的要求設置好地址單元或存儲器(稱為入口參數(shù)),以便子程序從指定的地址單元或存儲器獲得輸入數(shù)據(jù);子程序經(jīng)運算或處理后的結果存放到指定的地址單元或寄存器(稱為出口參數(shù)),主程序調(diào)用后從指定的地址單元或寄存器讀取運算或處理后的結果,只有這樣,才能完成子程序和主程序間的數(shù)據(jù)的正確傳遞。3)子程序中可包括對另外子程序的調(diào)用,稱為子程序嵌套。主程序:ORG0000HMOVSP,#3FHMOVA,31H;取aLCALLSQR;求a方MOVR1,AMOVA,32H;取bLCALLSQR;求b方ADDA,R1;求和DAA;調(diào)整MOV33H,AMOVA,#0ADDCA,#0MOV34H,ASJMP$子程序:ORG0030HSQR:INCAMOVCA,@A+PCRETTAB:DB00H,01H,04HDB09H16H,25H,DB36H,49H64H,81HEND3.8小結1、程序設計的關鍵在于指令熟悉和算法(思路)正確、清晰,對復雜的程序應先畫出流程圖。只有多做練習多上機調(diào)試,熟能生巧,才能編出高質量的程序。2、偽指令是非執(zhí)行指令,提供匯編程序以匯編信息,應正確使用。3、本章應掌握順序程序、分支程序、循環(huán)程序、子程序等各類程序的設計方法,并能熟練應用查表技術簡化程序的設計。PO口—1.作為輸入/輸出口。2.作為地址/數(shù)據(jù)總線,接外圍芯片時PO口分時輸出低8位地址與數(shù)據(jù)信號。P1口—1.作為輸入/輸出口。2.在增強型(52系列)和ISP型(在系統(tǒng)編程型)中有如下功能:4.1.1.2端口的內(nèi)部結構四個端口的一位結構見圖5.1,同一個端口的各位具有相同的結構。由圖可見,四個端口的結構有相同之處:PO作I/O口使用CPU發(fā)控制電平“0”封鎖與門,使T1管截止,同時使MUX開關同下面的觸點接通,使鎖存器的Q與T2柵極接通。當CPU向端口輸出數(shù)據(jù)時,寫脈沖加在鎖存器的CL上、內(nèi)部總線的數(shù)據(jù)經(jīng)反相,再經(jīng)T2管反相,PO口的這一位引腳上出現(xiàn)正好和內(nèi)部總線同相的數(shù)據(jù)。由于輸出驅動級是漏極開路電路(因T1截止),在作I/O口使用時應外接10K的上拉電阻。當輸入操作時,端口中兩個三態(tài)緩沖器用于讀操作。緩沖器2用于讀端口引腳的數(shù)據(jù)。當執(zhí)行端口讀指令時,讀引腳脈沖打開三態(tài)緩沖器2,于是端口引腳數(shù)據(jù)經(jīng)三態(tài)緩沖器2送到內(nèi)部總線。緩沖器1用于讀取鎖存器Q端的數(shù)據(jù)。當執(zhí)行“讀-修改-寫”指令(即讀端口信息,在片內(nèi)加以運算修改后,再輸出到該端口的某些指令如:ANLPO,A指令),即是讀的鎖存器Q的數(shù)據(jù)。這是為了避免錯讀引腳的電平信號,例如用一根口線去驅動一個晶體管基極,當向口線寫“1”,晶體管導通,導通的PN結會把引腳的電平拉低,如讀引腳數(shù)據(jù),則會讀為0,而實際上原口線的數(shù)據(jù)為1。因而采用讀鎖存器Q的值而避免了錯讀。究竟是讀引腳還是讀鎖存器,CPU內(nèi)部會自行判斷是發(fā)讀引腳脈沖還是讀鎖存器脈沖,讀者不必在意。應注意,當作輸入端口使用時,應先對該口寫入“1”使場效應管T2截止,再進行讀入操作,以防場效應管處于導通狀態(tài),使引腳箝位到零,而引起誤讀。當PO口作地址/數(shù)據(jù)線使用時,CPU及內(nèi)部控制信號為“1”,轉換開關MUX打向上面的觸點,使反相器的輸出端和T2管柵極接通,輸出的地址或數(shù)據(jù)信號通過與門驅動T1管,同時通過反相器驅動T2管完成信息傳送,數(shù)據(jù)輸入時,通過緩沖器進入內(nèi)部總線。當擴展片外存貯器時,MUX開關打向右,P2口作高八位地址線輸出高八位地址信號。其MUX的的倒向是受CPU內(nèi)部控制的。應當注意:當P2口的幾位作地址線使用時,剩下的P2口線不能作I/O口線使用。歸納四個并行口使用的注意事項如下:1.如果單片機內(nèi)部有程序存貯器,不需要擴展外部存貯器和I/O接口,單片機的四個口均可作I/O口使用。2.四個口在作輸入口使用時,均應先對其寫“1”3.P0口作I/O口使用時應外接10K的上拉電阻,其它口則可不必。4.P2可某幾根線作地址使用時,剩下的線不能作I/O口線使用。5.P3口的某些口線作第二功能時,剩下的口線可以單獨作I/O口線使用。4.1.2編程舉例下面舉例說明端口的輸入、輸出功能,其他功能的應用實例在后面章節(jié)說明。例4-1.設計一電路,監(jiān)視某開關K,用發(fā)光二極管LED顯示開關狀態(tài),如果開關合上,LED亮、開關打開,LED熄滅。分析:設計電路如圖5.2如示。開關接在P1.1口線,LED接P1.0口線,當開關斷開時,P1.1為+5V,對應數(shù)字量為“1”,開關合上時P1.1電平為0V,對應數(shù)字量為“0”,這樣就可以用JB指令對開關狀態(tài)進行檢測。編程如下:CLRP1.0;使發(fā)光二極管滅AGA:SETBP1.1;先對P1口寫入“1”JBP1.1,LIG;開關開,轉LIGSETBP1.0;開關合上,二極管亮SJMPAGALIG:CLRP1.0;開關開,二極管滅SJMPAGA例4-2.在下圖中P1.4~P1.7接四個發(fā)光二極管LED,P1.0~P1.3接四個開關,編程將開關的狀態(tài)反映到發(fā)光二極管上。上述程序中每次讀開關之前,輸入位都先置“1”,保證了開關狀態(tài)的正確讀入。編程如下:ORG0000HABC:MOVP1,#0FFH;高四位滅,低四位送“1MOVA,P1;讀P1口引腳開關狀態(tài)至ASWAPA;低四位開關狀態(tài)轉換到高四位ANLA,#0F0H;保留高四位MOVP1,A;從P1口輸出SJMPABC;循環(huán)例3.用P1.0輸出1KHz和500Hz的音頻信號驅動揚聲器,作報警信號,要求1KHz信號響100ms,500Hz信號響200ms,交替進行,P1.7接一開關進行控制,當開關合上響報警信號,當開關斷開告警信號停止,編出程序。分析:500Hz信號周期為2ms,信號電平為每1ms變反1次。1KHz的信號周期為1ms,信號電平每500μS變反1次,編一個延時500μS子程序,延時1ms只需調(diào)用2次。用R2控制音響時間長短,A作音響頻率的交換控制的標志。A=FF時產(chǎn)生1KHz信號,A=0時產(chǎn)生500Hz信號。ORG0000HCLRA;A作1KHz,500Hz轉換控制BEG:JBP1.7,$;檢測P1.7的開關狀態(tài)MOVR2,#200;開關閉合報警,R2控制音響時間DV:CPLP1.0CJNEA,#0FFH,N1;A≠FFH,延時500μSACALLD500;A=FFH;延時1msP1.0變反N1:ACALLD500DJNZR2,DVCPLASJMPBEGD500:MOVR7,#250;延時500μS子程序DJNZR7,$RETEND4.1.3用并行口設計LED數(shù)碼顯示器和鍵盤電路鍵盤和顯示器是單片機應用系統(tǒng)中常用的輸入輸出裝置。LED數(shù)碼顯示器是常用的顯示器之一,下面介紹用單片機并行口設計LED數(shù)碼顯示電路和鍵盤電路的方法。4.1.3.1用并行口設計LED顯示電路1.LED顯示器及其原理LED有著顯示亮度高,響應速度快的特點,最常用的是七段式LED顯示器,又稱數(shù)碼管。七段LED顯示器內(nèi)部由七個條形發(fā)光二極管和一個小圓點發(fā)光二極管組成,根據(jù)各管的亮暗組合成字符。常見LED的管腳排列見圖4(a)。其中COM為公共點,根據(jù)內(nèi)部發(fā)光二極管的接線形式,可分成共陰極型圖4(b)和共陽極型圖4(c)。LED數(shù)碼管的g~a七個發(fā)光二極管因加正電壓而發(fā)亮,因加零電壓而不能發(fā)亮,不同亮暗的組合就能形成不同的字形,這種組合稱之為字形碼,顯然共陽極和共陰極的字形碼是不同的,其字形碼見下表。LED數(shù)碼管每段需10~20ma的驅動電流,可用TTL或CMOS器件驅動。字形碼的控制輸出可采用硬件譯碼方式,如采用BCD7段譯碼/驅動器74LS48、74LS49、CD4511(共陰極)或74LS46、74LS47、CD4513(其陽極)也可用軟件查表方式輸出。2.LED數(shù)碼管的接口數(shù)碼管的接口有靜態(tài)接口和動態(tài)接口。靜態(tài)接口為固定顯示方式,無閃爍,其電路可采用一個并行口接一個數(shù)據(jù)管,數(shù)碼管的公共端按共陰或共陽分別接地或Vcc。這種接法占用接口多,如果PO口和P2口要用作數(shù)據(jù)線和地址線,僅用單片機的并行口就只能接二個數(shù)碼管。也可以用串行接口的方法接多個數(shù)碼管,使之靜態(tài)顯示.動態(tài)接口采用各數(shù)碼管循環(huán)輪流顯示的方法,當循環(huán)顯示頻率較高時,利用人眼的暫留特性,看不出閃爍顯示現(xiàn)象,這種顯示需要一個接口完成字形碼的輸出(字形選擇),另一接口完成各數(shù)碼管的輪流點亮(數(shù)位選擇)。例如圖5是接有五個共陰極數(shù)碼管的動態(tài)顯示接口電路,用74LS373接成直通的方式作驅動電路,陰極用非門74LS04反相門驅動,字形選擇由P1口提供,位選擇由P3口控制。當P3.0~P3.4輪流輸出1時,五個數(shù)碼管輪流顯示。P1.7接開關,當開關打向位置“1”時,顯示“12345”字樣,當開關打向“2”時,顯示“HELLO”字樣,程序清單如下:用匯編語言編程ORG0000HMOVP3,#0;清顯示TEST:SETBP1.7JBP1.7,DIR1;檢測開關MOVDPTR,#TAB1;開關置于1,‘12345’SJMPDIRDIR1:MOVDPTR,#TAB2;開關置于2,“HELLO”字形表頭DIR:MOVR0,#0;R0存字形表偏移量MOVR1,#01;R1置數(shù)碼表位選代碼NEXT:MOVA,R0MOVCA,@A+DPTR;查字形碼表1MOVP1,A;送P1口輸出MOVA,R1MOVP3,A;輸出位選碼ACALLDAY;延時INCR0;指向下一位字形RLA;指向下一位MOVR1,ACJNER1,#20H,NEXT;五個數(shù)碼管顯示完?SJMPTESTDAY:MOVR6,#20;延時20ms子程序DL2:MOVR7,#7DHDL1:NOPNOP4.1.3.2用并行口設計鍵盤電路鍵盤是計算機系統(tǒng)中不可缺少的輸入設備,當按鍵少時可接成線性鍵盤(如圖5.3中的按鍵),當按鍵較多時,這樣的接法占用口線較多。將按鍵接成矩陣的形式,可以節(jié)省口線,例如兩個接口可按8*8的形式接64個按鍵。每個按鍵有它的行值和列值,行值和列值的組合就是識別這個按鍵的編碼。矩陣的行線和列線分別通過兩并行接口和CPU通信。每個按鍵的狀態(tài)同樣需變成數(shù)字量“0”和“1”,開關的一端通過電阻接Vcc(列)、而接地是通過程序輸出數(shù)字“0”實現(xiàn)的。鍵盤處理程序的任務是: 確定有無鍵按下; 判哪一個鍵按下, 鍵的功能是什么; 還要消除按鍵在閉合或斷開時的抖動。兩個并行口中,一個輸出掃描碼,使按鍵逐行動態(tài)接地(稱行掃描),另一個并行口輸入按鍵狀態(tài)(稱回饋信號,鍵盤的列值),由行掃描值和回饋信號共同形成鍵編碼而識別按鍵、通過軟件查表,查出該鍵的功能。也可由硬件編碼器完成鍵的編碼。下圖中,用8XX51的并行口P1接4×4矩陣鍵盤,以P1.0~P1.3作輸出線,以P1.4~P1.7作輸入線,鍵盤掃描程序的流程如圖5.7所示。對鍵盤的程序流程圖5.7說明如下:當P1.0~P1.3輸出0時,如無鍵按下,P1.4~P1.7的輸入值均為“1”,如果其中有一個不是“1”,說明有鍵按下,再使P1.0~P1.3逐個輸出零(行掃描),檢查P1.4~P1.7的輸入值有無零,從而查出是哪行哪列的鍵按下。在判按鍵時,按鍵有抖動,可采用延時后再重讀以跳過抖動時段(也可用R-S觸發(fā)器閂鎖電路硬件消抖,但這樣電路復雜,在矩陣鍵盤中不采用)。程序清單如下:ORG0000HTEST:MOVP1,#0F0H;P1.0~P1.3輸出0,P1.4~P1.7輸出1,作輸入位MOVA,P1;讀鍵盤,檢測有無鍵按下ANLA,#0F0H;屏蔽P1.0~P1.3,檢測P1.4~P1.是否全為1CJNEA,#0F0H,HAVE;P1.4~P1.7不全為1,有鍵按下SJMPTEST;P1.4~P1.7全為1,無鍵按下,重檢測鍵盤HAVE:MOVA,#0FE;有鍵按下,逐行掃描鍵盤,置掃描初值AREAD:MOVA,P1;再讀鍵盤ANLA,#0F0H;屏蔽P1.0~P1.3,保留P1.4~P1.7(列碼)MOVR2,A;暫存列碼MOVA,BANLA,#0FH;取行掃描碼ORLA,R2;行碼、列碼合并為鍵編碼YES1:MOVB,A;鍵編碼存于BLJMPSAM38;轉鍵分析處理程序(見例3-8)…例如圖5-6中的“a”鍵,當行掃描值sccode=feH=11111110B,讀入列值到P1口和f0H相與即保留高四位讀入值,屏蔽了低四位,再和0fh相或得recole=dfH=11011111B.sccode+recode=00100001B,所以“a”鍵的編碼21H,此值是A的鍵碼,同樣可得“5”鍵編碼為01000100B即44H,由此可將每個按鍵的編碼排出來,通過查表程序轉不同的按鍵處理程序。此程序部分請讀者自行編出。該程序同樣可用匯編語言編出。4.1.4并行接口小結1.四個并行口均可作為輸入輸出接口使用,但又有各自的特點。因PO口是數(shù)據(jù)線和低八位的地址線,因此不用它作輸入/輸出接口,而是用它傳輸數(shù)據(jù)和低八位的地址信息,除非在不接其他外圍芯片的情況下才作I/O接口使用,此時由于內(nèi)部漏極開路,需外接上拉電阻。四個口的使用特點是本章的重點。3.在應用設計中應理解,計算機內(nèi)由數(shù)字電路組成只存在兩種TTL電平,高電平3.5~5V和低電平0V,對應著的數(shù)字為“1”和“0” 外設的狀態(tài)要通過電路轉換成高、低電平,計算機才能識別(如開關電路)。 計算機輸出數(shù)據(jù)“1”即輸出3.5V~5V,輸出數(shù)據(jù)“0”即輸出0V,根據(jù)外設需要的電平要求輸出“1”或“0”數(shù)據(jù),這就是程序控制外設的本質。4.2.2.2中斷控制的有關寄存器(3)中斷優(yōu)先級管理寄存器IPMCS_51系列單片機的中斷結構如圖所示。4.2.2中斷響應過程4.2.3中斷的程序設計5.2串行接口★51系列單片機片內(nèi)有二個十六位定時/計數(shù)器:定時器0(T0)和定時器1(T1)?!飪蓚€定時器都有定時或事件計數(shù)的功能,可用于定時控制、延時、對外部事件計數(shù)和檢測等場合★定時/計數(shù)器實際上是16位加1計數(shù)器。T0由2個8位持殊功能寄存器TH0和TL0構成,T1由2個8位持殊功能寄存器TH1和TL1構成?!锩總€定時器都可由軟件設置為定時工作方式或計數(shù)工作方式?!颰0和T1受特殊功能寄存器TMOD和TCON控制。1.定時工作方式★設置為定時工作方式時,定時器計數(shù)的脈沖是由51單片機片內(nèi)振蕩器經(jīng)12分頻后產(chǎn)生的?!锩拷?jīng)過一個機器周期定時器(T0或T1)的數(shù)值加1直至計數(shù)滿產(chǎn)生溢出。如:當8051采用12MHz晶體時,每個機器周期為1μs,計5個機器周期即為5μs,即定時5μs。2.計數(shù)工作方式★設置為計數(shù)工作方式時,通過引腳T0(P3.4)和T1(P3.5)對外部脈沖信號計數(shù)?!锂斴斎朊}沖信號產(chǎn)生由1至0的下降沿時,定時器的值加1,在每個機器周期CPU采樣T0和T1的輸入電平。若前一個機器周期采樣值為高,下一個機器周期采樣值為低,則計數(shù)器加1?!镉捎跈z測一個1至0的跳變需要二個機器周期,故最高計數(shù)頻率為振蕩頻率的二十四分之一?!镫m然對輸入信號的占空比無特殊要求,但為了確保某個電平在變化之前至少被采樣一次,要求電平保持時間至少是一個完整的機器周期?!颎ATE:門控信號GATE=0,TRx=1時即可啟動定時器工作;GATE=1,INTx=1才可啟動定時器工作。★C/T:定時器/計數(shù)器選擇位C/T=1,為計數(shù)器方式;C/T=0,為定時器方式?!颩1M0工作模式選擇位M1M0=00工作方式0(13位方式)。M1M0=01工作方式1(16位方式)。M1M0=10工作方式2(8位自動再裝入方式)。M1M0=11工作方式3(T0為2個8位方式)?!颰F0:T0溢出中斷請求標志。TF0=1,T0有溢出中斷請求。TF0=0,T0無溢出中斷請求。★TR0:T0運行控制位。TR0=1,啟動T0工作。TR0=0,停止T0工作。★定時、計數(shù)溢出否可查詢TF0是否置位,如果開中斷則產(chǎn)生溢出中斷。ORG0000HMAIN:CLRP1.7SETBP1.0MOVTMOD,#61HMOVTH1,#0FBHMOVTL1,#0FBHSETBTR1LOOP1:CPLP1.7LOOP2:MOVTH0,#3CHMOVTL0,#0B0HSETBTR0LOOP3:JBCTF0,LOOP4SJMPLOOP3LOOP4:CPLP1.0JBCTF1,LOOP1AJMPLOOP2END方法2:T0每隔100ms中斷一次,利用軟件對T0的中斷次數(shù)進行計數(shù),中斷10次即實現(xiàn)了1秒的定時。ORG000BH;T0中斷服務程序入口AJMPIP0ORG0030H;主程序開始MAIN:CLRP1.7;T0定時100msMOVTMOD,#01HMOVTH0,#3CHMOVTL0,#0B0HSETBET0SETBEAMOVR4,#0AH;中斷10次計數(shù)SETBTR0SJMP$;等待中斷IP0:DJNZR4,RET0;MOVR4,#0AHCPLP1.7RET0:MOVTH0,#3CHMOVTL0,#0B0HSETBTR0RETI例5-3有P3.4引腳(T0)輸入一低頻信號(其小于0.5kHZ),要求P3.4每發(fā)生一次負跳變時,P1.0輸出一個500us同步負脈沖,同時P1.1輸出一個1ms的同步正脈沖。已知晶振頻率為6MHZ。MOVTH0,#06H;重置定時初值MOVTL0,#06HSETBP1.1;P1.1置1CLRP1.0;P1.0清0SETBTR0;啟動定時計數(shù)器DEL2:JBCTF0,RESP2;檢測第一次500us到否AJMPDEL2RESP:SETBP1.0;P1.0恢復1DEL3:JBCTF0,RESP3;檢測第二次500us到否AJMPDEL3RESP3:CLRP1.1;P1.1復0CLRTR0AJMPBEGIN5.1.4.4門控位的應用門控位GATE為1時,TRx=1,INTx=1才能啟動定時器。利用這個特性可以測量外部輸入脈沖的寬度。例7-4利用T0門控位測試INT0引腳上出現(xiàn)的正脈沖寬度,已知晶振頻率為12MHz,將所測得值最高位存入片內(nèi)71H單元,低位存入70H單元。解:設外部脈沖由(P3.2)輸入,T0工作于定時方式1(16位計數(shù)),GATE設為1。測試時,應在INT0低電平時,設置TR0為1(16位計數(shù));當INT0變?yōu)楦唠娖綍r,就啟動計數(shù);再次變低時,停止計數(shù)。此計數(shù)值與機器周期的乘積即為被測正脈沖的寬度。因fosc=12MHZ,機器周期為1us,測試過程如下。源程序如下:MOVTMOD,#09H;設T0為方式1MOVTL0,#00H;設計初值取最大值MOVTH0,#00HMOVR0,#70HJBP3.2,$;等P3.2(INT0)變低SETBTR0;啟動T0準備工作JNBP3.2,$;等待P3.2(INT0)JBP3.2,$;等待P3.2(INT0)CLRTR0;停止計數(shù)MOV@R0,TL0;存放結果INCR0MOV@R0,TH0SJMP$讀者不難編出C語言程序。這種方案被測脈沖的寬度最大為65535個機器周期。由于靠軟件啟動和停止計數(shù),有一定的測量誤差。其可能的最大誤差與指令的執(zhí)行時間有關。此例中,在讀取定時器的計數(shù)之前,已把它停住。但在某些情況下,不希望在讀計數(shù)值時打斷定時的過程,由于我們不可能在同一時刻讀取THX和TLX的內(nèi)容。讀取一個時恰好另一個產(chǎn)生溢出,在這種情況下,讀取的計數(shù)值有可能是錯的??梢越鉀Q錯讀的方法是:先讀THX后讀TLX,若兩次讀得的THx沒有發(fā)生變化,則可確定讀到的內(nèi)容是正確的。若前后兩次讀到的THx有變化,則再重復上述過程,重復讀到的內(nèi)容就應該是正確的了。下面是按此?-思路編寫的程序段,讀到的TH0和TL0放在R1和R0內(nèi): RP:MOVA,TH0;MOVR0,TL0;CJNEA,TH0,RP;MOVR1,A5.1.5小定時計數(shù)器應用非常廣泛,如定時采樣、時間測量、產(chǎn)生音響、作脈沖源、制作日歷時鐘、測量波形的頻率和占空比、檢測電機轉速等。因此應很好掌握?!?1系列單片機既有兩個16位的定時計數(shù)器,有四種不同的工作方式,歸納于下表:5.2.1概述
單片機應用與數(shù)據(jù)采集或工業(yè)控制時,往往作為前端機安裝在工業(yè)現(xiàn)場,遠離主機,現(xiàn)場數(shù)據(jù)采用串行通信方式發(fā)往主機進行處理,以降低通信成本,提高通信可靠性。如下圖所示。★串行通信的分類:同步串行通信和異步串行通信
一、異步通信:通信的雙方應該有一個約定,什么時候開始發(fā)送,什么時候發(fā)送完畢;接收方收到的信息是否正確等,這就是通信協(xié)議。異步串行通信一幀數(shù)據(jù)格式:一個起始位“0”,表示字符的開始,然后是5~8位數(shù)據(jù)即該字符的代碼,規(guī)定低位在前,高位在后,接下來是奇偶校驗位(可省略),最后以停止位“1”表示字符的結束。優(yōu)點:硬件結構簡單。缺點:傳輸速度慢。三、單工、半雙工、全雙工通信方式1.實現(xiàn)數(shù)據(jù)格式化
因為CPU發(fā)出的數(shù)據(jù)是并行數(shù)據(jù),接口電路應實現(xiàn)不同串行通信方式下的數(shù)據(jù)格式化任務,如自動生成起止方式的幀數(shù)據(jù)格式(異步方式)或在待傳送的數(shù)據(jù)塊前加上同步字符等。51系列單片機內(nèi)有一個全雙工的異步通信接口,通過對串行接口寫控制字可以選擇其數(shù)據(jù)格式,同時內(nèi)部有波特率發(fā)生器,提供可選的波特率,可完成雙機通信或多機通信。(一)通信線的連接
通信速率和通信距離這兩個方面是相互制約的,降低通信速率,可以提高通信距離.
不同的通信距離,串行通信電路有不同的連接方法。(二)串行通信接口總線標準(三)RS-232CMCS—51之間的雙機通信單片機串行口的結構與工作原理串行控制寄存器SCON用以存放串行口的控制和狀態(tài)信息。8XX51串行口正是通過對上述專用寄存器的設置、檢測與讀取來管理串行通信的。特殊功能寄存器PCON的最高位SMOD為串行口波特率的倍增控制位。波特率發(fā)生器可以有兩種選擇:1.定時器T1作波特率發(fā)生器,改變計數(shù)初值就可以改變串行通信的速率,稱為可變波特率。2.以內(nèi)部時鐘的分頻器作波特率發(fā)生器,因內(nèi)部時鐘頻率一定,稱為固定波特率5.2.5串行口的應用編程串行口的波特率有兩種方式:固定波特率可變波特率注意:使用可變波特率時,先確定TI的計數(shù)初值,并對TI進行初始化。串行通信的編程方式:查詢方式:查C是否為“1”。中斷方式:如果預先開了中斷,當TI、RI為“1”,會自動產(chǎn)生中斷。注意:兩種方式中當發(fā)送或接受數(shù)據(jù)后都要注意清TI或RI。5.2.5.1查詢方式查詢方式發(fā)送流程圖和接收流程圖見下頁5.2.5.2中斷方式中斷方式的初始化編程同查詢方式,不同的是要開中斷,即置位EA和ES,編寫中斷服務程序。匯編語言編程 MOVTMOD MOVTH1,#0CCH MOVTL1,#0CCH;設定波特率 SETBTR1 MOVSCON,#50HABC:CLRTIMOVP1,#0FEH;LED滅ACALLDAY;延時 MOVA,#OFFHMOVSBUF,A;發(fā)送數(shù)據(jù)FFH JNBRI,$;RI=1等待MCS51系列單片機的特點就是體積小,功能全,系統(tǒng)結構緊湊,硬件設計靈活。對于簡單的應用,最小系統(tǒng)即能滿足要求。所謂最小系統(tǒng)是指在最少的外部電路條件下,形成一個可獨立工作的單片機應用系統(tǒng)。一片89C51,或者一片8031外接一片EPROM就構成了一個單片機最小系統(tǒng)。在很多復雜的應用情況下,單片機內(nèi)的RAM,ROM和I/O接口數(shù)量有限,不夠使用,這種情況下就需要進行擴展。因此單片機的系統(tǒng)擴展主要是指外接數(shù)據(jù)存貯器、程序存貯器或I/O接口等,以滿足應用系統(tǒng)的需要。6.1單片機系統(tǒng)總線和系統(tǒng)擴展方法單片機是通過地址總線,數(shù)據(jù)總線和控制總線與外部交換信息的。MCS-51單片機的總線接口信號見圖由圖可見:1)由于Po分時傳送地址/數(shù)據(jù)信息,在接口電路中,通常配置地址鎖存器,有ALE信號鎖存低8位地址Ao~A7,以分離地址和數(shù)據(jù)信息。2)P2口傳送高8位地址A8~A15。3)PSEN為程序存儲器的控制信號,是在取指令碼時或執(zhí)行MOVC指令時變?yōu)橛行?。RD、WR為數(shù)據(jù)存儲器和I/O口的讀、寫控制信號。是執(zhí)行MOVX指令時變?yōu)橛行А?.2程序存儲器的擴展6.2.1EPROM的擴展根據(jù)以上取指時序的要求,8XX51單片機擴展程序存儲器2732的電路圖見圖6.2.2EEPROM的擴展6.3數(shù)據(jù)存儲器的擴展在ALE的上升沿,把外部程序存儲器的指令讀入后就開始了對片外RAM的讀過程。ALE高電平期間,在P0處于高阻三態(tài)后,根據(jù)指令間址提供的地址,P2口輸出外部RAM的高8位地址A15~A8,P0端口輸出低8位地址A7~A0;在ALE下跳沿,P0輸出的低8位地址被鎖存在鎖存器中,隨后P0又進入高阻三態(tài),RD信號有效后,被選中的RAM的數(shù)據(jù)出現(xiàn)在數(shù)據(jù)總線上,P0處于輸入狀態(tài),CPU從P0讀入外部RAM的數(shù)據(jù)。7.1并行I/O接口的擴展MCS-51單片機共有4個8位并行I/O口,在外部擴展時,P0和P2口做為總線使用,因而提供給用戶的I/O口就只有P1或P3口的部分口線所接的外設較多時,就必須擴展I/O接口。MCS-51單片機擴展的I/O口和外部數(shù)據(jù)存儲器統(tǒng)一編址、采用相同的控制信號、相同的尋址方式和相同的指令。擴展I/O所用的芯片有通用可編程芯片(如8251,8155,8255等)和TTL,CMOS鎖存器,緩沖器(如273,377,244,245等),用戶可根據(jù)系統(tǒng)對輸入輸出的要求適當選擇芯片。圖9-24為8XX51擴展一個輸入接口244和一個輸出接口273的電路.
244的選通信號由RD和P2.0相或產(chǎn)生,當執(zhí)行讀該片的指令時,RD和P2.0有效,打開244控制門,從而把數(shù)據(jù)通過244讀入8XX51。273的選通信號由WR和P2.0相或產(chǎn)生,通過執(zhí)行對該片的寫指令,WR和P2.0有效,使8XX51的數(shù)據(jù)往273輸出。8XX51內(nèi)部有ROM/EPROM,不用擴展外部程序存儲器,所以P0口作為雙向數(shù)據(jù)線連在的數(shù)據(jù)端。273、244有相同的地址FEFFH(實際上只要保證P2.0=0,其他地址位無關緊要),然而由于使用不同的控制信號RD或WR,它們地址相同卻不會發(fā)生數(shù)據(jù)傳送沖突。00000000000000000000H000001111111111107FFH00110000000000003000H001101111111111137FFH00101000000000002800H00101111111111112FFFH00011000000000001800H00011000000000111803H8255為可編程并行接口芯片,它有3個8位數(shù)據(jù)口:A口,B口,C口(其中C口可作為兩個四位口),一個控制口,口地址由A1,A0決定。圖中8255的三個數(shù)據(jù)口地址分別為1800H~1802H,控制口地址為1803H。8255有三種工作方式:方式0(基本方式),方式1(選通方式,此
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年攝影燈泡項目申請報告模范
- 2024-2025學年新疆省克孜勒蘇柯爾克孜自治州三年級數(shù)學第一學期期末統(tǒng)考試題含解析
- 2025年城市文化展示系統(tǒng)項目規(guī)劃申請報告模板
- 2025年服裝電子商務項目立項申請報告范文
- 2025年植物穩(wěn)態(tài)營養(yǎng)肥料項目立項申請報告
- 小學畢業(yè)典禮講話稿15篇
- 本科畢業(yè)自我鑒定
- 元旦邀請函范文匯編10篇
- 七年級地理上冊 4.1 氣溫和氣溫的分布教學實錄 晉教版
- 去工廠實習報告模板錦集6篇
- 隱患排查治理管理規(guī)定
- 2025材料供貨合同樣本
- 豪華酒店翻新工程協(xié)議
- 《逆向教學設計研究的國內(nèi)外文獻綜述》2500字
- 經(jīng)濟學原理模擬題含參考答案
- 科技強國建設視域下拔尖創(chuàng)新人才價值觀引導研究
- 2025版國家開放大學法學本科《國際私法》歷年期末紙質考試總題庫
- 教科版2022-2023學年度上學期三年級科學上冊期末測試卷及答案(含八套題)
- 借條的正規(guī)模板(2024版)
- 國家開放大學電大《11662會計信息系統(tǒng)(本)》期末終考題庫及標準參考答案
- 水產(chǎn)動物增養(yǎng)殖學蝦蟹類增養(yǎng)殖終極版
評論
0/150
提交評論