河南理工大學(xué)單片機(jī)期末復(fù)習(xí)總結(jié)_第1頁
河南理工大學(xué)單片機(jī)期末復(fù)習(xí)總結(jié)_第2頁
河南理工大學(xué)單片機(jī)期末復(fù)習(xí)總結(jié)_第3頁
河南理工大學(xué)單片機(jī)期末復(fù)習(xí)總結(jié)_第4頁
河南理工大學(xué)單片機(jī)期末復(fù)習(xí)總結(jié)_第5頁
已閱讀5頁,還剩15頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、單片機(jī)應(yīng)用特點(diǎn):1、小巧、靈活、成本低、易于產(chǎn)品化2、面向控制3、抗干擾能力強(qiáng)4、方便實(shí)現(xiàn)多機(jī)和分布式控制一. 單片機(jī)的概念 在一塊硅片上集成了中央處理器 電路的微型計(jì)算機(jī)即為單片機(jī)(CPU、數(shù)據(jù)存儲(chǔ)器RAM、程序存儲(chǔ)器ROM、定時(shí)器/計(jì)數(shù)器和多種I/O接口 microcontroller )因?yàn)樗菫榱藢?shí)時(shí)控制應(yīng)用而設(shè)計(jì)制造,所以又稱為微控制器。一般統(tǒng)稱為微型處理部件(MicroCo ntroller Un it )二. 單片機(jī)與微型機(jī)的區(qū)別 微型機(jī)由CPU、存儲(chǔ)器、 單片機(jī)將CPU、存儲(chǔ)器、 通用計(jì)算機(jī)的缺點(diǎn)(* ):三. 單片機(jī)的特點(diǎn)1 )片內(nèi)存儲(chǔ)容量小2)集成度高3)高可靠性高可靠性原

2、因(*)4)易擴(kuò)展 5)控制功能強(qiáng)四. AT89C52單片機(jī)的CPU振蕩周期: 時(shí)鐘周期: 機(jī)器周期: 指令周期:1/fOSC2/fOSC12/fOSC=T14T (*)MCUI/O接口及中斷系統(tǒng)組成,各部分通過總線連接I/O接口(并、串)和 A/D集成在一塊芯片上,各部分用內(nèi)部總線連接1)系統(tǒng)的軟硬件的應(yīng)用/配置比比較低。2)可靠性差。3)價(jià)格高6)性能價(jià)格比高7)低功耗8)保密性好AT89C52單片機(jī)的存儲(chǔ)器存儲(chǔ)器特點(diǎn):程序存儲(chǔ)器 數(shù)據(jù)存儲(chǔ)器AT89C52單片機(jī)的存儲(chǔ)器2. 程序存儲(chǔ)器最大64K,放程序和始終要保留的常數(shù)1、程序存儲(chǔ)器分布1)內(nèi)部(片上):2)外部(擴(kuò)展):0000H1FF

3、FH 2000HFFFFH3 )用PC作為地址指針,3. 程序存儲(chǔ)器8031上無內(nèi)部程序存儲(chǔ)器,8051有4K ROM,8751有4K EPROM 作為程序存儲(chǔ)器,AT89C52有8K分開哈佛型 合并普林斯頓型8K64K8K56K通過16位地址總線4)Flash5)內(nèi)外部的低/EA=1/EA=08K空間地址重疊,不能同時(shí)使用:內(nèi)部:外部使用AT89C52時(shí),/EA=1,即要接高電平(+5V),當(dāng)PC超過8KB,自動(dòng)轉(zhuǎn)2000HFFFFH(片外)8031無內(nèi)部程序存儲(chǔ)器,其/EA應(yīng)接地(*) 程序存儲(chǔ)器20*)程序存儲(chǔ)器使用時(shí)注意的問題(1)2)例:注意 /EA 是否接地 編程時(shí)用戶主程序應(yīng)放在

4、 0030H 后 ORG 0000Hmin0030HminLJMP ORG min : NOPNOP LJMP數(shù)據(jù)存儲(chǔ)器(可讀寫)放程序運(yùn)行中所需的常數(shù)或變量 1、外部 64K ( movx ): 0000HFFFFH2、內(nèi)部數(shù)據(jù)存儲(chǔ)器 分為物理上獨(dú)立且 性質(zhì)不同的幾個(gè)區(qū)007FH :80HFFH :數(shù)據(jù)存儲(chǔ)器(256B ,mov) 片內(nèi)部分 2塊: 128B , RAM 區(qū) 128B,特殊功能寄存器區(qū)( SFR 區(qū))數(shù)據(jù)存儲(chǔ)器內(nèi)部RAM (低128B)分為:通用寄存器區(qū): 4組( R0R7 ) 可位尋址區(qū): 20H2FH ( 16個(gè))1.用戶 RAM片內(nèi) RAM 區(qū)結(jié)構(gòu)0區(qū)00H07H1 區(qū)

5、 08H0FH2區(qū)10H17H3區(qū)18H1FH由PSW中的RS1,RS0來決定用哪個(gè)工作區(qū)(00,01,10,11)設(shè)置 4個(gè)工作寄存器區(qū)的原因例:若程序分三段,在1段R0工作在0區(qū)(00H ),在2段R0中的內(nèi)容要改變,在3段程序中要用到1段 中的R0的內(nèi)容(0區(qū)中A*B,結(jié)果送R0,1區(qū)中02H送R0)CLR RS0CLRRS1MOVA , #02HMOVB , #03HMULABMOVR0 , ASETBRS0MOVR0 , #02HINCR0MOVA , R0CLRRS0MOVB , R0ADDA , BEND* : 1、2FH的D3位對應(yīng)的位地址是多少?若(2FH )=28H,則 2

6、FH.3= ?2 、 mov C , 00Hmov A , 00H(20H)=55H ,(00H)=55H ,則C,A的值分別為多少?3、mov C , 20H mov A , 20H( 24H ) =55H ,( 20H ) =33H3. 用戶 RAM (數(shù)據(jù)緩沖區(qū)、堆棧區(qū)、數(shù)據(jù)區(qū))30H7FH堆棧 , 向上增長4. 專用寄存器區(qū)(特殊功能寄存器) 位于內(nèi)部 RAM 的 80HFFH, 只能采用直接尋址方式SFR其地址可被8整除(即其字節(jié)地址的低位非 0即8)除PC和4組R0R7外其他都是SFR, 有的寄存器可以進(jìn)行位操作,有的不行??晌粚ぶ返? )累加器 Acc ( * )功能:算術(shù)運(yùn)算、

7、送數(shù)、比較、布爾操作(位操作)等圍繞 Acc 進(jìn)行 書寫:位操作與 push , pop 指令中寫為 Acc ,其他情況下寫成 A2)B寄存器(*)功能:用于乘除指令8051:匯編 (8086):MOV A , #05HMOV B , #11HMUL ABB,A=(A)*(B)B 放除數(shù)。結(jié)果 A 放商, B 放余數(shù)MOV AL , 05HMOV BL , 11HMUL BLAX=(AL)*(BL)DIV AB ; A放被除數(shù),4)SP51單片機(jī)的堆棧為向上增長型( *) 初始時(shí)指向棧底,初始值 =07H ,事實(shí)上從 08H 單元開始放數(shù) 注:初始化程序中應(yīng)對 SP修改(*)MOV SP ,

8、#30H5)DPTR 數(shù)據(jù)指針( *)16位,也可分成兩個(gè) 8位的寄存器 DPH ,DPL 。MOV DPH , #05HMOV A , DPH ;( A ) =05H當(dāng)DPTR放16位對64KB外部數(shù)據(jù)存儲(chǔ)器尋址時(shí),可作為間址寄存器用 MOV DPTR , #1234HMOVX A , DPTR (1234H)=08H , 則( A) =08H當(dāng)DPTR放16位對程序存儲(chǔ)器訪問時(shí),可作為基址寄存器用MOVC A , A+DPTR A=(A)+(DPTR)注:在中斷服務(wù)程序中,若要將DPTR中內(nèi)容壓棧時(shí),應(yīng)分為高 8位(DPH)和低8位( DPL )分別壓棧(因?yàn)闂V羔樖?8位寄存器)復(fù)位操作

9、和復(fù)位電路126單片機(jī)工作方式 復(fù)位后的初始值:SP= 07HP0 P3= 0FFHPC= 0000HSFR=0( SBUF內(nèi)容不定)復(fù)位后從0000H開始執(zhí)行程序 復(fù)位不影響RAM的狀態(tài)1.6AT89C52單片機(jī)的低功耗工作方式節(jié)電(空閑)工作方式CPU停止,RAM、定時(shí)器、串行口和中斷系 統(tǒng)繼續(xù)工作掉電工作方式僅給RAM供電,50卩A匯編3) MOVX類指令a、外部數(shù)據(jù)存儲(chǔ)器地址由 DPTR指向MOVX A , DPTR ; A=(D PTR)MOVX DPTR, A; (D PTR)=A例:MOV DPTR , #2007HMOVX A , DPTRINC DPTRMOVX DPTR ,

10、 ARET例:把片外數(shù)據(jù)存儲(chǔ)器 2040H單元中的數(shù)取出,傳送到 3000H單元中MOVDPTR , #2040HMOVXA , DPTRMOVDPTR , #3000HMOVXDPTR , Ab、外部數(shù)據(jù)存儲(chǔ)器地址由Ri和P2 口指向Ri: R0 ,R1指向地址低8位(*)P2:指地址高8位MOVXA , Ri ; A=(Ri)+( P2)MOVXRi , A ; (Ri)+( P2)=A例:MOV P2 , #20HMOV R0 , #07HMOVX A , R0INC R0MOVX R0 , A總結(jié)(*): 1、A與片外數(shù)據(jù)存儲(chǔ)器的地址傳送通過P0和P2進(jìn)行,數(shù)據(jù)傳送由P0傳輸2、訪問外

11、部數(shù)據(jù)存儲(chǔ)器只能用間址方式3、只能和A進(jìn)行傳送4、訪問片外I/O 口使用這四條指令,因?yàn)槠浣y(tǒng)一編址5. MOVC只能用基址+變址方式,且目的操作數(shù)只能為A注:若在源程序開始不放 ORG指令,則匯編將從0單元開始編排目標(biāo)程序例:設(shè)MOVC指令放在3000H處,試用MOVC A , A+ PC 將3041H中的內(nèi)容送入 A中(*)ORG 2FFEHMOV A , #40HMOVC A , A+PCRET例:累加器中的內(nèi)容為一位 BCD 碼,用查表法獲得相應(yīng)的 ASCII 碼INC AMOVC A , A+PCRETTAB:DB 30HDBDB31H32HDB33HDB 39H例:將片外2500H單

12、元中的內(nèi)容壓入堆棧,后彈出到40H單元MOVDPTR , #2500HMOVXA , DPTRMOV20H , AMOVSP , #30HPUSH20HPOP40Hb (*) 、帶進(jìn)位加法 ADDC 例: A=AEH , (20H)=81H CY=1ADDC A , 20H則: CY=1 , Ac=1 ,OV=1 , (A)=30H 多用于多字節(jié)數(shù)的加法運(yùn)算例:有兩個(gè)無符號(hào)16位數(shù)分別存于30H和32H開始的單元中,設(shè)(30H)=AFH,(31H)=0AH,(32H)=90H,(33H)=2FH ,高字節(jié)在高地址單元,低字節(jié)在低地址單元,算兩數(shù)之和并存入32開始的單元中CLR CMOV R0

13、, #32HMOV A , 30H ADD A , R0MOV R0 , A MOVA , 31HR0A , R0 R0 , A例:設(shè)計(jì)一個(gè) BCD 加法程序, 設(shè)被加數(shù)放在 32H , 31H , 30H 中,加數(shù)放在 42H , 41H , 40H 中,和放在 32H , 31H ,INCADDCMOV30H 中CLR CMOV R0 , #30HMOV R1 , #40HMOV A , R0ADD A , R1AR0 , AR0DAINCMOVINC R1MOV A , R0ADDC A , R1DAR0 , A R1 R0MOVINCINCMOV A , R0ADDC A , R1DA

14、 A MOV R0 , A END例:把A中的二進(jìn)制數(shù)轉(zhuǎn)換成 BCD碼(三位),要求百位放在 50H,十位,個(gè)位放在51H中 MOV B , #100DIVABMOV50H , AMOVA , BMOVB , #10DIVABSWAPAADDA , BMOV51H , ARET例:實(shí)現(xiàn)一個(gè)流水燈MOV A , #01HTT1: MOV P1 , ALCALL 延時(shí)程序RL ALJMP TT14)減1不為 0轉(zhuǎn)移指令DJNZ Rn , relDJNZ direct , rel源操作數(shù)減 1再送給源操作數(shù),若不為 0,則跳轉(zhuǎn)例:從P1.0輸出15個(gè)方波(*)MOV R2 , #30PULSE:CP

15、L P1.0DJNZ R2 , PULSE 該方波的周期為 6個(gè)機(jī)器周期 例:看看下面的程序段編譯后在存儲(chǔ)器中如何存放A , R2 ;單字節(jié)DPTR , #TBJ3 ;雙字節(jié)A , A+DPTR ;三字節(jié) A+DPTR ;單字節(jié)ORG 8400HMOVMOVMOVCJMPTBJ3:DW PRG0DB PRG1DB PRG2P RGOEQUEQUEQU8450H80HBOHP RG1P RG2END例:晶振頻率12MHz,試編一個(gè)3毫秒延時(shí)子程序解:DELAY: MOV R7,#6D1:MOV R6,#248DJNZ R6,$DJNZ R7,D1RET ;1us例:編制一個(gè)循環(huán)閃爍的程序。;1u

16、s;1us;2us*248=496us;(2us+496us+1us)*6=2.994ms;子程序總延時(shí)=2us+2994us有八個(gè)發(fā)光二極管,每次其中某個(gè)燈閃爍點(diǎn)亮10次后,轉(zhuǎn)移到下一個(gè)燈閃爍10次,循環(huán)不止。本程序的硬件連接如圖所示。當(dāng)P1.i輸出高電平時(shí),LED燈亮,否則不亮其程序如下:MOVSHIFT:LCALLRLSJMPFLASH:MOVA,#01HFLASHASHIFTR2,#0AHFLASH1:MOV P1,ALCALL DELAYMOV P1,#00HLCALL DELAYDJNZ R2,F(xiàn)LASH1RET;燈亮初值;調(diào)閃亮10次子程序;循環(huán)左移一位;循環(huán);閃爍10次計(jì)數(shù);點(diǎn)

17、亮;延時(shí);熄滅;延時(shí);循環(huán)10次C語言databdata idata直接尋址內(nèi)部數(shù)據(jù)存儲(chǔ)區(qū),可位尋址內(nèi)部數(shù)據(jù)存儲(chǔ)區(qū),允許位與字節(jié)混合訪問( 間接尋址內(nèi)部數(shù)據(jù)存儲(chǔ)區(qū),可訪問片內(nèi)全部訪問速度快(128B ),007FH16B)RAM 地址空間(256B ),00FFHp data xdata分頁尋址外部數(shù)據(jù)存儲(chǔ)區(qū)(256B),由MOVX Ri訪問(高位P2) 外部數(shù)據(jù)存儲(chǔ)區(qū)(64KB ),由MOVX DPTR 訪問code代碼存儲(chǔ)區(qū)(64KB )程序由MOVC A+DPTR 訪問C51編譯器會(huì)將其定義在代碼空間或FLASHbdata、idata比訪問片外數(shù)存相對要快一些,因此,可將經(jīng)常使用的變量置

18、于片當(dāng)使用code存貯類型定義數(shù)據(jù)時(shí),訪問片內(nèi)數(shù)據(jù)存貯器data、內(nèi)數(shù)存例:” helP ”,oxff;code uchar table =1,2,3,idata uint temp;等價(jià)盡量用后一種靜態(tài)變量data char var; /char data var;static un sig ned long xdata array100;extern float idata x,y, z; 模塊化編程uint p data dime nsion;uchar xdata vector 1044;char bdata flags;位變量(bit)及其Cx51定義bit類似于unsigned i

19、nt等,用來說明變量類型一、定義位變量1、bitcheck_bit ; /* 將變量 check_bit 定義為 位變量 */ 位變量總位于 8051內(nèi)部 RAM 中(*)bdatabitdisplay_flag ; /*正確 */databitdisplay_flag ; /*正確 */idatabitdisplay_flag ; /*正確 */bit display_flag ; /* 存儲(chǔ)模式為 small ,正確 */pdatabitdisplay_flag ; /*錯(cuò)*/staticbitdisplay_flag ; /*正確 */externbitdisplay_flag ; /*

20、正確*/bit*bptr ; /*錯(cuò)*/bit b_array3; /* 錯(cuò)*/ 注:位變量不能定義成一個(gè)指針和數(shù)組 5.2.1 指針的基本概念 P76變量的指針就是變量的地址。指向變量的指針變量: 若有一個(gè)變量專門來存放另一個(gè)變量的地址, 則該變量稱為指向變量的指針變量。1 、指針變量的定義類型標(biāo)示符 * 指針變量名例:int *ap ; /*定義ap為指針變量,指向整型變量 */2、指針變量的引用( * )int a; int *ap ; ap=&a ; /*ap 指向變量 a,& 為取地址符 */指針運(yùn)算符“ * ”,*ap和a等價(jià)*ap表示ap所指向的變量x=*ap ;/*ap 所指向

21、的變量賦值給 x*/ *ap=0xff ; /*a=0xff*/關(guān)于KEIL C51的指針類型支持“基于存貯器的”指針和“一般”指針兩種類型?;诖尜A器的指針c源代碼中的存儲(chǔ)在編譯時(shí)一般被 “行內(nèi) ”編碼,無須庫調(diào)用。即指針?biāo)傅膶ο笏诘拇鎯?chǔ)空間由定義時(shí) 器類型決定。該指針只需12字節(jié)一般指針一般指針包括 3個(gè)字節(jié)。 2字節(jié)偏移(即指針的地址)和1字節(jié)存儲(chǔ)器類型。為了表示這種指針必須用長整數(shù)來定義存貯類型。第二列指出指針變量存放在何處,缺省時(shí)決定于編譯用存儲(chǔ)模式 第四列指明指針?biāo)傅膶ο蟠娣旁诤翁?,缺省時(shí)為三字節(jié)的通用指針。1、基于存貯器的指針1至2字節(jié)由C源代碼中的存貯類型決定。用這種指針

22、可高效訪問對象且只需1 個(gè)字節(jié) idata*, data *,pdata* 2個(gè)字節(jié) code *,xdata* 例: char xdata *px其中,xdata為指針指向的對象變量定位存儲(chǔ)空間,指針長度為2個(gè)字節(jié),所指的對象是個(gè)字符型,指針自身在默認(rèn)存儲(chǔ)器區(qū)(決定于編譯模式)char idata *px ;所指的對象變量在 idata中,指針為 1個(gè)字節(jié)data char xdata *px;除指明指針?biāo)笇ο笤趚data中,還指明指 針自身存放在data中char xdata *data px;與上式等價(jià)般指針即定義時(shí)未指明所指對象的存儲(chǔ)空間 共3字節(jié):1個(gè)存放存儲(chǔ)器類型,2個(gè)存放地址偏

23、移量存儲(chǔ)器類型編碼(*)指針對比一般指針和基于存儲(chǔ)器的指針,可得出以下結(jié)論:基于存儲(chǔ)器的指針長度短,運(yùn)行速度快。而一般指針由于其所指對象變量的存儲(chǔ)器空間位置只有在運(yùn)行期間 才能確定,編譯器在編譯期間無法優(yōu)化存儲(chǔ)方式,必須生成一般代碼以保證能對任意空間的對象進(jìn)行存取, 所以一般指針?biāo)a(chǎn)生的代碼運(yùn)行速度較慢。一般指針可用于存取任何變量而不必考慮變量在AT89C52存儲(chǔ)器空間的位置,函數(shù)可利用一般指針來存取位于任何存儲(chǔ)空間的數(shù)據(jù)。 因此一般指針的兼容性較好。 而基于存儲(chǔ)器的指針?biāo)傅膶ο笥写_定的存儲(chǔ)器空間, 因此缺乏兼容性。10 口注意事項(xiàng)單片機(jī)的并行I/O接口有以下應(yīng)用特性P0,P1,P2,P3作

24、為通用I/O 口使用時(shí),輸入操作是讀引腳狀態(tài);輸出操作是對口的鎖存器的寫入操作,鎖 存器的狀態(tài)立即反映到引腳上。PO 口由于內(nèi)部無上拉P1,P2, P3口作為輸出口時(shí),由于電路內(nèi)部帶上拉電阻,因此無需外接上拉電阻,而 電阻,因此使用它時(shí),必須外接上拉電阻。P0,P1, P2, P3作為通用的輸入口時(shí),必須使電路中的鎖存器寫入高電平“1 ”,使場效應(yīng)管(FET)VF1截止,以避免鎖存器輸出為“0”時(shí)場效應(yīng)管VF1導(dǎo)通使引腳狀態(tài)始終被鉗位在“0”狀態(tài)。P2 口的總線復(fù)用功能,還是 P3 口的第二功能復(fù)用,單片機(jī)會(huì)自動(dòng)選擇,P0、注意事項(xiàng) I/O 口功能的自動(dòng)識(shí)別。無論是 不需要用戶通過指令選擇。讀

25、-改-寫”操作和讀引腳的操作。在單片機(jī)中,有些指令是讀端口/復(fù)位指令、條件轉(zhuǎn)移指令以及將I/O 口作為目的地址的操作指令;有兩種讀端口的方式。包括端口鎖存器的 鎖存器的,如一些邏輯運(yùn)算指令、置位 些指令是讀引腳的,如以I/O 口作為源操作數(shù)的指令。I/O 口的驅(qū)動(dòng)特性。P0口每一個(gè)I/O 口可驅(qū)動(dòng)8個(gè)LSTTL輸入,而P1、P2、P3 口每一個(gè)I/O 口可驅(qū)動(dòng)4個(gè)LSTTL 輸入。在使用時(shí)應(yīng)注意口的驅(qū)動(dòng)能力。中斷引起CPU中斷的根源,稱為中斷源。中斷源向CPU提出的中斷請求。CPU暫時(shí)中斷原來的事務(wù) A,轉(zhuǎn)去處理事件B。對事件B處理完畢后,再回到原來被中斷的地方(即斷點(diǎn)),稱為中斷返回。實(shí)現(xiàn)上

26、述中 斷功能的部件稱為中斷系統(tǒng)(中斷機(jī)構(gòu))。二、89C52中斷系統(tǒng)的結(jié)構(gòu)89C52的中斷系統(tǒng)有6個(gè)中斷源,2個(gè)優(yōu)先級(jí),可實(shí)現(xiàn)二級(jí)中斷嵌套。T2中斷T2中斷(TF2 T2CON.7),片內(nèi)定時(shí)/計(jì)數(shù)器T2溢出中斷請求標(biāo)志,當(dāng)定時(shí) /計(jì)時(shí)器T2發(fā)生溢出時(shí),置位 TF2, 并向CPU申請中斷。二、中斷請求標(biāo)志寄存器(*)1、TCON的中斷標(biāo)志TF1,TF0,IE1,IE0在有中斷請求時(shí)硬件自動(dòng)置“ 1 ”,其中,TF1,TF0在中斷被響應(yīng)后硬件自動(dòng)清零。IE1,IE0在外部中斷為跳變觸發(fā)方式時(shí),被響應(yīng)后由硬件自動(dòng)清零,若為電平觸發(fā)方式,響應(yīng)后不會(huì)自動(dòng)清 零。lEO和IE1類似,ITO和IT1類似以I

27、T1為例:IT1=1 (軟件置 1)時(shí),則外部中斷為跳變觸發(fā)方式。在每個(gè)機(jī)器周期采樣 /INT1 (P3.3 )的輸入電平,若 一個(gè)周期內(nèi)為高電平,下一個(gè)周期為低,則硬件置 IE1 為“1 ”,提出中斷申請;IT1=O 時(shí),則 /INT1 為電平觸發(fā),即是通過檢測 P3.3 的輸入電平(低電平)來觸發(fā)的,此時(shí) IE1 由硬件置 1。 即只要輸入到/INT1的外部中斷源為低電平,且IT1=0,則/INT1就已經(jīng)向CPU提出中斷申請,它應(yīng)始終 保持低電平,直到中斷被響應(yīng),且應(yīng)在中斷返回前變回高電平,否則會(huì)再次中斷。CPU 響應(yīng)外部中斷( /INTO , /INT1 )觸發(fā)方式的確定及注意事項(xiàng) 若外

28、部信號(hào)為一個(gè)頻率信號(hào),要求每個(gè)頻率均有中斷,外部中斷應(yīng)定義為跳變式觸發(fā)。 若外部中斷要求為低電平時(shí)申請中斷,則外部中斷應(yīng)定義為低電平觸發(fā)方式。在電平觸發(fā)方式中, 中斷時(shí),不會(huì)消除 IE1 標(biāo)志。注:低電平持續(xù)時(shí)間 中斷服務(wù)程序執(zhí)行時(shí)間否則會(huì)再次引發(fā)中斷。若外部中斷定義為電平觸發(fā)方式, 中斷標(biāo)志位的狀態(tài)隨 CPU 在每個(gè)機(jī)器周期采樣到的外部中斷輸入引腳 的電平變化而變化,這樣能提高 CPU 對外部中斷請求的響應(yīng)速度。但外部中斷源若有請求,必須把有效的低 電平保持到請求獲得響應(yīng)時(shí)為止,不然就會(huì)漏掉;而在中斷服務(wù)程序結(jié)束之前,中斷源又必須撤消其有效的 低電平,否則中斷返回之后將再次產(chǎn)生中斷。2、SC

29、ON 的中斷標(biāo)志清TI:在中斷服務(wù)程序中寫入:CLR TI或 ANL SCON , #OFDH清RI :在中斷服務(wù)程序中寫入:CLR RI或 ANL SCON , #OFEH一、中斷允許控制CPU對中斷系統(tǒng)所有中斷以及某個(gè)中斷源的開放和屏蔽是由中斷允許寄存器IE控制的。系統(tǒng)復(fù)位后,IE各位均為0,即禁止所有中斷。IE寄存器可進(jìn)行字節(jié)尋址,也可進(jìn)行位尋址。 例:允許TO中斷,其他所有中斷均禁止1)SETB ET0CLR EX1CLR ET1CLR EXOCLR ESCLR ET2 SETB EA2) MOV IE , #82H二、中斷優(yōu)先級(jí)控制89C52 單片機(jī)有兩個(gè)中斷優(yōu)先級(jí),即可實(shí)現(xiàn)二級(jí)中斷

30、服務(wù)嵌套。每個(gè)中斷源的中斷優(yōu)先級(jí)都是由中斷優(yōu)先級(jí)寄存器IP中的相應(yīng)位的狀態(tài)來規(guī)定的。復(fù)位后,IP各位均為0,即所有的都是低優(yōu)先級(jí)中斷,IP可進(jìn)行字節(jié)尋址和位尋址。例:定義外部中斷源INTO為最高級(jí),其他為低級(jí),初始化如下 1 )SETB PXOCLR PTOCLR PX1CLR PT1CLR PSCLR PT22)MOV IP , #01H同一優(yōu)先級(jí)中的中斷申請不止一個(gè)時(shí),則有中斷優(yōu)先權(quán)排隊(duì)問題。同一優(yōu)先級(jí)的中斷優(yōu)先權(quán)排隊(duì),由中斷系統(tǒng)硬件確定的自然優(yōu)先級(jí)形成,其排列如所示:T2的優(yōu)先級(jí)最低,它的入口地址為002BH89C52單片機(jī)的中斷優(yōu)先級(jí)有三條原則: 中斷服務(wù)的進(jìn)入:CPU執(zhí)行程序過程中,

31、在每個(gè)機(jī)器周期的S5P2期間,中斷系統(tǒng)對各個(gè)中斷源進(jìn)行采樣。這些采樣值在下一個(gè)機(jī)器周期內(nèi)按優(yōu)先級(jí)和內(nèi)部順序被依次查詢。如果某個(gè)中斷標(biāo)志在上一個(gè)機(jī)器周期的S5P2時(shí)被置成了 1,那么它將于現(xiàn)在的查詢周期中及時(shí)被發(fā)現(xiàn)。接著CPU便執(zhí)行一條由中斷系統(tǒng)提供的硬件LCALL指令,轉(zhuǎn)向被稱作中斷向量的特定地址單元,進(jìn)入相應(yīng)的中斷服務(wù)程序。遇以下任一條件,硬件將受阻,不產(chǎn)生LCALL指令:CPU正在處理同級(jí)或高優(yōu)先級(jí)中斷; 當(dāng)前查詢的機(jī)器周期不是所執(zhí)行指令的最后一個(gè)機(jī)器周期。即在完成所執(zhí)行指令前,不會(huì)響應(yīng)中斷,從而保 證指令在執(zhí)行過程中不被打斷; 正在執(zhí)行的指令為RETI或任何訪問IE或IP寄存器的指令。即

32、只有在這些指令后面至少再執(zhí)行一條指令時(shí)才能 接受中斷請求。二、中斷響應(yīng)時(shí)間中斷服務(wù)程序的最后一條指令必須是RETI復(fù)位是單片機(jī)最優(yōu)先的中斷中斷入口地址處安排一條跳轉(zhuǎn)指令,以跳到用戶的服務(wù)程序入口,中斷服務(wù)程序也應(yīng)放在 在主程序開始對中斷進(jìn)行初始化中斷時(shí)硬件自動(dòng)保護(hù)斷點(diǎn),但不自動(dòng)保護(hù)現(xiàn)場,軟件人員要保護(hù)現(xiàn)場,恢復(fù)現(xiàn)場。注:1)2)0030H 后。3)4)5) 5.5CX51中斷函數(shù)Cx51編譯器支持在C源程序中直接開發(fā)中斷程序函數(shù)定義語法如下:in terr uptn返回值 函數(shù)名 其中:n的對應(yīng)關(guān)系為定時(shí)器/計(jì)數(shù)器0定時(shí)器/計(jì)數(shù)器15 :定時(shí)器/計(jì)數(shù)器20:外部中斷0;2:外部中斷1 ;4:串

33、行口中斷;定時(shí)器1、工作寄存器:T0、 T1為16位T0分為:TH0 (高8位),TL0 (低8位)T1分為:TH1 (高8位),TL1 (低8位)例:向T0送0FEDHMOV TH0,#0FHMOV TL0,#0EDH例:設(shè)置T1為軟件啟動(dòng),為定時(shí)器工作方式,選擇操作模式2,T0為計(jì)數(shù)方式,軟件啟動(dòng),選擇操作模式1TMOD 各位為:00100101 即 25HMOV TMOD,#25H 或 MOV 89H,#25H6.4 T0,T1編程時(shí)應(yīng)注意的問題一、初始化1、將工作方式控制字寫入 TMOD (確定工作方式,操作方式,啟動(dòng)控制方式)例:T1為16位,/INT1不參與控制,T1為定時(shí)器??刂?/p>

34、字:00010000MOV TMOD , #10H2、將定時(shí)或計(jì)數(shù)初值寫入 THi, TLi 中( 1 6位計(jì)數(shù)初值須分兩次寫入對應(yīng)的計(jì)數(shù)器) 例: MOV TH1 , #55HMOV TL1 , #00H3、置ET1/ET0允許T1/T0申請中斷例:SETB ET0 ;允許T0中斷4、置EA,CPU對所有中斷開放SETB EA5、啟動(dòng) T1 或 T0( *)SETB TR1SETB TR0二、初值計(jì)算T0,T1 選擇不同的工作方式,不同的操作方式,其初值均不相同。設(shè)最大計(jì)數(shù)值為 為:方式 0:方式 1 :方式 2:方式 3:M=2 13=81 92M=2 16=65536M=2 8=256M

35、=256 ( T0 分為 TH0 和 TL0,其 M 均為 256)設(shè)計(jì)數(shù)初值為X,則X=M-計(jì)數(shù)值1、計(jì)數(shù)工作方式 脈沖由外部引入,對外部脈沖計(jì)數(shù),計(jì)數(shù)值根據(jù)要求確定。計(jì)數(shù)初值 例:某工序要求對外部脈沖信號(hào)計(jì) 100 次X=M-100若為方式 2,則 X=256-100=1562、定時(shí)工作方式( *) 計(jì)數(shù)脈沖由內(nèi)部供給(相當(dāng)于對機(jī)器周期計(jì)數(shù)), 計(jì)數(shù)脈沖頻率 fcont= 晶振頻率 fosc/12 所以:計(jì)數(shù)周期 T=12/fosc ,即每個(gè)脈沖的時(shí)間為 12/fosc 若要求的定時(shí)時(shí)間為t,則此時(shí)計(jì)數(shù)初值X=M-t/T=M-t/ ( 1 2/fosc )=M-t*fosc/12例:設(shè)T0

36、為計(jì)數(shù)器,1ms時(shí)時(shí)間為解:T0 :計(jì)數(shù)器,T1 :定時(shí)器,方式方式M,則各方式下的M值X=M- 計(jì)數(shù)值以方式 2工作,外界發(fā)生一次事件,溢出中斷;T1 作為定時(shí)器,以操作方式 1工作,定(即延時(shí) 1ms 后就申請中斷),晶振頻率為 6MHZ ,計(jì)算 T0, T1 的計(jì)數(shù)初值。2, X0=256-1=255=FFH1 , 1msX1=65536-1ms*6*106/12=65536-1*10 3/2=65536-500=65036=FE0CH三、初始化舉例( *)設(shè)T1為定時(shí)工作方式,定時(shí) 50ms,選擇方式1,允許中斷,軟啟動(dòng);TO為計(jì)數(shù)工作方式,對外部脈沖計(jì)數(shù)10次,硬啟動(dòng),禁止中斷,選擇

37、工作方式2 ;fosc=6MHZ解:TO : X0=256-10=246=F6HT1 : X1=65536-50ms*6M/12=65536-25000 =40536=9E58HTMOD=00011110=1EH初始化程序如下:MOV TMOD, #1EHMOV THO, #OF6HMOV TLO, #OF6HMOV TH1, #9EHMOV TL1, #58HMOV IE , #88HSETB TRO; 要等到 /INTO=1 時(shí)方可真正啟動(dòng)SETB TR16.5 定時(shí)器的操作方式及應(yīng)用1、方式0及應(yīng)用(僅用了 TH和TL的低5位)(*)例:選用TO,操作方式0,用于定時(shí),由P1.0輸出周期

38、為1ms的方波,設(shè)fosc=6MHZ 解:定時(shí)時(shí)間為500 s初始值 X0=8192-t*fosc/12=8192-250=7942=1F06H但由于是13為定時(shí)器,TLO的高3位未用,則填入0,所以X0的實(shí)際值為F806HORG 8000HMOV TMOD, #00HMOV TL0, #06HMOV TH0, #0F8HSETB TRO ;啟動(dòng)TO,該程序未涉及中斷,所以可以不用設(shè)置 IELP1:JBC TF0, LP2; TF0 只有在申請中斷被響應(yīng)后才會(huì)自動(dòng)清 0,這里不涉及中斷,所以人工清 0AJMP LP1LP2: MOV TL0, #06HMOV TH0, #0F8H CPL P1

39、.0 SJMP LP12、方式 1及應(yīng)用( 16 位)設(shè)單片機(jī)的 fosc=12MHZ ,要求在 P1.0 腳上輸出周期為 2ms 的方波 解:定時(shí)間隔為 1ms ,每次時(shí)間到時(shí), P1.0 取反。機(jī)器周期為1us,所以需計(jì)1000次初值 X=65536-1000采用定時(shí)器 0的方式 1 編程,采用中斷方式。#include sbit p1_O=pUO;void timerO (void) interrupt 1 using 1 p 1_0=! p1_0;TH0=(65536-1000)/256;TL0=(65536-1000)%256;void main (void)TMOD=0x01;p1

40、_0=0;TH0=(65536-1000)/256;TL0=(65536-1000)%256;ET0=1;EA=1;TR0=1; do while(1);4、方式3及應(yīng)用(僅T0有此方式,T1沒有)1 )結(jié)構(gòu)(*)T1的TR1和TF1,占用了 T1的中斷源。THO的啟動(dòng)T0 : TH0( 8位)只用作簡單的內(nèi)部定時(shí)器功能,使用原和關(guān)閉僅受TR1的控制。與GATE無關(guān)。TL0( 8位)使用原T0的各控制引腳如 GATE、TR0、TF0、T0的P3.4引腳及/INTO引腳。TL0除 是8位以外,功能和方式0、1完全相同,可作定時(shí)或計(jì)數(shù)因此,TLO即可作計(jì)數(shù)又可作定時(shí)。THO只做定時(shí)。方式3相當(dāng)于為

41、TO加了一個(gè)8位的定時(shí)器一一THO(*)當(dāng)TO工作在方式3時(shí),T1仍可設(shè)置為方式0、1、2,用在任何無需中斷的場合,可作為定時(shí)或者計(jì)數(shù)使 用。1 )因?yàn)門1的TR1和TF1被TH0占用,所以T1溢出產(chǎn)生中斷時(shí)不能由 TF1發(fā)出,只能從串行口輸出 T1的溢出 信號(hào),所以當(dāng)TO工作于方式3時(shí),T1 一般用作串行口波特率發(fā)生器。2)設(shè)置好工作方式后,T1自動(dòng)開始運(yùn)行(因?yàn)闆]有 TR1 ),若要停止操作,只需送入一個(gè)設(shè)置T1為方式3的模式控制字(因?yàn)榉绞?3下T1不工作),通常把定時(shí)器 T1設(shè)置為方式2作為波特率發(fā)生器。串口計(jì)算機(jī)通信是將計(jì)算機(jī)技術(shù)和通信技術(shù)的相結(jié)合,完成計(jì)算機(jī)與外部設(shè)備或計(jì)算機(jī)與計(jì)算

42、機(jī)之間的信息交 換??梢苑譃閮纱箢悾翰⑿型ㄐ排c串行通信。并行通信通常是將數(shù)據(jù)字節(jié)的各位用多條數(shù)據(jù)線同時(shí)進(jìn)行傳送。串行通信是將數(shù)據(jù)字節(jié)分成一位一位的形式在一條傳輸線上逐個(gè)地傳送。1、異步通信異步通信是指通信的發(fā)送與接收設(shè)備使用各自的時(shí)鐘控制數(shù)據(jù)的發(fā)送和接收過程。為使雙方的收發(fā)協(xié) 調(diào),要求發(fā)送和接收設(shè)備的時(shí)鐘盡可能一致。異步通信是以字符(構(gòu)成的幀)為單位進(jìn)行傳輸,字符與字符之間的間隙(時(shí)間間隔)是任意的,但每 個(gè)字符中的各位是以固定的時(shí)間傳送的,即字符之間是異步的(字符之間不一定有“位間隔”的整數(shù)倍的關(guān) 系),但同一字符內(nèi)的各位是同步的(各位之間的距離均為“位間隔”的整數(shù)倍)。異步通信的數(shù)據(jù)格式:

43、2、同步通信同步通信時(shí)要建立發(fā)送方時(shí)鐘對接收方時(shí)鐘的直接控制,使雙方達(dá)到完全同步。此時(shí),傳輸數(shù)據(jù)的位之間的 距離均為“位間隔”的整數(shù)倍,同時(shí)傳送的字符間不留間隙,即保持位同步關(guān)系,也保持字符同步關(guān)系。發(fā) 送方對接收方的同步可以通過兩種方法實(shí)現(xiàn)。二、串行通信的傳輸方向1 、單工 單工是指數(shù)據(jù)傳輸僅能沿一個(gè)方向,不能實(shí)現(xiàn)反向傳輸。2、半雙工 半雙工是指數(shù)據(jù)傳輸可以沿兩個(gè)方向,但需要分時(shí)進(jìn)行。3、全雙工 全雙工是指數(shù)據(jù)可以同時(shí)進(jìn)行雙向傳輸。三、串行通信的錯(cuò)誤校驗(yàn)1 、奇偶校驗(yàn)在發(fā)送數(shù)據(jù)時(shí),數(shù)據(jù)位尾隨的 1位為奇偶校驗(yàn)位( 1或0)。奇校驗(yàn)時(shí),數(shù)據(jù)中“ 1”的個(gè)數(shù)與校驗(yàn)位“ 1”的個(gè) 數(shù)之和應(yīng)為奇數(shù);

44、偶校驗(yàn)時(shí),數(shù)據(jù)中“ 1”的個(gè)數(shù)與校驗(yàn)位“ 1”的個(gè)數(shù)之和應(yīng)為偶數(shù)。接收字符時(shí),對“ 1” 的個(gè)數(shù)進(jìn)行校驗(yàn),若發(fā)現(xiàn)不一致,則說明傳輸數(shù)據(jù)過程中出現(xiàn)了差錯(cuò)。四、傳輸速率比特率是每秒鐘傳輸二進(jìn)制代碼的位數(shù),單位是:位秒(bps )。如每秒鐘傳送 240個(gè)字符,而每個(gè)字符格式包含 10位(1個(gè)起始位、 1個(gè)停止位、 8個(gè)數(shù)據(jù)位 ),這時(shí)的比特率為:Baud )。10 位X 240 個(gè) /秒=2400 bps 波特率表示每秒鐘調(diào)制信號(hào)變化的次數(shù),單位是:波特(SCON 是一個(gè)特殊功能寄存器,用以設(shè)定串行口的工作方式、接收/發(fā)送控制以及設(shè)置狀態(tài)標(biāo)志:方式0:數(shù)據(jù)從RXD端串行輸出或輸入,TXD端輸出同步信

45、號(hào),波特率固定為fosc/12,此方式以8位數(shù)據(jù)為一幀,無起始位和停止位,先發(fā)送或接收最低位。方式1:發(fā)送或接收一個(gè)字符 10位為一幀,一個(gè)起始位,8個(gè)數(shù)據(jù)位,一個(gè)停止位。所以又稱為10位UART。波特率可變。方式2:每11位為一幀,一個(gè)起始位( 0), 8位數(shù)據(jù)位(低位在先),1位可編程位(即第 9位數(shù)據(jù))和 1位停止位(1)。所以又稱為11位UART。波特率為fosc/64或fosc/32方式 3:與方式 2類似,區(qū)別在于方式 3的波特率可變SM2 ,多機(jī)通信控制位,主要用于方式2和方式 3。當(dāng)接收機(jī)的 SM2=1 時(shí)可以利用收到的 RB8 來控制是否激活RI (RB8 = 0時(shí)不激活RI

46、,收到的信息丟棄; RB8 = 1時(shí)收到的數(shù)據(jù)進(jìn)入 SBUF,并激活RI,進(jìn)而在中斷服 務(wù)中將數(shù)據(jù)從SBUF讀走)。當(dāng)SM2=0時(shí),不論收到的RB8為0和1,均可以使收到的數(shù)據(jù)進(jìn)入 SBUF,并激 活RI (即此時(shí)RB8不具有控制RI激活的功能)。通過控制 SM2,可以實(shí)現(xiàn)多機(jī)通信。RI才置1 。在方式 0時(shí), SM2 必須是 0。在方式 1時(shí),若 SM2=1 ,則只有接收到有效停止位時(shí),REN ,允許串行接收位。由軟件置 REN=1 ,則啟動(dòng)串行口接收數(shù)據(jù);若軟件置 REN=0 ,則禁止接收。TB8 ,在方式 2或方式 3中,是發(fā)送數(shù)據(jù)的第八位,可以用軟件規(guī)定其作用??梢杂米鲾?shù)據(jù)的奇偶校驗(yàn)位,或 在多機(jī)通信中,作為地址幀 /數(shù)據(jù)幀的標(biāo)志位。在方式 0和方式 1中,該位未用。RB8,在方式2或方式3中,是接收到數(shù)據(jù)的第八位, 作為奇偶校驗(yàn)位或地址幀/數(shù)據(jù)幀的標(biāo)志位。在方式1時(shí), 若SM2=0,則RB8是接收到的停止位。PCON中只有一位SMOD與串行口工作有關(guān) :四、波特率的計(jì)算 (*)方式0和方式2的波特率是固定的,而方式 1和方式3的波特率是可變的,由定

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論