微機原理與接口技術實驗_第1頁
微機原理與接口技術實驗_第2頁
微機原理與接口技術實驗_第3頁
微機原理與接口技術實驗_第4頁
微機原理與接口技術實驗_第5頁
已閱讀5頁,還剩31頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、實驗一 存儲器塊操作實驗一、實驗目的1熟悉 KEIL 集成調試環境和匯編程序的調試方法。2掌握存儲器讀寫方法;3了解內存塊的移動方法;二、實驗說明實驗1指定某塊存儲器的起始地址和長度,要求能將其內容賦值。通過該實驗學生可以了解單片機讀寫存儲器的方法,同時也可以了解單片機編程、調試方法。塊移動是單片機常用操作之一,多用于大量的數據復制和圖象操作。例程2 給出起始地址,用地址加一方法移動塊,將指定源地址和長度的存儲塊移到指定目標地址為起始地址的單元中去。移動3000H起始的256個字節到4000H起始的256個字節。3、 源程序代碼源程序1:ORG 0000HSTART EQU 8000HMOV

2、DPTR, #START ;起始地址MOV R0,#0 ; 設置256 字節計數值MOV A,#1HLoop:MOVX DPTR,AINC DPTR ; 指向下一個地址DJNZ R0,Loop ; 計數值減一NOPLJMP $ENDMemory Window初始:運行后:運行結果:外部 RAM8000H80FFH的內容都為1。源程序2:ORG 0000HMOV DPTR,#3000HMOV A,#01HMOV R5,#0LOOP: MOVX DPTR,AINC DPTRDJNZ R5,LOOPMOV R0,#30HMOV R1,#00HMOV R2,#40HMOV R3,#00HMOV R7,

3、#0LOOP1: MOV DPH,R0MOV DPL,R1MOVX A,DPTRMOV DPH,R2MOV DPL,R3MOVX DPTR,AINC R1INC R3DJNZ R7,LOOP1LJMP $ENDMemory Window初始:運行程序后:運行結果:3000H 起始的256 個字節存儲塊與4000H 起始的256 個字節存儲塊各單元內數據對應相同。4、 思考題1、如何將存儲器塊的內容置成某固定值(例全填充為0FFH)? 請用戶修改程序,完成此操作。將源程序1修改為:ORG 0000HSTART EQU 8000HMOV DPTR, #START ;起始地址MOV R0,#0 ;

4、設置256 字節計數值MOV A,#0FFH; 將累加器賦值為0FFHLoop:MOVX DPTR,AINC DPTR ; 指向下一個地址DJNZ R0,Loop ; 計數值減一NOPLJMP $ENDMemory Window初始:運行程序后:2、 若源塊地址和目標塊地址有重疊,該如何避免? 將源塊地址和目標塊地址重疊部分數據壓制堆棧中,當要使用重疊部分源數據時, 直接從堆棧中彈出。5、 實驗內容1、試編程將片內 RAM 中的數據依次復制到片外RAM。假設源數據區的首地址為40H,目的數據區的首地址為1000H,數據塊長度為10H。源程序:ORG 0000HMOV R0,#40HMOV DP

5、TR,#1000HMOV R1,#10HLOOP: MOV A,R0MOVX DPTR,AINC R0INC DPTRDJNZ R1,LOOPSJMP $ENDMemory Window初始:程序運行后:程序運行結果正確。2、 兩個 16 位無符號二進制數分別存放在片外RAM 首址為2000H 和2002H 單元內,將它們相加,結果存入片內RAM 30H(低8 位)、31H(高8 位)。 源程序:ORG 0000HMOV DPTR ,#2000HMOVX A,DPTRMOV R0,A MOV DPTR,#2002HMOVX A,DPTRADD A,R0MOV 30H,AMOV DPTR,#20

6、01HMOVX A,DPTRMOV R0,AMOV DPTR,#2003HMOVX A,DPTRADDC A,R0MOV 31H,AENDMemory Window初始:運行程序后:2FAFH+067DH=362CH, 36H存于31H(高八位),2CH存于30H(低八位)。程序運行正確。實驗二 數值轉換實驗一、實驗目的1熟悉 KEIL 集成調試環境和匯編程序的調試方法。2掌握簡單的數值轉換算法。3基本了解數值的各種表達方法。4掌握數值的加減法運算。5掌握用查表的方法將 BCD 值轉換成ASCII 值。二、實驗說明 單片機系統內部運算用二進制,而輸入輸出常用十進制,以符合日常習慣,因此,數制轉

7、換是儀表設計中常用的程序之一。 實驗1:單片機中的數值有各種表達方式,這是單片機的基礎。掌握各種數制之間的轉換是一種基本功。我們將給定的一字節二進制數,轉換成二十進制(BCD)碼。將累加器A 的值拆為三個BCD 碼,并存入RESULT 開始的三個單元,例程A 賦值#123。實驗2: 主要讓學生了解數值的BCD 碼和ASCII 碼的區別,利用查表方法快速地進行數值轉換。進一步掌握數值的各種表達方式。現在我們給出一個BCD 數,將其轉換成ASCII 值。如下:將累加器A 的值轉換為二個ASCII 碼,并存入Result 開始的二個單元,例如A 賦值#1AH。3、 源程序代碼源程序1:RESULT

8、EQU 30HORG 0000HLJMP STARTBINTOBCD:MOV B,#100DIV ABMOV RESULT,A ; 除以100 得百位數MOV A,BMOV B,#10DIV ABMOV RESULT+1,A ; 余數除以10 得十位數MOV RESULT+2,B ; 余數為個位數RETSTART:MOV SP,#40HMOV A,#123CALL BINTOBCDLJMP $ENDMemory Window程序結果:運行結果:30H32H 的內容分別為01,02,03。源程序2:RESULT EQU 30HORG 0000HLJMP STARTASCIITAB:DB 0123

9、456789ABCDEF; 定義數字對應的ASCII 表BCDTOHEX:MOV DPTR,#ASCIITABMOV B, A ; 暫存ASWAP AANL A,#0FH ; 取高四位MOVC A,A+DPTR ; 查ASCII 表MOV RESULT, AMOV A, B; 恢復AANL A,#0FH ; 取低四位MOVC A,A+DPTR ; 查ASCII 表MOV RESULT+1,ARETSTART:MOV SP,#40HMOV A,#1AHCALL BCDTOHEXLJMP $ENDMemory Window運行結果:運行結果:30H、31H 單元的結果分別為31、41。4、 思考題

10、1、BCD 碼轉換成二進制數的算法是什么?例如:(91)BCD 對應的二進制數是多少? 將BCD碼寫成權值相加的形式,再將各位轉化為二進制。 (91)BCD= =91,轉化為二進制為1011011B五、實驗內容1. 把 R3 中的8 位二進制整數轉換為壓縮BCD 碼,存放在R4R5 中。 源程序: ORG0000HMOVR3,#116MOVB, #100MOVA,R3DIVABMOVR4,AMOVA,BMOVB,#10DIVABSWAP AADDA, BMOVR5, AEND運行結果:R4、R5寄存器的值分別為1H、16H。2. 設 4 位BCD 碼abcd 依次存放在內部RAM 中50H53

11、H 單元的低4 位,(高4位為0)。試編程將其轉換成二進制數并存入R6R7 中。ORG 0000HLJMP DTBORG 0100HDTB: MOV R0,#50H ;R0指向千位地址MOV R1,#3 ;循環次數送R1MOV R6,#0 ;R6清零MOV A,R0 ;取千位數送AMOV R7,A ;暫存R7LOOP:MOV A,R7 MOV B,#10 MUL AB ;R7*10MOV R7,AMOV A,BXCH A,R6MOV B,#10MUL AB ;R6*10,結果為1個字節ADD A,R6MOV R6,AINC R0 ;取下一位BCD數MOV A,R7 ;與R6R7相加,和送回R6

12、R7ADD A,R0 MOV R7,AMOV A,R6ADDC A,#0MOV R6,ADJNZ R1,LOOP ;若未完成,則LOOPENDMemory Window初始:運行程序后:運行結果:4 位BCD 碼5421轉換成二進制數并存入R6R7 中,其中R6=0x15(高八位),R7=0x2D(低八位)。 實驗三 程序跳轉表實驗一、實驗目的1熟悉 KEIL 集成調試環境和匯編程序的調試方法。2了解簡單的函數計算。3掌握多分支結構程序的編程方法。二、實驗說明多分支結構是程序中常見的結構,在多分支結構的程序中,能夠按調用號執行相應的功能,完成指定操作。若給出調用號來調用子程序,一般用查表方法,

13、查到子程序的地址,轉到相應子程序。三、實驗內容源程序:ORG 0000HMOV A,R0MOV B,#2JNB ACC.7,FUNC1CPL AADD A,#1CLR CRRC ACPL AADD A,#1MOV 30H,ALJMP FINALFUNC1:JNZ FUNC2MOV 30H,#2LJMP FINALFUNC2:MOV B,#2MUL ABMOV 30H,AFINAL:LJMP $END當x>0時:R0=4 結果:30H=08H=2x當x=0時:R0=0 結果:30H=02H=2當x<0時:R0=0FCH=-4 結果:30H=FEH=x/2=-2四、思考題1寫跳轉程序時

14、要注意些什么? 寫跳轉程序時,應該要注意跳轉條件,不同分支的跳轉條件應該是獨立不重復的。2跳轉的作用有哪些? 跳轉程序可以應用于有條件判定的程序;使程序編寫更靈活實驗四 數據排序實驗一、實驗目的1熟悉 KEIL 集成調試環境和匯編程序的調試方法。2掌握排序程序的設計方法。二、實驗說明本例程采用交換排序法將內部RAM 中的5059H 單元中的10個單字節無符號二進制數按從小到大的次序排列,并將這一列排序后的數據從小到大依次存貯到外部RAM 1000H開始處。三、實驗步驟 1啟動 PC 機,打開KEIL 軟件,軟件設置為模擬調試狀態。在所建的Project 文件中添加“TH6_數據排序.ASM”文

15、件,閱讀、分析、理解程序,編譯無誤后進入仿真環境。2在 VIEW 菜單中打開MEMORY WINDOW 數據窗口,分別觀察50H(在MEMORY#1 中輸入D:50H)、1000H(MEMORY#2 窗口輸入X:1000H)。3可在程序指令NOP 處設置斷點,在第一個斷點處可觀察5059H 單元內容是否為10 個任意排列原始數據;在第二個斷點處可觀察每次排序的結果。4 可單步執行程序觀察排序過程。4、 流程圖 NYNYYNSTOP(R1)=A,R1=R1+100H=1?R7=R7-1=0?A-R0>0?R6=#09, R1=#50HR7=R6,R0=#50H.A=(R0)輸入數據R6=R

16、6-1?輸出序列Y二、硬件實驗實驗一 I/O口控制實驗一、實驗目的1、學習P1口的使用方法;2、學習延時子程序的編寫和使用;二、實驗說明P1口是準雙向口,它作為輸出口時與一般的雙向口使用方法相同。由準雙向口結構可知當P1口用作輸入口時,必須先對口的鎖存器寫“1”,若不先對它寫“1”,讀入的數據可能是不正確的。三、思考題對于本實驗延時子程序Delay: MOV R6,0MOV R7, 0DelayLoop:DJNZ R6,.DelayLoopDJNZ R7,DelayLoopRET本模塊使用12MHz 晶振,粗略計算此程序的執行時間為多少?執行時間:(1+1+(256*2+2)*256+2) u

17、s=0.131588s四、實驗內容1. 編寫程序,使發光二極管沿一個方向循環點亮。 ORG 0000HLOOP: MOV A,#0FEH MOV R2,#8OUT:MOV P1,ARL AACALL DELAYDJNZ R2,OUTLJMP LOOPDELAY:MOV R6,#0MOV R7,#0LOOP1:DJNZ R6,LOOP1DJNZ R7,LOOP1RETEND 2. 改變發光二極管移動步長、方向和時間。ORG 0000HLOOP:MOV A,#0FEHMOV R2,#8OUT:MOV P1,ARR A ;改變發光二極管移動步長與方向RR AACALL DELAYDJNZ R2,OU

18、TLJMP LOOPDELAY:MOV R6,#321 ;改變發光時間MOV R7,#321LOOP1:DJNZ R6,LOOP1DJNZ R7,LOOP1RETEND實驗四 動態掃描顯示實驗一、實驗目的1掌握數字、字符轉換成顯示段碼的軟件譯碼方法;2動態顯示的原理和相關程序的編寫;二、實驗說明動態顯示,也稱掃描顯示。顯示器由8個共陰極LED數碼管構成。單片機P0口輸出顯示段碼,經由一片74LS245 驅動輸出給LED 管,由P1 口輸出位碼,經由74LS06 輸出給LED 管。三、思考題1. 程序停止運行后,顯示隨之變化,為什么? 動態顯示是利用人眼的暫留作用,高頻率的刷新數碼管,其實同一時

19、間,八位數碼管中只有一只是亮的,這一點是動態顯示與靜態顯示最大的區別。當程序停止運行后,八位數碼管中只有一位正常顯示,其余熄滅。四、實驗內容1. 畫出實驗例程的流程圖。2. 如何修改程序,實現八位 LED 數碼管只顯示其中的兩位?根據動態顯示的特性,只需要改變P0、P2口輸出的位碼即可。例如:實現只顯示“168168”第一位數“8”與第三位數“1”,那么位碼P2循環輸出1、100;P0段碼循環輸出“8”、“1”的段碼。 ORG 0000H LJMP disp ORG 0100H disp: MOV 30h,#8 MOV 31h,#6 MOV 32h,#1 MOV 33h,#8 MOV 34h,

20、#6 MOV 35h,#1 MOV R0,#30H MOV R1,#40H MOV R2,#2 MOV DPTR,#SEGTABDP00: MOV A,R0 MOVC A,A+DPTR MOV R1,A INC R1 INC R0 INC R0 DJNZ R2,DP00DISP0: MOV R0,#40H MOV R1,#2 MOV R2,#1 DP01: MOV A,R0 MOV P0,A MOV A,R2 MOV P2,A ACALL DELAY MOV A,R2 RL A RL A MOV R2,A INC R0 DJNZ R1,DP01 SJMP DISP0SEGTAB:DB 3FH,

21、06H,5BH,4FH,66H,6DH ;0,1,2,3,4,5 DB 7DH,07H,7FH,6FH,77H,7CH ;6,7,8,9,A,B DB 58H,5EH,7BH,71H,00H,40H ;C,D,E,F, ,-DELAY: MOV R4,#03HAA1: MOV R5,#0FFHAA: NOP NOP DJNZ R5,AA DJNZ R4,AA1 RET END3. 將顯示改成閃爍顯示模式,頻率約 1Hz。 DBUF EQU 30H TEMP EQU 40H ORG 0000H LJMP disp ORG 0100H disp: MOV 30h,#8 MOV 31h,#6 MOV

22、 32h,#1 MOV 33h,#8 MOV 34h,#6 MOV 35h,#1 MOV R0,#DBUF MOV R1,#TEMP MOV R2,#6 MOV DPTR,#SEGTABDP00: MOV A,R0 MOVC A,A+DPTR MOV R1,A INC R1 INC R0 DJNZ R2,DP00 MOV R7,#1BH MOV R2,#1DISP0: MOV R0,#TEMP MOV R1,#6 DP01: MOV A,R0 MOV P0,A MOV A,R2 MOV P2,A ACALL DELAY MOV A,R2 RL A MOV R2,A INC R0 DJNZ R1

23、,DP01 DJNZ R7,DIPS0 MOV R7,#1BH CJNE R2,#20H,L1 MOV R2,#0 AJMP DISP0 L1:MOV R2,#1 AJMP DIPS0SEGTAB:DB 3FH,06H,5BH,4FH,66H,6DH ;0,1,2,3,4,5 DB 7DH,07H,7FH,6FH,77H,7CH ;6,7,8,9,A,B DB 58H,5EH,7BH,71H,00H,40H ;C,D,E,F, ,-DELAY: MOV R4,#03HAA1: MOV R5,#0FFHAA: NOP NOP DJNZ R5,AA DJNZ R4,AA1 RET END1、 數碼

24、管動態顯示,加粗部分是在相對實驗例程變化部分;2、 實現顯示改成閃爍顯示模式,頻率約 1Hz,需要限定程序刷新六位數碼管的次數;DELAY子程序延時3065us,一次刷新六位數碼管,時長0.01839s;考慮頻率要求為1HZ,0.5s點亮,0.5s暗,這樣就要求DISP0循環0.5/0.01839=27次,所以將賦R7為1BH.3、 DISP0循環結束后,通過比較R2,判斷接下來0.5s數碼管是亮還是暗;如果R2=20H,則接下來0.5s暗;反之,點亮。實驗五 查詢式鍵盤實驗一、實驗目的1、掌握鍵盤和顯示器的接口方法和編程方法;2、掌握鍵盤和八段碼顯示器的工作原理;3、掌握靜態顯示的原理和相關

25、程序的編寫;二、實驗說明實驗箱提供了8個按鈕的小鍵盤,可接到單片機的并行口,如果有鍵按下,則相應輸出為低,否則輸出為高。單片機通過識別,判斷按下什么鍵。有鍵按下后,要有一定的延時,防止由于鍵盤抖動而引起誤操作。三、思考題1程序如何確保每按一次鍵,只處理一次。程序在處理前與處理后,均有消除抖動的模塊K00、K03,使得在一定延時后,去除兩邊可能發生抖動的時間,再進行查表鍵值和顯示的操作,以保證每一次按鍵都能獨立出來,不受兩邊抖動的干擾,實現只處理一次。2 動態掃描和靜態掃描有什么區別? 靜態顯示:各數碼管在顯示過程中持續得到送顯信號,與各數碼管接口的I/O口線是專用的。其特點是顯示穩定,無閃爍,

26、用元器件多,占I/O線多,無須掃描。系統運行過程中,在需要更新顯示內容時,CPU才去執行顯示更新子程序,節省CPU時間,提高CPU的工作效率,編程簡單。 動態顯示:一位一位地輪流點亮每位顯示器,與各數碼管接口的I/O口線是共用的。其特點是有閃爍,用元器件少,占I/O線少,必須掃描,花費CPU時間,編程復雜。四、實驗內容試設計長按功能,當按鍵時間長于3 秒時,個位上的數字以一定速率增加,直至按鍵釋放。說明:利用動態顯示模塊,記錄按鍵次數。 DBUF EQU 30HTEMP EQU 40HORG 0000HLJMP STARTORG 0100HSTART: MOV A,#10HMAIN: ACAL

27、L KEYAJMP MAINKEY: MOV P1,#0FFHMOV A,P1CJNE A, #0FFH, K00AJMP KEYK00: ACALL DELAYMOV A,P1CJNE A,#0FFH,K01AJMP KEYK01: MOV R3,#8MOV R2,#0MOV B,AMOV DPTR,#K0TABK02: MOV A,R2MOVC A,A+DPTRCJNE A,B,K04K03: MOV A,P1CJNE A,#0FFH,K03ACALL DELAYMOV R6, #-200WAIT3S:MOV B, P1CJNE A,B,ExitACALL DELAYACALL DELAY

28、ACALL DELAYACALL DELAYACALL DELAYACALL DELAYACALL DELAYACALL DELAYACALL DELAYACALL DELAYDJNZ R6, WAIT3SACALL DELAY; 延時3sK05:MOV A,BRL AMOV R6, #-111WAIT500MS:ACALL DELAYMOV B,AACALL DELAYACALL DELAYMOV A, P1CJNE A,#0FFH,K06LJMP ExitMOV A,BK06:DJNZ R6,WAIT500MS ; 延時500msMOV B, AMOV A, P1CJNE A,#0FFH,

29、K05Exit:RETK04: INC R2DJNZ R3,K02MOV A,#0FFHLJMP MAINK0TAB: DB 0FEH,0FDH,0FBH,0F7HDB 0EFH,0DFH,0BFH,07FHDELAY: MOV R4, #02H ; 大約延時1.5msAA1: MOV R5, #0F8HAA: MOV P2, ADJNZ R5, AADJNZ R4, AA1RETEND實驗六 定時器實驗一、實驗目的1學習 89C51 內部計數器的使用和編程方法;2進一步掌握中斷處理程序的編寫方法;二、實驗說明關于內部計數器的編程主要是定時常數的設置和有關控制寄存器的設置。內部計數器在單片機中

30、主要有定時器和計數器兩個功能。本實驗使用的是定時器,定時為一秒鐘。CPU 運用定時中斷方式,實現每一秒鐘輸出狀態發生一次反轉,即發光管每隔一秒鐘亮一次。定時器有關的寄存器有工作方式寄存器TMOD 和控制寄存器TCON。TMOD 用于設置定時器/計數器的工作方式0-3,并確定用于定時還是用于計數。TCON 主要功能是為定時器在溢出時設定標志位,并控制定時器的運行或停止等。 內部計數器用作定時器時,是對機器周期計數。每個機器周期的長度是12 個振蕩器周期。因為實驗系統的晶振是12MHZ,本程序工作于方式2,即8 位自動重裝方式定時器, 定時器100uS 中斷一次, 所以定時常數的設置可按以下方法計

31、算: 機器周期=12÷12MHz=1uS (256-定時常數)×1uS=100uS 定時常數=156。然后對100uS 中斷次數計數10000 次,就是1 秒鐘。在本實驗的中斷處理程序中,因為中斷定時常數的設置對中斷程序的運行起到關鍵作用,所以在置數前要先關對應的中斷,置數完之后再打開相應的中斷。三、思考題1如何將 LED 的狀態間隔改為2 秒,程序如何改寫?改變定時器的初值,X=56=38H對于指導書給定的程序,只需要改變程序前的偽指令即可實現狀態間隔為2S。Tick EQU 10000T100us EQU 38H2 如果更換不同頻率的晶振,會出現什么現象?如何調整程序?

32、 LED狀態間隔會改變。晶振頻率增大,則LED狀態間隔變小;晶振頻率減小,則LED狀態間隔增大。 如果想保持1s的狀態間隔,那么時間常數要隨著頻率的變化而變化,具體關系如下式:四、實驗內容 用8P 數據線將P1 口(JD1)與JD1A5 相連,編寫程序使8 只發光二極管循環點亮,要求L0L3 之間時間間隔為0.5s,L3L7 之間時間間隔為1s。ORG0000HAJMP MAINORG000BHAJMP IN0MAIN: MOVTMOD,#01H ;T0工作在方式一 MOVR1,#0AH ;中斷次數初值MOVR2,#03HMOVR0 ,#0FEH ;LED顯示MOVTH0,#3CH ;50ms

33、定時MOVTL0,#0B0H SETB CSETBTR0SETBET0SETBEALP1:MOVP1,R0 ;顯示SJMPLP1IN0: MOVTH0,#3CHMOVTL0,#0B0HDJNZR1,RE MOV A , R0RLC AMOV R0 , ADJNZR2, LP4JB P1.3, LP3MOV R1,#14H ;L3L7 之間時間間隔為1sMOV R2,#05HAJMP RELP3:MOV R2,#03H ;L0L3 之間時間間隔為0.5s MOV R1,#0AH LP4: MOV 00H,CMOV A,P1XRL A,#0FFHCJNZ A,#0FHJC LP5 ;L0L2亮,R

34、2賦值#0AH;L3L7亮,R2賦值#14HMOV R2,#14HAJMP LP6LP5:MOV R2,#0AHLP6: MOV C,00HRE:RETI實驗七 計數器實驗一、實驗目的1學習 89C51 內部定時/計數器使用方法;2學習計數器各種工作方式的用法;二、實驗說明 189C51 內部有兩個16位的定時/計數器T0 和T1,16位是指定時/計數器內的計數器是16 位的,由2個8位計數器組成。本實驗用的是T0,它的2 個8 位計數器是TH0 和TL0,TH0 是高8 位,TL0 是低八位。所謂加法計數器,指其計數的方法是對計數脈沖每次加1。在其它單片機和可編程計數器芯片中,有的計數器是減

35、法計數器,如8155 的14 位計數器,8253 的16 計數器,即先設置計數器的初值,然后對計數器脈沖每次減1,減到0,計數器溢出。而8051 內部的計數器是加法計數器,需先設置計數器的初值,本實驗設置計數器初值為0,然后對計數脈沖每次加1,加到計數器滿后溢出。2本實驗中內部計數器起計數器的作用。外部事件計數脈沖由P3.4 引入定時器T0。單片機在每個機器周期采樣一次輸入波形,因此單片機至少需要兩個機器周期才能檢測到一次跳變。這就要求被采樣電平至少維持一個完整的機器周期,以保證電平在變化之前即被采樣。這就決定了輸入波形的頻率不能超過機器周期頻率。三、思考題1由功能、計數啟動條件、重復啟動條件

36、等諸方面比較 80C51 的各種方式。GATEM1M0GATEM1M0(1) GATE=1時,定時器/計數器由外部中斷引腳(高電平)和TRi(高電平)共同啟動;GATE=0,定時器/計數器由TRi(高電平)啟動,TRi低電平停止工作。=0,設置為定時器方式;=1,設置為計數器方式。(2) 定時器/計時器T0、T1的四種工作方式 M1 M0 工作方式 計數器配置及功能簡述重復啟動 0 0 方式013位計數器,TLi只用低5位13位計數器溢出,即TFi=1時,中斷,重復計數 0 1 方式116位計數器16位計數器溢出,即TFi=1時,中斷,重復計數 1 0 方式28位自動重裝計數器,THi的值在計

37、數中不變,TLi溢出時,THi中的值自動裝入TLi中TLi8位計數器溢出,即TFi=1時,中斷,重復計數 1 1 方式3T0分為2個獨立的8位計數器,T1用作波特率發生器TL0八位計數器溢出,則TF0=1時,中斷,TL0重復計數;TH0八位計數器溢出,則TF1=1時,中斷,TH0重復計數289C51 單片機的最高計數頻率為多少?定時器/計數器設置為定時器時,計數頻率為機器頻率;設置為計數器時,兩個機器周期才完成一次采樣,故此時最高的計數頻率為振蕩頻率的1/24。四、實驗內容 統計按鍵次數,在數碼管上顯示出來。1用8P數據線將80C51/C8051F020MCU模塊的 JD1(P1口)、JD2(

38、P2口)與A7區JD1A7、JD2A7(6位數碼管顯示模塊)相連;用導線將80C51/C8051F MCU 模塊的P3.4 與單次脈沖模塊(C8)的任一輸出端相連。2、代碼注釋ORG 0000HLJMP STARTORG 0030HSTART: MOV TMOD, #00000101B MOV TH0, #0MOV TL0, #0SETB TR0 LOOP:ACALL BTD DISP:MOV A,R6ANL A,#0FHMOV 30H,AMOV A,R6SWAP AANL A,#0FHMOV 31H,AMOV A,R5ANL A,#0FHMOV 32H,AMOV A,R5SWAP AANL

39、A,#0FHMOV 33H,AMOV A,R4ANL A,#0FHMOV 34H,AMOV A,R4SWAP AANL A,#0FHMOV 35H,ADISP01:MOV R0,#30HMOV R1,#40HMOV R2,#6MOV DPTR,#TABDP00:MOV A,R0MOVC A,A+DPTRMOV R1,AINC R1INC R0DJNZ R2,DP00 DISP02:MOV R0,#40HMOV R1,#6MOV R2,#1DP01:MOV A,R0MOV P1,AMOV A,R2MOV P2,AACALL DELAYMOV A,R2RL A MOV R2,AINC R0DJNZ

40、 R1,DP01LJMP LOOP TAB:DB 3FH,06H,5BH,4FH,66H,6DHDB 7DH,07H,7FH,6FHDELAY:MOV R4,#03HAA1:MOV R5,#0FFHAA:NOPNOPDJNZ R5,AADJNZ R4,AA1RETBTD:MOV R7,#16CLR AMOV R4,AMOV R5,AMOV R6,AMOV R3,TL0MOV R2,TH0LP1:CLR CMOV A,R3RLC AMOV R3,AMOV A , R2RLC AMOV R2,AMOV A,R6ADDC A,R6DA AMOV R6,AMOV A,R5ADDC A,R5DA AMO

41、V R5,AMOV A,R4ADDC A,R4DA AMOV R4,ADJNZ R7,LP1RETEND 方式1,十六位計數器開始記數將TH0,TL0 16位二進制整數轉化為十進制BCD碼,送入R4R5R6中存入要顯示的數字至30H35H 將所要顯示的數字轉化成段碼指向首位段碼緩存設置顯示位數設置位碼輸出段碼與位碼調用延時子程序位碼左移已刷新六位后,重復程序共陰極數碼管顯示段碼表格延時子程序16位二進制轉化為十進制數子程序實驗十 ADC0809 并行A/D 轉換實驗一、實驗目的1掌握 ADC0809 模/數轉換芯片與單片機的連接方法及ADC0809 的典型應用;2掌握用查詢方式、中斷方式完成模

42、/數轉換程序的編寫方法;二、實例流程圖三、思考題 1、A/D 轉換程序有三種編制方式:中斷方式、查詢方式、延時方式,實驗中使用了查詢方式,請用另兩種方式編制程序。 硬件連接不變,中斷方式時利用EOC輸出的上升沿,經非門變化為下降沿,啟動中斷子程序。 源程序:(數碼管顯示子程序已經省略)查詢方式中斷方式延時方式ORG 0000HLJMP MAINORG 0100HMAIN: CLR ASETB P3.3MOV R0,#DBUFMOV DPTR,#0FE00H NOPNOPMOVX DPTR,AWAIT: JNB P3.3,WAITMOVX A,DPTR MOV R7,ACALL TODISP C

43、ALL DISPLAYCALL delayLJMP MAINORG 0000HSJMP MAINORG 0003HLJMP INTRORG 0100HMAIN: CLR AMOV R0,#DBUFMOV DPTR,#0FE00H NOPNOPSETB IT1SETB EX0SETB EA START:SETB F0MOVX DPTR,AWAIT: JB F0,WAITCALL TODISP CALL DISPLAYCALL delayLJMP MAININTR: MOVX A,DPTRMOV R7,ACLR F0RETIORG 0000HLJMP MAINORG 0100HMAIN: CLR

44、AMOV R0,#DBUFMOV DPTR,#0FE00H NOPNOPMOVX DPTR,AWAIT: ACALL DELAY116usMOVX A,DPTR MOV R7,ACALL TODISP CALL DISPLAYCALL delayLJMP MAINDELAY116us: MOV R4,#39H AA: DJNZ R4,AA RET 轉換時間:當時鐘頻率為640KHZ時,典型值為100us,最大值為116us,所以添加116us的延時子程序。 2、P0 口是數據/地址復用的端口,請說明實驗中ADC0809 的模擬通道選擇開關在利用P0 口的數據口或地址口時,程序指令和硬件連線的關

45、系。 用導線將80C51/C8051F MCU 模塊的WR、RD、P2.0、ALE、P3.3 分別與并行A/D 轉換模塊的WR、RD、CS、CLK、EOC 相連; MOV DPTR,#0FE00H 運行時,P0為地址口,使得ALE=1,鎖存器鎖存A2A1A0低三位地址用于選擇模擬通道; MOVX DPTR,A 運行時,寫,P0為數據口,使得ALE=0,P0口低三位無法進入鎖存器,且此時=0,P2.0=0,或非邏輯之后將START、ALE置1,A/D啟動。 MOVX A,DPTR 運行時,讀,P0為數據口,使得ALE=0,=0,P2.0或非邏輯后將OE置1,ADC0809輸出轉換結果。 P0口在

46、地址口與數據口之間不停轉換,使得ALE可以直接作為時鐘信號接在ADC0809的clk引腳。四、實驗內容1試用中斷方式改寫 A/D 轉換程序。2對每 10 次采到的值求均值并顯示。源程序(省略數碼管顯示子程序)注釋ORG 0000HSJMP MAINORG 0003HLJMP INTRORG 0100H MAIN: MOV R2,#00H MOV R3,#00H MOV R4,#0AHCLR AMOV R0,#DBUFMOV DPTR,#0FE00H NOPNOPSETB IT1SETB EX0SETB EA START:SETB F0MOVX DPTR,AWAIT: JB F0,WAIT DJNZ R4,START ACALL DIV

溫馨提示

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

評論

0/150

提交評論