版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、51系列單片機應(yīng)用與電子設(shè)計競賽,2009年,第一部份51單片機及其資源,1、什么是單片機: 單片機全稱單片微型計算機。它是在同一塊芯片上集成了一臺微型計算機所需的CPU、存儲器(ROM、RAM)、輸入/輸出部件和時鐘等控制部件.不求規(guī)模大,力爭小而全。 2、單片機的特點 單片機:把微處理器和少量RAM(128/256字節(jié))、ROM(4-8K)以及I/O等有關(guān)電路集成在一片半導(dǎo)體芯片。,3、如何學(xué)習(xí)單片機,硬件: 掌握單片機的硬件資源及外部擴展電路的方法,合理分配資源。 軟件:掌握單片機的指令功能、程序設(shè)計和調(diào)式方法,仿真軟件的使用。 具體方法: 1、從最基本的典型電路-進(jìn)行編程控制。 2、對
2、例題、子程序進(jìn)行軟件分析仿真-修改、擴充功能 *在進(jìn)行硬件資源分配時,應(yīng)特別關(guān)注具有特殊功能的I/O。,MCS-51單片機系統(tǒng)結(jié)構(gòu),(一)、單片機硬件資源: 面向控制的8位CPU; 128/256字節(jié)的內(nèi)部RAM; 4K/8K的內(nèi)部ROM; 一組特殊功能寄存器(SFR); 一個可位尋址的布爾處理機; 32個I/O,其中P3口雙功能; 一個全雙工的異步串行口; 2/3個16位定時/計數(shù)器 5/6個中斷源,2個優(yōu)先級;,5、P0口(32-39):是一個8位漏極開路型雙向I/0口,需外部上拉電阻;訪問外部存儲器時,它是分時傳送的低字節(jié)地址和數(shù)據(jù);能以吸收電流的方式驅(qū)動八個LSTTL負(fù)載。 6、P1口
3、(1-8): 有內(nèi)部上拉電阻的8位準(zhǔn)雙向I/0口。外部可拉低但不能拉高,輸入檢測時應(yīng)先置高。能以吸收電流的方式驅(qū)動四個LSTTL負(fù)載。 7、P2口(21-28):除與P1相同外。 P2口在訪問外部存儲器時,它輸出高8位地址。 8、P3口(10-17):第一功能與P1同。 P3口還有第二功能。,P3口第二功能: P3.0 RXD 串口輸入 P3.1 TXD 串口輸出 P3.2 /INT0 外中斷0輸入 P3.3 /INT1 外中斷1輸入 P3.4 T0 定時/計數(shù)器0外部輸入 P3.5 T1 定時/計數(shù)器1外部輸入 P3.6 /WR 外部數(shù)據(jù)存儲器寫選通 P3.7 /RD 外部數(shù)據(jù)存儲器讀選通,
4、I/O口應(yīng)注意問題,1、上電復(fù)位時所有I/O口全部位“1”,設(shè)計時應(yīng)注意,必要時可用硬件反向或軟件調(diào)整。 2、I/O口的吸收電流與輸出電流不同,注意其驅(qū)動能力,選用合理的驅(qū)動方式。,1、狀態(tài)字PSW:CY AC FO RS1 RS0 OV P 可單獨位操作。 CY:進(jìn)位標(biāo)志。最高位D7進(jìn)位或借位時置 1。 AC:輔助進(jìn)位標(biāo)志。半進(jìn)位D3 FO:用戶標(biāo)志位。自定義。 RS1 RSO:選擇工作寄存組 OV:溢出標(biāo)志位。 P:奇偶校驗。運算結(jié)果A的內(nèi)容偶數(shù)個1時, P=0;奇數(shù)個1時,P=1,部分專用寄存器,2、堆棧及堆棧指針SP 堆棧特殊的存儲單元,主要用于保護(hù)數(shù)據(jù)。操作為壓入、彈出,后進(jìn)先出。堆
5、棧的棧頂由SP決定。堆棧的地址隨操作自動增加或減少。上電時SP值為07,在程序的初始化中注意設(shè)置SP。 3、數(shù)據(jù)指針DPTR: 16位數(shù)據(jù)指針,可分為DPH、DPL,作為地址寄存器,可尋址64K,常用于查表,有專門的指令。 4、程序計數(shù)器PC: 16位程序計數(shù)指針。每當(dāng)從存儲器中取出一條指令并加以執(zhí)行時,PC的值自動加一,總是指向?qū)⒁〕龅南乱粭l指令的地址。,通用數(shù)據(jù)寄存器:007FH,1、通用工作寄存器區(qū):001FH 4組(每組都稱 RO R7,由用戶在程序中選擇RS1 RS0) 00 0007 0組 080F 1組 10 1017 2組 181F 3組 *當(dāng)應(yīng)用程序有多個中斷時特別有用,2
6、、位尋址區(qū)20H2FH :可以8位一起操作,也可 以按位操作。一般用作狀態(tài)、標(biāo)志。 如:20H.0,20H.1,20H.2 .20H.7 3、30H7FH:一般數(shù)據(jù)RAM,通常SP設(shè)在這區(qū) 域(如30H),用戶可任意使用。 4、80HFFH: (8052、89C52才有)擴展RAM,不能 直接尋址,須間接尋址。如:MOV R0,#90H MOV R0, A 5、程序存儲器 0000FFFFH ( *注意與/EA配合) 內(nèi)部 00000FFFH(00001FFFH) 外部 1000FFFFH(2000FFFFH) *(盡量使用大容量CPU不外擴程序存儲器 ) *特別要求:1、程序的第一條指令為0
7、000H,6、中斷服務(wù)程序的入口地址: 0003H 外部中斷0(/INT0) 000BH 定時器0溢出中斷 0013H 外部中斷1(/INT1) 001BH 定時器1溢出中斷 0023H 串行口中斷 002BH 定時器2溢出中斷( 8052才有) 7、外部數(shù)據(jù)存儲器: 最大64K ( P0低位地址, P2高位地址) *綜上所述,盡可使用更多資源的 89C52 CPU。,第二部份 單片機應(yīng)用系統(tǒng)的仿真調(diào)試,一、單片機仿真及平臺介紹 1、仿真與仿真機: 仿真的主要目的是人工運行程序來排除錯誤。 一個單片機應(yīng)用系統(tǒng)包括單片機部份及為達(dá)到使用目的而設(shè)計的應(yīng)用電路,仿真就是利用仿真機來代替電路板上 (
8、稱目標(biāo)機) 的單片機,對應(yīng)用電路部份進(jìn)行測試、調(diào)試。 仿真有軟件仿真和硬件仿真兩種,軟件仿真用于用于排除軟件錯誤;硬件仿真借助仿真機進(jìn)行,用于排除一些硬件錯誤。,硬件仿真時仿真機代替目標(biāo)機的CPU,由仿真機向目標(biāo)機的應(yīng)用電路部份提供各種信號、數(shù)據(jù),進(jìn)行調(diào)試。這種仿真可以通過單步、斷點、連續(xù)運行等多種方法來運行程序,并能觀察到單片機內(nèi)部的變化,便于改正各種的錯誤。 51單片機仿真軟件有很多,最常用的有WAVE、KEIL、PROTEUS。根據(jù)多年使用和我校設(shè)備現(xiàn)狀,建議使用WAVE仿真軟件。,第三部分 單片機的指令系統(tǒng)和軟件編程,一、C語言和匯編語言在開發(fā)單片機時各有哪些優(yōu)缺點? 匯編語言是一種用
9、文字助記符來表示機器指令的符號語言,是最接近機器碼的一種語言。其主要優(yōu)點是占用資源少、程序執(zhí)行效率高。但是不同的CPU,其匯編語言可能有所差異,所以不易移植。 C語言是一種結(jié)構(gòu)化的高級語言。其優(yōu)點是可讀性好,移植容易,是普遍使用的一種計算機語言。缺點是占用資源較多,執(zhí)行效率沒有匯編高。,二、單片機開發(fā)采用哪種語言比較好? 對于有復(fù)雜運算的用C語言較好;對于采集等時間要求嚴(yán)格的用匯編好。 由于內(nèi)部ROM、RAM等資源有限,使用C語言編寫,一條指令編譯后,生成很多條機器碼,很容易出現(xiàn)ROM空間不夠、堆棧溢出等問題。而匯編語言一條指令就對應(yīng)一個機器碼,每一步執(zhí)行什么動作都很清楚,調(diào)試起來也比較方便。
10、初學(xué)者還可以對單片機的執(zhí)行有更深的了解,所以我們還是建議采用匯編語言比較好。 *競賽建議采用匯編語言和WAVE仿真平臺(除非你十分熟悉C語言及其調(diào)試環(huán)境)。,單片機的指令系統(tǒng)和軟件編程 1、機器語言(機器碼): 二進(jìn)制碼(BIN)或16進(jìn)制(HEX) 二進(jìn)制代碼( 1110 0101B,0011 0000B) 16進(jìn)制表示(E5H,30H) 2、匯編語言: 助記符(需要匯編成機器碼) 如: MOV A , 30H 二進(jìn)制代碼 E5 30 A-30H E5 操作碼 30操作數(shù) 30H 源地址 A目標(biāo)地址,要使左圖燈亮,程序應(yīng)SETB P2.3 ; 置某位為“1” ,相當(dāng)于接高電平 (位操作,對某
11、位或I/O口操作),要使右圖燈亮,程序應(yīng) CLR P2.2 ; 清某位為“0”,相當(dāng)于接低電平 (位操作,對某位或I/O口操作) 上兩條指令是對I/O口位操作。 51的所有I/O口都可以位操作,也可以整個I/O口8位同時操作。,P2.7 P2.6 P2.5 P2.4 P2.3 P2.2 P2.1 P2.0 MOV P2, #00001000B 或 MOV P2, #08H *兩個燈都亮?xí)r,注意觀察兩個LED的亮度,由此可知I/O口的輸出電流和吸收電流不一樣,產(chǎn)生頻率1K Hz的聲音-晶振12M,LOOP: SETB P2.1 ;喇叭控制腳高 延時500US CLR P2.1 ;喇叭控制腳低 延
12、時500US 轉(zhuǎn)到LOOP循環(huán),在單片機指令中,循環(huán)左(右)移很容易搞錯 循環(huán)右移 RR A ; 原來 A=01011010B, 右移后 A=00101101B 循環(huán)左移 RL A ; 原來 A=01011010B, 左移后A=10110100B,較難掌握并容易錯的指令,帶進(jìn)位循環(huán)右移 RRC A ;原來 A=01011010B, 進(jìn)位位C=1 , 右移后 A=10101101B , C=0 ; 再移一次后, A=01010110B, C=1 帶進(jìn)位循環(huán)左移 RLC A ;原來 A=01001101B, 進(jìn)位位 C=1, 左移后A=10011011B, C=0; 再移一次后, A=001101
13、10B, C=1 *注意RR A、 RL A 與 RRC A、 RLC A的區(qū)別,帶進(jìn)位循環(huán)左(右)移:,比較容易錯的MOV指令,在MOV指令中,有一條指令也很容易出錯: MOV A , Rn Rn為間接指令,只有兩個 R0 、R1, 本指令意思是 以Rn中的數(shù)據(jù)作為地址,將該地址中的數(shù)送給A * MOV A , Rn不支持 R2 、R3,.,第三部分顯示器及其顯示方式,數(shù)碼管顯示器有兩種不同的形式: 一種是8個發(fā)光二極管的陽極都連在一起的,稱為共陽極; 另一種是8個發(fā)光二極管的陰極都連在一起的,稱為共陰極。,規(guī)則排列時數(shù)字的顯示,MOV P2,#11110000B ; 送位控制I/O線 MO
14、V P0,#01H ; 顯示測一段 MOV P0,#02H ; 顯示測一段 MOV P0,#04H ; 顯示測一段 MOV P0,#08H ; 顯示測一段 MOV P0,#10H ; 顯示測一段 MOV P0,#20H ; 顯示測一段 MOV P0,#40H ; 顯示測一段 MOV P0,#80H ; 顯示測一段,不規(guī)則排列時,可以通過送數(shù),使每次亮一段(位)測得各段的值,然后進(jìn)行編碼。,畫一個8字形, 把測得的值標(biāo)到對應(yīng)的位置,便可得到字符編碼,如:要得到 1的字符碼,1為B、C亮,則 B+C=08H+40H=48H。 同理可得其他各碼。,數(shù)碼管屏幕顯示方式靜態(tài)顯示,1 、 靜態(tài)顯示 在單片
15、機應(yīng)用系統(tǒng)中,顯示器顯示常用兩種方法:靜態(tài)顯示和動態(tài)掃描顯示。 所謂靜態(tài)顯示,就是每個顯示器都要單獨一個具有鎖存功能的器件,用于鎖存筆劃段字形代碼。 單片機只要把顯示的字形代碼送到接口電路(鎖存器) 就不用管它了,直到要顯示新的數(shù)據(jù)時,再發(fā)送新的字形碼,使用這種方法單片機軟件簡單,但成本高。(競賽時可以選這種) * 鎖存的器件很多,如串并轉(zhuǎn)換電路74LS16。,動態(tài)顯示,2、動態(tài)掃描顯示(產(chǎn)品開發(fā)采用這種方式) 動態(tài)顯示是單片機中應(yīng)用最為廣泛的一種顯示方式之一。 其接法是把所有顯示器的8個筆劃段A-H同名端連在一起,而每一個顯示器的公共端各自獨立地接一個I/O線控制(三極管)。 CPU將字段輸
16、出口送字形碼時,所有顯示器接收到相同的字形碼,但究竟是那個顯示器亮,則取決于公共端,而這一端是由I/O控制的,所以我們就可以自行決定何時顯示哪一位了。 * 而所謂動態(tài)掃描就是指采用分時的方法,輪流控制各個顯示器的公共端,使各個顯示器輪流點亮。動態(tài)顯示每次只顯示一個字。,顯示1234方法如下:送顯示 1 的代碼到P0,送控制公共端的I/O線P2.x,延時幾毫秒;送顯示 2 的代碼到P0, 1 2 3 4 1 2 3 4 在輪流顯示過程中,每位顯示器的顯示時間是極為短暫的,但由于人的視覺暫留現(xiàn)象及發(fā)光二極管的余輝效應(yīng),盡管實際上各位顯示器并非同時點亮,但只要速度足夠快,給人的印象就是一組穩(wěn)定的顯示
17、數(shù)據(jù)1234,不會有閃爍感。,不論動態(tài)或靜態(tài)顯示,顯示代碼是編程時編好的。顯示時根據(jù)數(shù)值取出來顯示,常用查表指令。 MOV DPTR , # DISPLAY_TABLE MOVC A , A+DPTR (查表指令) 把數(shù)據(jù)指針(表指針)所指地址的內(nèi)容送給累加器 A A A+DPTR 其中DPTR為表頭指針,是一個16位的地址,由DPH和DPL組成(DPTR=DPH+DPL)。A為偏移量,這是因為有時數(shù)不是在表頭而是在表中間,離表頭有一定的偏移。 *注意:MOVC 與 MOV 指令的區(qū)別,第四部分標(biāo)準(zhǔn)輸入設(shè)備 -鍵盤,一、鍵盤接口與編程,鍵盤是由若干按鍵組成的開關(guān)矩陣,它是計算機最常用的輸入設(shè)備
18、。 鍵盤有硬件譯碼和軟件譯碼。 硬件譯碼是采用譯碼電路進(jìn)行譯碼,電路復(fù)雜,成本高,一般很少采用。 軟件譯碼直接采用軟件來識別,不增加成本,一般單片機系統(tǒng)都采用軟件來譯碼,它具有結(jié)構(gòu)簡單,使用靈活等特點。,按鍵開關(guān)的抖動問題 由于按鍵是機械觸點,當(dāng)機械觸點斷開、閉合時,會有抖動,P1.0輸入端的波形如圖所示。 這種抖動對于人感覺不到,但對計算機來說,則完全可以檢測到,因為計算機處理的速度是在微秒級,而機械抖動的時間至少是毫秒級,對計算機而言,這已是一個“漫長”的時間了。你只按了一次按鍵,可是計算機卻已執(zhí)行了多次。,為使CPU能正確地讀出P1口的狀態(tài),對每一次按鍵只作一次響應(yīng),就必須考慮如何去除這
19、些抖動,常用去抖動的方法:硬件方法和軟件方法。 硬件去抖動是加一些能延時的元器件,如電容,而單片機中常用軟件法。 軟件去抖動就是在單片機獲得P1.0口為低的信息后,不是立即認(rèn)定S1已被按下,而是延時10毫秒或更長一些時間后再次檢測P1.0口,如果仍為低,說明S1的確按下了,這實際上是避開了按鍵按下時(前沿)的抖動時間。 而在檢測到按鍵釋放后 (P1.0為高)再延時5到10毫秒,消除后沿的抖動,然后再對鍵值處理。,(1)矩陣式鍵盤的結(jié)構(gòu)與工作原理: 當(dāng)需要的鍵數(shù)比較多時,為減少占用I/O口,通常將按鍵排列成矩陣。 矩陣方式一個端口(如P1口)就可以構(gòu)成4*4=16個按鍵,比直接將端口線用于鍵盤多
20、出了一倍,線數(shù)越多,區(qū)別越明顯,如:再多加一條線就可以構(gòu)成20鍵的鍵盤,多出四個鍵;而直接用端口線則只能多出一個鍵。 上圖中,行所接的I/O口為輸出, 列所接的I/O口為輸入,輸入上拉電阻 。,(2)矩陣式鍵盤按鍵識別法 按鍵識別常用逐行查詢法,可分兩步進(jìn)行: 第一步判斷鍵盤中有無鍵按下: 將全部行線P1.0-P1.3置低電平,然后檢測列線的狀態(tài)。只要有一列為低電平,則鍵盤中有鍵被按下,若所有列線均為高電平,則鍵盤中無鍵按下。 第二步判斷閉合鍵所在的位置: 確認(rèn)有鍵按下后,依次將每根行線置為低電平, 其它行線為高電平;逐行檢測各列線的電平狀態(tài)。若某列為低,則該列線與低電平的行線交叉處的按鍵就是
21、閉合的按鍵。,行線: 輸出 I/O 低4位值 P1.0 1 1 1 0 P1.1 1 1 0 1 P1.2 1 0 1 1 P1.3 0 1 1 1 列線: 輸入 I/O 高4位值 P1.4 1 1 1 0 P1.5 1 1 0 1 P1.6 1 0 1 1 P1.7 0 1 1 1 輸出0FEH,0FDH,0FBH,0F7H 1= 7E 4= 7= 2= 5= 8= 3= 6= 9=,第五部份 中 斷,一、什么是中斷:,當(dāng)CPU正在處理某項事件時,外部或內(nèi)部發(fā)生了緊急事件,要求CPU暫停正在處理的的工作轉(zhuǎn)去處理緊急事件,待處理完以后回到原來被中斷的地方,繼續(xù)執(zhí)行被中斷的程序,這過程稱中斷。,
22、計算機中斷嵌套 當(dāng)CPU正在執(zhí)行中斷服務(wù)程序時, 又有中斷優(yōu)先級更高的中斷申請產(chǎn)生,這時CPU就會暫停當(dāng)前的中斷服務(wù)轉(zhuǎn)而處理高級中斷申請, 待高級中斷處理程序完畢,再返回原中斷程序斷點處繼續(xù)執(zhí)行,這一過程稱為中斷嵌套。,二、中斷的優(yōu)先級處理: 單片機中斷有優(yōu)先級。優(yōu)先級的問題不僅僅發(fā)生在兩個中斷同時產(chǎn)生的情況,也發(fā)生在一個中斷已產(chǎn)生,又有一個中斷產(chǎn)生的情況。 兩個中斷同時發(fā)生,CPU先響應(yīng)優(yōu)先級高的中斷再響應(yīng)優(yōu)先級低的中斷。 當(dāng)一個中斷已產(chǎn)生,又有一個中斷再產(chǎn)生時,如果再產(chǎn)生的中斷優(yōu)先級高于前一個中斷,再產(chǎn)生的中斷被響應(yīng),產(chǎn)生中斷嵌套,否則再產(chǎn)生的中斷被忽略。 單片機的五個中斷源的自然優(yōu)先級
23、外中斷0定時器0外中斷1定時器1串口,三、中斷的響應(yīng)過程和中斷入口 中斷響應(yīng):中斷響應(yīng)可以分為幾個步驟: 1、保護(hù)斷點,即保存下一個將要執(zhí)行的指令地址,把這個地址送入堆棧。 2、尋找中斷入口,根據(jù)不同的中斷源所產(chǎn)生的中斷,查找不同的入口地址。 以上兩點是由計算機自動完成的,與編程者無關(guān)。 3、執(zhí)行中斷處理程序(中斷服務(wù)程序)。 4、中斷返回:執(zhí)行完中斷指令后,就從中斷處返回到主程序繼續(xù)執(zhí)行。,中斷入口: 單片機五個中斷源,有五個相應(yīng)的地址。 每個中斷產(chǎn)生后CPU都到相應(yīng)的地方(中斷服務(wù)入口地址)去找處理這個中斷的程序(中斷服務(wù)入口地址)。 當(dāng)然在去之前要保存下一條將執(zhí)行的指令的地址,以便處理完
24、中斷后回到原來的地方繼續(xù)往下執(zhí)行程序。,中斷請求源入口地址: 外中斷0IE0 入口地址:0003H 定時器0TF0 入口地址:000BH 外中斷1IE1 入口地址:0013H 定時器1TF1 入口地址:001BH 串行口RI(TI) 入口地址:0023H (編寫程序時應(yīng)把中斷程序放在那兒,否則中斷程序就不能被執(zhí)行) 每個地址只有8個單元,當(dāng)中斷程序大于8個單元時,就得放到其他地方,并在入口地址處放一條轉(zhuǎn)移指令轉(zhuǎn)到放程序的地方。,一個完整的主程序看起來應(yīng)該是這樣的: ORG 0000H LJMP START ORG 0003H LJMP EX0_INT ;轉(zhuǎn)外中斷0 ORG 000BH LJMP
25、 T0_INT ;轉(zhuǎn)定時器0 ORG 0030H START: 。 這樣寫的目的是為了留出其他中斷源的入口地址,如果沒有這樣,將把中斷程序當(dāng)主程序執(zhí)行。當(dāng)然,在程序中沒用中斷時,主程序可以直接從0000H開始。,四、MCS-51中斷系統(tǒng)的結(jié)構(gòu):,中斷有關(guān)的寄存器有4個:IE、IP、TCON和SCON,分別用來控制中斷的開關(guān)、各種中斷源的優(yōu)先級和中斷類型。上電復(fù)位后4個寄存器全部為零。,1、中斷允許寄存器IE 中斷的允許或禁止是由可位尋址的中斷允許寄存器IE來控制的,如果某位為“1”,對應(yīng)的中斷將被允許。 IE D7 D6 D5 D4 D3 D2 D1 D0 EA ES ET1 EX1 ET0
26、EX0 EA是總開關(guān),如果它等于0,所有中斷都不允許。 ES 串行口中斷允許 ET1定時器1中斷允許 EX1外中斷1中斷允許。 ET0定時器0中斷允許 EX0外中斷0中斷允許。,2、五個中斷優(yōu)先級有一定的排序(由低位到高 位依次降低) 外中斷0定時器0外中斷1定時器1 串口 *這是自然優(yōu)先級,上電時就這樣排好,可以通過IP改變它。 3、中斷優(yōu)先級控制寄存器IP 中斷優(yōu)先級控制是由可位尋址的中斷優(yōu)先級寄存器IP來控制的,用來改變中斷優(yōu)先級。 IP:D7 D6 D5 D4 D3 D2 D1 D0 - - - PS PT1 PX1 PT0 PX0 串口 定時器1 外中斷1 定時器0 外中斷0 如果某
27、位為1,則優(yōu)先級最高,稱高優(yōu)先級。,TCON是定時/計數(shù)器控制寄存器,其中四位與中斷有關(guān) TCON-D7 D6 D5 D4 D3 D2 D1 D0 TF1 - TF0 - IE1 IT1 IE0 IT0 IE0:外中斷0請求標(biāo)志位。當(dāng)有外部中斷請求時, 由硬件自動置位IE0 CPU響應(yīng)中斷后,硬件自 動將IE0清0。 IE1: 外中斷1中斷請求標(biāo)志位。(置1、清0 同IE0) TF0:定時器T0的溢出中斷標(biāo)記。當(dāng)T0計數(shù)產(chǎn)生溢 出時,由硬件置位TF0。CPU響應(yīng)中斷后,硬 件自動將TF0清0。 TF1:定時器T1的溢出中斷標(biāo)記。(置1、清0 同IF0),(2)SCON是串行口控制寄存器 其中低
28、2位鎖存串行口的接收中斷和發(fā)送中斷標(biāo)志TI、RI(串行口發(fā)送、接收中斷)。 執(zhí)行中斷服務(wù)程序后, 硬件不會自動將TI、RI清0,程序員必須把它清0,重復(fù)產(chǎn)生中斷。 SCON-D7 D6 D5 D4 D3 D2 D1 D0 - - - - - - TI RI 5個中斷請求源分為內(nèi)部中斷和外部中斷 外部中斷請求源(2個):即外中斷0和1,由外部引腳引入的,在單片機上有兩個引腳,名稱為INT0、INT1,也就是P3.2、P3.3這兩個引腳。,內(nèi)部中斷請求源(3個):由內(nèi)部定時器0、定時器1溢出、串行口發(fā)送、接收中斷產(chǎn)生。 五、外中斷觸發(fā)方式: 兩個外中斷的觸發(fā)方式由TCON寄存器中的IT0和IT1決
29、定: IT0:INT0 觸發(fā)方式控制位??捎绍浖M(jìn)行置位 和復(fù)位,IT0=0,INT0為低電平觸發(fā)方 式,IT0=1,INT0為負(fù)跳變(下降沿)觸發(fā)方式。 IT1:INT1觸發(fā)方式控制位。(置位、復(fù)位和觸 發(fā)方式與IT0同),五、多個外中斷源的設(shè)計: 當(dāng)需要多個外中斷時,可以用與的方式進(jìn)行擴充,幾個外中斷接到一個外中斷觸發(fā)端,同時每個中斷接到一個I/O口,當(dāng)中斷時查詢I/O口得知哪個中斷源觸發(fā)。,六、中斷優(yōu)先級的歸納: 優(yōu)先級:單片機采用了自然優(yōu)先級和人工設(shè)置高、低優(yōu)先級的策略,即可以由程序員設(shè)定哪些中斷是高優(yōu)先級、哪些中斷是低優(yōu)先級。 由于只有兩級,必有一些中斷處于同一級別,處于同一級別的,
30、就由自然優(yōu)先級確定。 開機時,每個中斷都處于同一級別的優(yōu)先級,但我們可以用指令對優(yōu)先級進(jìn)行設(shè)置。 中斷優(yōu)先級由中斷優(yōu)先級寄存器IP來改變,IP中某位設(shè)為1,相應(yīng)的中斷就是高優(yōu)先級,否則就是低優(yōu)先級。,七、中斷響應(yīng)過程: 1、下列三種情況之一CPU不會立即響應(yīng)中斷: CPU正在處理一個同級或更高級別的中斷請求。(自然優(yōu)先級的局限) 現(xiàn)行的機器周期不是當(dāng)前正執(zhí)行指令的最后一個周期。由于單片機有單周期、雙周期、三周期指令,當(dāng)前執(zhí)行指令是單字節(jié)沒問題,如果是雙字節(jié)或三字節(jié)的,就要等整條指令都執(zhí)行完了,才能響應(yīng)中斷。 當(dāng)前正執(zhí)行的指令是返回指令RETI或訪問IP、IE寄存器的指令,則CPU至少再執(zhí)行一條
31、指令才應(yīng)中斷。,2、中斷響應(yīng)過程 CPU響應(yīng)中斷時,首先把當(dāng)前指令的下一條指令(就是中斷返回后將要執(zhí)行的指令)的地址送入堆棧,然后根據(jù)中斷標(biāo)記,到相應(yīng)的中斷入口地址去取指令,程序就轉(zhuǎn)到中斷入口處執(zhí)行。 *這些工作都是由硬件來完成的,不必我們?nèi)タ紤]。 3、中斷請求的撤除 CPU響應(yīng)中斷請求后,在中斷返回(執(zhí)行RETI指令)前,必須撤除請求,否則會錯誤地再一次引起中斷過程。,中斷程序完成后,一定要執(zhí)行一條RETI指令,執(zhí)行這條指令后,CPU將會把堆棧中保存著的地址取出,送回PC,這樣程序就會從被中斷打斷的地方繼續(xù)往下執(zhí)行了。 注意:CPU所做的保護(hù)工作是很有限的,只保護(hù)了一個地址,而其它的所有東西
32、都不保護(hù),如果你在主程序中用到了如Acc、PSW等,在中斷程序中也用到它們,又要保證回到主程序后與執(zhí)行中斷以前的數(shù)據(jù)相同,就得自己把它們保護(hù)起來。 *子程序返回REI與中斷返回RETI有何區(qū)別?,第6部分 單片機內(nèi)部定時器/計數(shù)器,單片機計數(shù)器的幾點要點 單片機中有兩個計數(shù)器,分別稱之為T0和T1,這兩個計數(shù)器分別都是由兩個8位的RAM單元THx、TLx組成的,即每個計數(shù)器都是16位的計數(shù)器,最大的計數(shù)量是65536。 單片機計數(shù)器采用加法計數(shù),計數(shù)器可以作為計數(shù)器用。也可以作定時器用。 要達(dá)到某一定時值,采用預(yù)置數(shù),通過預(yù)置數(shù)達(dá)到任意計數(shù)及任意定時的目的。 *與單片機相關(guān)的寄存器TMOD 、
33、TCON、THx、TLx初上電時全部為零,* 計數(shù)器計滿溢出后,計數(shù)器里面的值變成了0,下一次將要計滿65536次后才會溢出(因為容器那么大),為保證每一次計數(shù)都一樣,計滿之后我們必須重新預(yù)置數(shù)(初值)。,因為每次溢出時必須執(zhí)行一段程序,在這段程序中把預(yù)置數(shù)送入計數(shù)器中,保證每一次計數(shù)都一樣。這種的計數(shù)器方式稱加法計數(shù)器。預(yù)置的數(shù)稱初值。 加法計數(shù)器是計滿溢出時才申請中斷, 所以在給計數(shù)器賦初值時, 不能直接輸入所需的計數(shù)值, 而應(yīng)輸入的是計數(shù)器計數(shù)的最大值與計數(shù)值的差值, 設(shè)最大值為 M, 計數(shù)值為 N, 初值為 X, 則 X的計算方法如下: 計數(shù)狀態(tài): X=MN 定時狀態(tài): X=M定時時間
34、/T 而 T=12晶振頻率,6.2 定時器方式和控制寄存器,一、 定時器/計數(shù)器的工作方式寄存器TMOD,1、圖1中,TMOD被分成兩部份,每部份4位。分別用于控制T1和T0, M1和M0為工作方式控制位。,2. C/T 定時器方式或計數(shù)器方式選擇位 定時/計數(shù)器既可作定時用也可作計數(shù)用,到底作什么用,由我們根據(jù)需要決定。如果C/T為0就是用作定時器,如果C/T為1就是用作計數(shù)器。一個定時/計數(shù)器同一時刻要么作定時,要么作計數(shù),不能同時又作定時又用作計數(shù)。,3. GATE 定時器/計數(shù)器運行門控標(biāo)志位 GATE=0時,GATE經(jīng)非門后為1,進(jìn)入或門,或門總是輸出1,和或門的另一個輸入端INT1
35、無關(guān),在這種情況下,開關(guān)的打開、合上只取決于TR1,只要TR1是1,開關(guān)就合上,脈沖就能過來。而如果TR1等于0則開關(guān)打開,計數(shù)脈沖無法通過,因此定時/計數(shù)是否工作,只取決于TR1。 GATE=1時,計數(shù)脈沖通路上的開關(guān)不僅要由TR1來控制,而且還要受到INT1引腳的控制,只有TR1為1,且INT1引腳也是高電平,開關(guān)才合上,計數(shù)脈沖才可通過。利用這個特性,可以用來測量一個高電平信號的寬度。,2、啟停和中斷控制寄存器TCON:,TCON高4位用于定時/計數(shù)器。TF0、TF1計數(shù)溢出標(biāo)志,當(dāng)計數(shù)溢出后TF0(TF1)就由0變?yōu)?。(申請中斷, 在中斷響應(yīng)后自動恢復(fù) 0。TF產(chǎn)生的中斷申請是否被接
36、受, 還需要由中斷是否開放來決定) TR0、TR1為運行控制位,當(dāng)它為1時啟動計數(shù),為0停止計數(shù),可用指令SETB來置位以啟動計數(shù)器/定時器運行,用指令CLR來關(guān)閉定時/計數(shù)器的工作。在系統(tǒng)復(fù)位時被清 0。,定時/計數(shù)器的工作方式,1、工作方式0 工作方式0為13位定時/計數(shù)方式。它由TLx)的低5位和THx)的8位構(gòu)成13位的計數(shù)器,此時TLx的高3位未用。,2、工作方式1 工作方式1是16位的定時/計數(shù)方式,其它特性與工作方式0相同。,3、工作方式2(8位自動裝載) 工作方式2是8位自動再裝入預(yù)置數(shù)工作方式。我們知道當(dāng)定時器溢出時,要運行一段程序重裝預(yù)置數(shù),所以采用工作方式0或1都要在溢出
37、后做一個重置預(yù)置數(shù)的工作,需要重置的時間。當(dāng)需要精確計時,就需要工作方式2。,在工作方式2,只有低8位參與計數(shù),而高8位不參與計數(shù),用作預(yù)置數(shù)的存放,每當(dāng)計數(shù)溢出,就會打開高、低8位之間的開關(guān),預(yù)置數(shù)進(jìn)入低8位。這是由硬件自動完成的,不需要由人工干預(yù)。通常這種工作方式用于波特率發(fā)生器,用于這種用途時,定時器就是為了提供一個時間基準(zhǔn)。計數(shù)溢出后重新裝入預(yù)置數(shù)再開始計數(shù)。,4、工作方式3 (兩個8位獨立計數(shù)器) 這種方式定時/計數(shù)器0被拆成2個獨立的8位定時/計數(shù)器來用。其中,TL0可以構(gòu)成8位的定時器或計數(shù)器的工作方式,而TH0則只能作為定時器來用。,定時/計數(shù)器需要控制,計滿后溢出需要有溢出標(biāo)
38、記,T0被分成兩個來用,那就要兩套控制及溢出標(biāo)記。這時TL0還是用原來的TF0標(biāo)記,而TH0則借用T1的TF1標(biāo)記。這種情況只有在T1以工作方式2運行(當(dāng)波特率發(fā)生器用不產(chǎn)生中斷)時,才讓T0工作于方式3的。,五、定時器/計數(shù)器的定時/計數(shù)范圍 工作方式0: 13位定時/計數(shù)方式,因此,最多可以計到2的13次方,也就是8192。 工作方式1: 16位定時/計數(shù)方式,因此,最多可以計到2的16次方,也就是65536。 工作方式2和3: 都是8位的定時/計數(shù)方式,因此,最多可以計到2的8次方,也說是256。 *預(yù)置值計算:用最大計數(shù)量減去需要的計數(shù)次數(shù)即是該預(yù)置的數(shù)。,定時器/計數(shù)器應(yīng)用舉例,一、
39、方式0的應(yīng)用 例1:利用定時器輸出周期為2ms的方波, 設(shè)單片機晶振頻率為 6MHz。 選用定時器/計數(shù)器T0作定時器, 2ms的方波可由間隔1ms的高低電平交替產(chǎn)生, 因而只要每隔1ms對 I/O口 取反一次即可得到這個方波。 定時1 ms的初值: 因為一個機器周期=2s (6MHz) 所以1ms內(nèi)T0 需要計數(shù)N次: N= 1 ms2 s = 500,T0的初值X為:X=MN=8192500=7692=1E0CH 因為13位計數(shù)器中,低8位TL0只使用了5位, 其余碼均計入高8位TH0的初值, 則T0的初值1E0CH調(diào)整為: 1E0CH=0001111000001100B=TH0=0F0H
40、,TL0=0CH。 TMOD初始化:TMOD=00000000B=00H (GATE=0, C/T=0,M1=0,M0=0) TCON初始化: 啟動TR0=1 IE初始化:IE=82H ;開中斷, 定時器T0中斷允許,第7部分 單片機串行接口,單片機串行口內(nèi)部結(jié)構(gòu),7.2 與串行口有關(guān)的特殊功能寄存器,1. 數(shù)據(jù)緩沖器SBUF SBUF是可直接尋址的特殊功能寄存器, 在物理上, 它對應(yīng)著兩個獨立的寄存器, 一個發(fā)送寄存器, 一個接收寄存器。 發(fā)送就是CPU寫入SBUF的過程,(如MOV SBUF,A) 接收就是讀取SBUF的過程(如MOV A,SBUF)。 接收寄存器是雙緩沖的, 以避免在接收
41、下一幀數(shù)據(jù)之前, CPU未能及時響應(yīng)接收器的中斷, 沒有把上一幀數(shù)據(jù)讀走, 而產(chǎn)生兩幀數(shù)據(jù)重疊的問題。,2. 串行口控制寄存器SCON SCON用于控制和監(jiān)視串行口的工作狀態(tài), 其相應(yīng)的各位功能介紹如下: SCON-D7 D6 D5 D4 D3 D2 D1 D0 SM0 SM1 SM2 REN TB8 RB8 TI RI SM0、SM1: 用于定義串行口的操作模式, 兩個選擇位對應(yīng) 4 種模式,見下頁表。 SM2: 多機通信時的接收允許標(biāo)志位。 在模式 2和 3中, 若SM2 =1, 且接收到的第 9 位數(shù)據(jù)(RB8)是 0, 則接收中斷標(biāo)志(RI)不會被激活。 在模式1中, 若SM2=1 且
42、沒有接收到有效的停止位, 則 RI不會被激活。 在模式 0 中, SM2 必須是 0。,表7.2 串行口操作模式選擇,其中fOSC是振蕩器頻率, UART為通用異步接收和發(fā)送器的英文縮寫。,3. 電源控制寄存器PCON PCON-D7 D6 D5 D4 D3 D2 D1 D0 SMOD - - - - - - - 特殊功能寄存器PCON中, 只有一位(最高位)SMOD與串行口的工作有關(guān), 該位是串行口波特率系數(shù)的控制位: SMOD=1 時, 波特率加倍; SMOD=0 , 波特率不加倍。 PCON的地址為 87H, 不可位尋址, 初始化時需要用字節(jié)傳送。,7.3 串行口的 4 種工作模式,1.
43、 模式 0 (1) 模式 0 輸出狀態(tài)。,外接移位寄存器輸出,(2) 模式 0 輸入狀態(tài)。,外接移位寄存器輸入,2. 模式 1 模式1為波特率可變的 8位異步通信接口。波特率取決于定時器 T1 的溢出速率及SMOD的狀態(tài)。數(shù)據(jù)位由 P3.0 (RXD)端接收,由P3.1(TXD)端發(fā)送。 傳送一幀信息為10位:一位起始位(0),8位數(shù)據(jù)位(低位在前)和一位停止位(1)。 (1)模式1發(fā)送過程:用軟件清除TI后,CPU執(zhí)行任何一條以SBUF為目標(biāo)寄存器的指令, 就啟動發(fā)送。 數(shù)據(jù)由TXD引腳輸出, 一幀信號發(fā)送完時, 將置位發(fā)送中斷標(biāo)志TI=1, 向CPU申請中斷, 完成一次發(fā)送過程。,(2)
44、模式1 接收過程。 用軟件清除 RI后, 當(dāng)允許接收位REN被置位1時, 接收器開始檢測。 當(dāng)檢測到有從“1”到“0”的負(fù)跳變時, 則啟動接收過程, 在接收移位脈沖的控制下, 接收完一幀信息。 當(dāng)最后一次移位脈沖產(chǎn)生時能滿足下列兩個條件TI置1 RI=0; 接收到的停止位為1 或 SM2=0。,3. 模式 2 和模式3 串行口工作于模式2和模式3 時,被定義為 9 位異步通信接口。它們的每幀數(shù)據(jù)結(jié)構(gòu)是 11 位: 最低位是起始位(0), 其后是 8 位數(shù)據(jù)位(低位在先), 第 10 位是用戶定義位(SCON中的 TB8或 RB8), 最后一位是停止位(1)。 模式 2 和模式3 工作原理相似,
45、 唯一的差別是模式 2 的波特率是固定的, 即為 f / 32或 f / 64, 而模式 3的波特率是可變的, 與定時器 T1的溢出率有關(guān)。,7.5 波特率 串行口每秒鐘發(fā)送或接收的數(shù)據(jù)位數(shù)稱為波特率。 假設(shè)發(fā)送一位數(shù)據(jù)所需時間為T, 則波特率為 1/T。 (1) 模式 0 的波特率等于單片機晶振頻率的 1/12, 即每個機器周期接收或發(fā)送一位數(shù)據(jù)。(固定) (2) 模式 2 的波特率與電源控制器PCON的最高位SMOD的寫入值有關(guān)(但波特率不可變): 即SMOD=0, 波特率為(1/64) fOSC; SMOD=1, 波特率為(1/32)fOSC。,(3) 模式 1 和模式 3 的波特率除了
46、與SMOD位有關(guān)之外, 還與定時器 T1 的溢出率有關(guān) (波特率可變) 。定時器 T1 作為波特率發(fā)生器, 常選用定時方式 2( 8 位重裝載初值方式), 并且禁止 T1 中斷。此時 TH1 從初值計數(shù)到產(chǎn)生溢出, 它每秒鐘溢出的次數(shù)稱為溢出率。 因此,表 7.3 定時器T1產(chǎn)生的常用波特率,例:設(shè)某51單片機系統(tǒng),串行口工作于模式3,要求傳送波特率為1200Hz,作為波特率發(fā)生器的定時器T1工作在方式2時, 請求出計數(shù)初值為多少?(設(shè)單片機的振蕩頻率為6 MHz)。因為串行口工作于模式 3時的波特率為 :,當(dāng)SMOD=0 時,初值TH1=256-6106/(12001232/1) =243=
47、0F3H 當(dāng)SMOD=1 時,初值TH1=256-6106/(12001232/2) =230=0E6H,7.6 串行口的應(yīng)用,一、 串行口的編程 串行口需初始化后, 才能完成數(shù)據(jù)的輸入、輸出。 初始化過程如下: (1) 串行口工作模式設(shè)定: 設(shè)定 SCON 的 SM0、SM1 兩位二進(jìn)制編碼。 (2) 對于操作模式 2 或 3, 應(yīng)根據(jù)需要在TB8 中寫入 待發(fā)送的第 9 位數(shù)據(jù)。 (3) 若選定的工作模式不是模式 0, 還需設(shè)定接收/發(fā) 送的波特率。 (4)設(shè)定SMOD的狀態(tài), 以控制波特率是否加倍。 *若選定工作模式1或3, 則應(yīng)對定時器 T1進(jìn)行初始 化 以設(shè)定其溢出率(初值)。,注意
48、:,在串行通信的編程中,如果是方式1和方式3,初始化程序中必須對定時計數(shù)器T1初始化以選擇波特率。 發(fā)送是先發(fā)送數(shù)據(jù)后再檢查TI看是否發(fā)送完;而接收則是先檢查RI再接收數(shù)據(jù); 無論是發(fā)送前還是接收前都應(yīng)先清RI和TI; 無論是查詢方式還是中斷方式,發(fā)送或接收后CPU都不會自動清RI和TI,必須用程序?qū)I和TI清0。,第9部分 系統(tǒng)編程規(guī)范,當(dāng)一個單片機應(yīng)用系統(tǒng)的硬件確定以后,接下來就要進(jìn)行系統(tǒng)軟件的設(shè)計。 設(shè)計的主要內(nèi)容是應(yīng)用系統(tǒng)的主程序和各應(yīng)用程序模塊。 系統(tǒng)編程主要圍繞主程序、子程序和各中斷服務(wù)程序的關(guān)系以及一些初始化、內(nèi)存分配、優(yōu)先級等問題。,一、主程序、子程序和中斷服務(wù)子程序的概念。
49、 1、主程序 主程序是單片機系統(tǒng)控制程序的主框架。它是一個順序執(zhí)行的無限循環(huán)的程序。運行過程必須構(gòu)成一個圈,這是一個很重要的概念。如圖a所示。,主程序應(yīng)不停地按順序查詢各種軟件標(biāo)志,并根據(jù)其變化調(diào)用相關(guān)的子程序和執(zhí)行相應(yīng)的中斷服務(wù)子程序,以完成對各種實時事件的處理。上圖(b)給出了主程序的結(jié)構(gòu)。 從主程序的流程結(jié)構(gòu)可以看到,程序一開始必須有段初始化過程。 初始化主要完成中斷的設(shè)置、寄存器的設(shè)置(包括特殊功能寄存器)、定時器的設(shè)置及其賦初值、堆棧的設(shè)置等一系列程序執(zhí)行中所用到的或可能用到的寄存器、內(nèi)存的初始值的設(shè)置,是任何程序必不可少的。,1、偽定義與初始化 為了便于閱讀和修改調(diào)試,經(jīng)常對一些內(nèi)
50、存變量、I/O口等作重定義,如: SPEAK EQU P0.7;表示SPEAK就是P0.7 COUNT EQU 30H 這樣凡是用到30H的地方都用COUNT代替,一是便于閱讀,知道30H是存放計數(shù)值,二是當(dāng)你要把30H作為別用,把計數(shù)值調(diào)到40H時,只要更改 COUNT EQU 30H,不必要到程序的每個地方把30H改為40H。 初始化是對程序中用到的中斷、定時器及其初值、堆棧、I/O口及內(nèi)存進(jìn)行設(shè)置,因為大部分的特殊功能寄存器復(fù)位時為0,內(nèi)存復(fù)位時是隨機數(shù)。 偽定義與初始化一般放在主程序前。如下面程序,SPEAK EQU P0.7;表示SPEAK就是P0.7 COUNT EQU 30H O
51、RG 0000H ;指定程序的起始地址 LJMP START ORG 0030H START: MOV IE,#00000011 ;允許定時器0和外中斷0 MOV TMOD,#01H ;定時/計數(shù)器0工作于方式1 MOV TH0,#3CH MOV TL0,#0B0H ;即數(shù)15536;預(yù)置初值 MOV SP,#60H ;堆棧設(shè)置60H,MOV R2,#7FH MOV R0,#00H LOOP: MOV R0,#00H ;清內(nèi)存0000-007FH INC R0 DJNZ R2,LOOP ;以上是初始 SETB EA ;開總中斷允許 SETB TR0 ;定時/計數(shù)器0開始運行 MAIN:,2、子
52、程序及參數(shù)傳遞 在一段程序中,往往有許多地方需要執(zhí)行同樣的一種操作,這時可“把它單獨編成一個子程序,在主程序需要執(zhí)行這種操作的地方執(zhí)行一條調(diào)用指令轉(zhuǎn)去執(zhí)行這子程序,完成操作以后再返回 到原來的程序(主程序)繼續(xù)執(zhí)行, 并可“反復(fù)調(diào)用,如右圖所示。 這樣處理可以簡化程序結(jié)構(gòu), 縮短程序長度,便于模塊化和調(diào)試。 在匯編語言源程序中,主程序 調(diào)用子程序時要注意兩個問題,即 主程序和子程序間參數(shù)傳遞以及子 程序現(xiàn)場保護(hù)的問題。,在子程序中,一般應(yīng)包含有現(xiàn)場保護(hù)和現(xiàn)場恢復(fù)兩個部分。 子程序調(diào)用中還有一個特別重要的問題,就是信息變換,也就是參數(shù)傳遞問題。 在調(diào)用子程序時,主程序應(yīng)先把有關(guān)參數(shù)(即入口參數(shù))
53、放到某些約定的位置,子程序在運行時,可以從約定的位置得到有關(guān)的參數(shù)(如延時子程序MOV R5,#1 ACALL DELAY )。 同樣子程序在運行結(jié)束前,也應(yīng)該把運算結(jié)果(出口參數(shù))送到約定位置,在返回主程序后,主程序可以從這些地方得到需要的結(jié)果。這就是參數(shù)傳遞。子程序必須以RET結(jié)尾。,MOV R5,#1 ACALL DELAY1 ;* DLY20MS SUB_PROGRAM *; DELAY1: PUSH PSW DELAY: MOV R6,#40 LOOP: MOV R7,#248 Loop1: DJNZ R7,Loop1 DJNZ R6,LOOP DJNZ R5,DELAY POP P
54、SW RET 實際上實現(xiàn)參數(shù)傳遞時,可采用多種約定方法,單片機中常用工作寄存器、累加器、地址指針寄存器(R0 、 R1、DPTR)或堆棧來傳遞參數(shù)。,3用工作寄存器或累加器來傳遞參數(shù) 這種方法是把入口參數(shù)或出口參數(shù)放在工作寄存器Rn或累加器A中。主程序在調(diào)用子程序之前要把入口參數(shù)放在Rn或A中,子程序運行后的結(jié)果,即出口參數(shù)也放在Rn或A中。 如查表: MOV A,P1 CJNE A,#7EH,SCAN2 MOV A,#01H AJMP SCAN_TABLE1 SCAN2: CJNE A,#BEH,SCAN3 MOV A,#02H AJMP SCAN_TABLE1 SCAN3: . . . .
55、 . .,SCAN_TABLE1: MOV DPTR,#TABLE2 ACALL SCAN_TABLE2 MOV P0,R0 . . . . . . SCAN_TABLE2: MOV A,A+DPTR MOV R0,A RET TABLE2: DB 77 H, 41H, 3BH, 5BH ,4DH ,5EH ,7EH, 上面程序?qū)崿F(xiàn)讀按鍵,以A作為參數(shù)帶入查顯示表,結(jié)果在A和R0返回(傳遞)。 從上例中可以看到,子程序也應(yīng)有一個名字,該名字應(yīng)作為子程序中第一條指令的標(biāo)號。 如:查表子程序的名字是SCAN_TABLE2。 其入口條件是A待查表的數(shù);出口條件是A(或R0)-顯示值。,二、主程序調(diào)用
56、子程序與主程序被中斷而去執(zhí)行中斷服務(wù)子程序的過程是不同的。主程序調(diào)用子程序是: 當(dāng)主程序運行到1000H,執(zhí)行“LCALL SECOND”指令時,先自動壓人斷點1003H,然后執(zhí)行子程序,如左圖所示;而主程序中斷是隨機的,如右圖所示。,第十部分 單片機最小系統(tǒng)及外部擴展,一、三總線概念,1地址總線(AB) 地址總線為16根,P2口作高8位地址線(A15一A8),P0口分時用做擴展系統(tǒng)的低8位地址線(A7一Ao)和數(shù)據(jù)線(D7一D0)。 P0口輸出的低8位地址由地址鎖存允許信號ALE的下降沿鎖存,經(jīng)地址鎖存器輸出低8位地址(A7一A0),此后P0口用做數(shù)據(jù)線。,2數(shù)據(jù)總線(DB) 數(shù)據(jù)總線為8根
57、。數(shù)據(jù)總線由PO口擔(dān)任,P0口的帶負(fù)載能力為8個TTL (其他為4個TTL),所以在進(jìn)行應(yīng)用系統(tǒng)設(shè)計時,要充分利用P0口線的帶負(fù)載能力。,3控制總線(CB) 用于系統(tǒng)擴展的控制總線主要有: /RD(P3.7)、/WR(P3.6):用于片外RAM或片外IO芯片的讀寫控制,執(zhí)行指令MOVX時,根,據(jù)讀寫要求使/RD或/WR有效。 *比較MOV 、MOVC 、MOVX的區(qū)別 /PSEN:用于片外ROM的讀選通控制,執(zhí)行指令時自動生成。 ALE:用于P0口低8位地址鎖存控制,它是系統(tǒng)硬件生成的固有信號(1/6)。 /EA:用于片內(nèi)片外程序存儲器的選擇控制,一般根據(jù)系統(tǒng)擴展情況由外電路設(shè)置。當(dāng)/EA1,且PC值小于0FFFH時,CPU訪問內(nèi)部ROM,PC值超出0FFFH時,則自動轉(zhuǎn)向外部ROM;當(dāng)EA0時,無論片內(nèi)有無ROM,CPU只訪問外部ROM。 使用803l時,/EA必須接地。使用89C51時,/EA接十5V。,189C51最小應(yīng)用系統(tǒng) 所謂最小應(yīng)用系統(tǒng)是指能維護(hù)單片機遠(yuǎn)行的最簡單配置系統(tǒng)。 89C51片內(nèi)有FLASH ROM,構(gòu)成最小應(yīng)用系統(tǒng)時,只要將單片機接上時鐘電路所需的晶體和電容還有復(fù)位電路即可。由于不需要外擴程序存儲器,
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 生產(chǎn)檢測員考試題及答案
- 生產(chǎn)檢驗方法試題及答案
- 軟件開發(fā)終極試題及答案
- 中醫(yī)護(hù)理緩解神經(jīng)性疼痛的思路與方法
- 2026 年初中英語《語法填空》專題練習(xí)與答案 (100 題)
- 2026年深圳中考英語失分點攻克試卷(附答案可下載)
- 《GA 2117-2023警用服飾 姓名牌》專題研究報告
- 2026年大學(xué)大二(交通運輸)運輸經(jīng)濟學(xué)階段測試試題及答案
- 2026年深圳中考數(shù)學(xué)知識體系構(gòu)建試卷(附答案可下載)
- 2026年深圳中考數(shù)學(xué)答題規(guī)范特訓(xùn)試卷(附答案可下載)
- 文旅融合調(diào)研活動方案
- 自帶車司機合同協(xié)議書
- 摩托車制造流程圖
- 2025四川省土地租賃合同范本
- GB/T 5709-2025紡織品非織造布術(shù)語
- 企業(yè)微信使用手冊
- 綠化養(yǎng)護(hù)驗收實施方案1
- 2024年理財行業(yè)高質(zhì)量發(fā)展白皮書-農(nóng)銀理財
- 危險化學(xué)品經(jīng)營單位(安全生產(chǎn)管理人員)考試題及答案
- UL498標(biāo)準(zhǔn)中文版-2019插頭插座UL標(biāo)準(zhǔn)中文版
- 《非物質(zhì)文化遺產(chǎn)》課程教學(xué)大綱
評論
0/150
提交評論