北京工業大學8051單片機實驗報告_第1頁
北京工業大學8051單片機實驗報告_第2頁
北京工業大學8051單片機實驗報告_第3頁
北京工業大學8051單片機實驗報告_第4頁
北京工業大學8051單片機實驗報告_第5頁
免費預覽已結束,剩余22頁可下載查看

下載本文檔

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

文檔簡介

1、8051單片機實驗報告專業:電子科學與技術姓名:學號: 120231指導教師:金冬月第一單元單片機程序調試環境使用及弁行數據傳送操作訓練1-1修改例程一的源程序:將A寄存器的初值改為 80H (正邏輯,數據位為1表示發光二極管點亮)源程序進行簡單修改,使程序運行后發光二極管點亮情況與修改前相同。$include (C8051F020.inc);C8051F02x偽指令LCALL Init_Device MOV A,#080HCPL AMOV P3,ALOOP: CALL DELAYCALL DELAYCALL DELAYCALL DELAYCALL DELAYRR AMOV P3,AAJMP

2、LOOP ;DELAY: MOV R5,#0HD1:MOV R6,#0HDJNZ R6,$DJNZ R5,D1 RET $include (Init_Device.inc)END,再對系列單片機信息頭文件包含調用初始設置子程序賦初始值并在發光二極管上顯示該數值;A寄存器內容右移1位并送發光二極管顯示無限循環;延時子程序;初始設置子程序文件包含偽指令將LED向左循環移位點亮改為向右循環移位點亮$include (C8051F020.inc)偽指令LCALL Init_DeviceMOV A,#07FHMOV P3,ALOOP: CALL DELAYCALL DELAYCALL DELAYCALL

3、 DELAYCALL DELAYRL AMOV P3,AAJMP LOOP ;C8051F02x系列單片機信息頭文件包含調用初始設置子程序賦初始值并在發光二極管上顯示該數值;A寄存器內容右移1位并送發光二極管顯示無限循環延時子程序DELAY: MOV R5,#0H5;初始設置子程序文件包含偽指令(刪除幾個延遲指令!);C8051F02x系列單片機信息頭文件包調用初始設置子程序賦初始值并在發光二極管上顯示該數值;A 寄存器內容右移1位并送發光二極管無限循環;延時子程序;初始設置子程序文件包含偽指令0-9的循環顯示。;段碼0-7;段碼8-F;操作數據初始值D1:MOVR6,#0HDJNZ R6,$

4、 DJNZ R5,D1 RET $include (Init_Device.inc)END加快LED循環移位點亮的速度。$include (C8051F020.inc) 含偽指令LCALL Init_Device;MOV A,#07FH;MOV P3,A LOOP: CALL DELAY CALL DELAY RRA顯示 MOV P3,A AJMP LOOP ;DELAY: MOV R5,#0H D1:MOV R6,#0HDJNZ R6,$ DJNZ R5,D1 RET $include (Init_Device.inc)END1-2將例程二0-F的循環顯示改為$include (C8051F

5、020.inc)ORG 0000HLJMP INITTAB:DB 0C0H,0F9H,0A4H,0B0H,099H,092H,082H,0F8HDB 080H,090H,088H,083H,0C6H,0A1H,086H,08EHINIT: LCALL Init_DeviceMOV R1,#00HMOV A,R1MAIN:MOV DPTR,#TAB顯示段碼;讀取與A中數值對應的MOVC A,A+DPTRMOV P5ACALL DELAYCALL DELAYCALL DELAYCALL DELAYCALL DELAYCALL DELAYCALL DELAYCALL DELAYCALL DELAYC

6、ALL DELAYINC R1MOV A,R1CJNE A, #0AH MAIN.顯示范圍(F)SJMP INITDELAY:MOV R5,#0HD1:MOV R6,#0HDJNZ R6,$DJNZ R5,D1RET$include (Init_Device.inc)END;段碼送并行口 5顯示;操作數據(R1)增1;檢查操作數據是否大于;無限循環;延時子程序實驗2.中斷控制及定時器/計數器操作訓練2-1通過對例程5的程序進行修改和上機調試,改變原程序的功能(1)將KEY2 KEY4的功能對調。(2)每次停下再啟動后,更改發光二極管點亮的循環方向。$include (C8051F020.inc

7、)ORG 0000HLJMP INITIALORG 0013HLJMP STARORG 0003HLJMP STOP;C8051F02x單片機信息頭文件包含偽指令;主程序入口外中斷0服務程序入口,開始鍵(STAR外中斷1服務程序入口停止鍵(STOPORG 0100HINITIAL: LCALL Init_Device調用初始設置子程序MOV P3,#0FFH熄滅全部發光二極管MOV A,#0FFHMOVDPTR,#7F80HMOVX DPTR,A ;清除數碼管2 ( NUM2顯示MOV A,#0FEH點亮發光二極管的初始數據MOV R1,#1H發光二極管點亮位置初值MOVIP,#04H設置IN

8、T0 (開始鍵STAR為高優先級MOV TCON,#05H ;外中斷采用邊沿觸發SETB EX1;INT1 (停止鍵STOP開中斷;開放中斷LOOP:;關閉中斷SETB EALOOP: CLR EARLAMOV P3,AINCR1SETB EA;刷新發光二極管控制數據;發光二極管點亮位置計數值增1;開放中斷LCALL DELAY1 ; 延時LCALL DELAY1CJNE R1,#8,LOOP ;發光二極管點亮位置計數值有效性檢測MOV R1,#0H;發光二極管點亮位置計數值等于8則回0SJMP LOOP ;無限次循環;停止鍵的中斷服務程序STOP: PUSH ACC;保護A寄存器內容MOV

9、A,R1;讀取發光二極管點亮位置計數值MOV DPTR,#TABMOVC A,A+DPTR ;獲取發光二極管點亮位置計數值的顯示段碼MOV DPTR,#7F80HMOVX DPTR,A;發光二極管點亮位置計數值的顯示數據送顯示SETB EX1;INT0 (啟動鍵 STAR開中斷JNZ$;等待重新啟動條件-A=0MOV A,#0FFHMOVX DPTR,ACLR EX1POP ACCCLR IE0;清除數碼管2 (DS2顯示;禁止INT0中斷(避免程序誤動作);恢復A寄存器內容;清除INT1中斷標志(避免程序誤動作)RETI;中斷返回;啟動鍵的中斷服務程序STAR: MOV A,#00H ;設置

10、啟動條件-A=0CLR IE1;清除INT0中斷標志(避免程序誤動作)RETI;中斷返回TAB:DB0C0H,0F9H,0A4H,0B0H,099H;0-4 段碼DB 092H,082H,0F8H,080H;5-8 段碼DELAY1: MOV R6,#0;延時子程序D1:MOV R7,#0DJNZ R7,$DJNZ R6,D1RET初始設置子程序文件包含偽指令$include (Init_Device.inc);2-2修改例程6,將計數范圍由0-F擴展至00-FF (使用定時器/計時器0),并 在2位數碼管上用10進制數顯示計數結果(00-99) 。 16進制一 10進制方法 Hex/10:商

11、=10進制十位,余數=10進制個位$include (C8051F020.inc)DP2EQU07F80HDP1EQU07F90HDP_LEQU30HDP_HEQU31HMAIN:LCALL Init_DeviceMOV TMOD,#00000110BMOV A,#0MOV DP_L,AMOV DP_H,ACALL DISPLAYMOV TL0,#0SETB TR0LOOP:MOV A,TL0CJNE A,#100,L1MOV TL0,#0MOV A,TL0L1:MOV B,#10DIV ABMOV DP_L,BMOV B,#10DIV ABMOV DP_H,BCALL DISPLAYSJMP

12、 LOOPDISPLAY: MOV A,DP_L;使計數器工作在模式 2;顯示計數的低位;顯示計數高位;使TL0的初值為0;啟用定時器0;A不等于100時,轉到L1顯示;當A等于100時,TL0清零;將16進制數車專化為10進制數;將B顯示為高位;循環LOOPCALL DECODEMOV DPTR,#DP1MOVX DPTR,AMOV A,DP_HCALL DECODEMOV DPTR,#DP2MOVX DPTR,AMOV P5,ARETDECODE: MOV DPTR,#TABMOVC A,A+DPTRRETTAB:DB0C0H,0F9H,0A4H,0B0H,099H,092H,082H,0

13、F8HDB 080H,090H,088H,083H,0C6H,0A1H,086H,08EH$include (Init_Device.inc)END實驗三.串行數據傳送操作程序調試練習(1) 將發送1,2,3,4 的AS加改為發送 A,B,C,D的ASC $include (C8051F020.inc)NUM2EQU 07F80H;NUM2地址NUM3EQU 07F90H;NUM3地址NUM4EQU 07FA0H;NUM4 地址NUM5EQU 07FB0H;NUM5地址TIM_LEQU0FDH;I/C1低字節計數值TIM_HEQU0FDH;I/C1高字節計數值REC_BUF0EQU 32H;數

14、據接收緩沖器0REC_BUF1EQU 33H;數據接收緩沖器1REC_BUF2EQU 34H;數據接收緩沖器2FLAGBIT 01H;數據發送完成標志ORG0000HLJMPMAIN;轉主程序ORG0023HLJMPRECE;轉串行通信中斷程序MAIN: IcallInit_DeviceMOV A,#0FFHMOV P5,A;MOV DPTR,#NUM2MOVX DPTR,A;MOV DPTR,#NUM3MOVX DPTR,A;MOV DPTR,#NUM4MOVX DPTR,A;MOV DPTR,#NUM5MOVX DPTR,A;MOV R6,#0;MOV SP,#40HMOV TMOD,#0

15、0100000BMOV TH1,#TIM_H ;T/C1MOV TL1,#TIM_LSETB TR1MOV SCON0,#01010000BSETB ESSETB EALOOP: CALL KEYBOARDCJNEA,#0FFH,L0;CLR FLAG;SJMPLOOP;L0: JB FLAG,LOOP;MOV R7,A;清除數碼管NUM1的顯示清除數碼管NUM2勺顯示清除數碼管NUM3勺顯示清除數碼管NUM4勺顯示清除數碼管NUM5勺顯示通信操作狀態寄存器清除;堆棧棧底設置;T/C1方式2重裝填值;T/C1計數值;啟動T/C1;串口方式1;串口中斷允許;開中斷;調用案件狀態分析子程序按鍵狀態

16、發生變化轉 L0按鍵狀態無變化,清除發送完成標志數據發送完成,返回主循環否則,鍵值暫存R7MOV A,#043H ;CSJMP REC6生成鍵值的ASCII碼值發送鍵值的ASCII碼值置位發送完成標志中斷服務程序非發送轉接收處理否則,清除發送中斷標志;中斷返回;保護累加器A讀接收緩沖器接收狀態為0,進行字符C的過濾處理接收狀態改為1MOV SBUF0,A;CALL DELAYMOV A,#04FH;OMOV SBUF0,A;CALL DELAYMOV A,#04DH;MMOV SBUF0,A;CALL DELAYMOV A,#04BH;KMOV SBUF0,A;CALL DELAYMOV A,

17、#30H;MOV SBUF0,ACALL DELAY;MOV A,R7ADD A,#40H;MOV SBUF0,A;SETB FLAGSJMP LOOP;RECE: JNB TI,REC1;CLR TI;RETIREC1: PUSH ACCMOV A,SBUF0;CJNE R6,#0,REC2CJNE A,#43H,REC6;MOV R6,#1;發送字符C的ASCII碼值發送字符O的ASCII碼值發送字符M的ASCII碼值發送字符K的ASCII碼值發送數字0的ASCII碼值REC2: CJNE R6,#1,REC3CJNE A,#4FH,REC5;接收狀態為1 ,進行字符O的過濾處理MOV R

18、6,#2;接收狀態改為2SJMP REC6REC3: CJNE R6,#2,REC4CJNE A,#4DH,REC5;接收狀態為2,進行字符M的過濾處理MOV R6,#3;接收狀態改為3MOV R5,#3;數據接收計數器設置為3SJMP REC6REC4: CJNE R6,#3,REC6PUSH ACC;接收狀態為3,暫存接收的內容MOV A,#REC_BUF0ADD A,R5MOV R0,A;生成接收數據存放緩沖器地址POP ACC;恢復接收數據至A寄存器MOV R0,A;保存接收的數據DEC R5;接收數據計數器減1CJNE R5,#0,REC6CALL DISPLAY;接收數據計數器減為

19、0,進行接收結果的顯示REC5: MOV R6,#0;接收狀態恢復為0 (就緒狀態)REC6: POPACC;恢復累加器ACLR RI;清除接收中斷標志RETI;中斷返回KEYBOARD: MOV A,P2;讀按鍵狀態輸入端口RR ARR ARRC A;KEY1有效鍵值移入位累加器CJC K1;鍵值無效轉KEY2鍵值的分析MOV A,#15否則,KEY1代碼送A寄存器SJMP K5K1:RRC A;KEY2JC K2;MOV A,#2;SJMP K5K2:RRC A;KEY3JC K3;MOV A,#3;SJMP K5K3:RRC A;KEY4JC K4 ;MOV A,#4;SJMP K5有效

20、鍵值移入位累加器 C鍵值無效轉KEY3鍵值的分析否則,KEY2代碼送A寄存器有效鍵值移入位累加器 C鍵值無效轉KEY4鍵值的分析否則,KEY3代碼送A寄存器有效鍵值移入位累加器 C鍵值無效轉按鍵無效處理否則,KEY4代碼送A寄存器K4:MOV A,#0FFH; 按鍵無效代碼送 A寄存器K5:RETDISPLAY:MOV A,REC_BUF1SWAP A;ANL A,#0FH;CALL DECODE ;MOV DPTR,#NUM2MOVX DPTR,AMOV A,REC_BUF1 ;讀取接收的第2字節數據高、低4位交換分離高4位有效數值換碼;NUM2顯示第2字節數據高4位數值讀取接收的第2字節數

21、據ANL A,#0FH ;提取低4位有效數值CALL DECODE ;換碼MOV DPTR,#NUM3MOVX DPTR,A ; NUM掘示第2字節數據低4位數值MOV A,REC_BUF2 ;讀取接收的第 3字節數據SWAP A;高、低4位交換ANL A,#0FH;分離高4位有效數值CALL DECODE ;換碼MOV DPTR,#NUM4MOVX DPTR,A ; NUM"示第3字節數據高4位數值MOV A,REC_BUF2 ;讀取接收的第 3字節數據ANL A,#0FH ;提取低4位有效數值CALL DECODE ;換碼MOV DPTR,#NUM5MOVX DPTR,A ; N

22、UM癱示第3字節數據低4位數值RET;換碼程序DECODE: MOV DPTR,#TABMOVC A,A+DPTRRET;延時程序DELAY: MOV R5,#80HD1:MOV R6,#0HDJNZ R6,$DJNZ R5,D1RETTAB:DB 0C0H,0F9H,0A4H,0B0H,099H,092H,082H,0F8HDB 080H,090H,088H,083H,0C6H,0A1H,086H,08EH$include (Init_Device.inc)END(2)將第二字節和第三字節互換位置$include(C8051F020.inc)NUM2EQU 07F80H;NUM2地址NUM3

23、EQU 07F90H;NUM3地址NUM4EQU 07FA0H;NUM4 地址NUM5EQU 07FB0H;NUM5地址TIM_LEQU0FDH;I/C1低字節計數值TIM_HEQU0FDH;I/C1高字節計數值REC_BUF0 EQU 32HREC_BUF1 EQU 33HREC_BUF2 EQU 34HFLAG BIT 01H;數據接收緩沖器0;數據接收緩沖器1;數據接收緩沖器2;數據發送完成標志ORG 0000HLJMPMAIN;轉主程序ORG 0023HLJMPRECE;轉串行通信中斷程序MAIN: lcall Init_DeviceLOOP: CALL KEYBOARD5調用案件狀態

24、分析子程序MOV A,#0FFHMOV P5,AMOV DPTR,#NUM2MOVX DPTR,AMOV DPTR,#NUM3MOVX DPTR,AMOV DPTR,#NUM4MOVX DPTR,AMOV DPTR,#NUM5MOVX DPTR,AMOV R6,#0MOV SP,#30H;清除數碼管;清除數碼管;清除數碼管;清除數碼管NUM1的顯示NUM2勺顯示NUM3勺顯示NUM4勺顯示;清除數碼管NUM5勺顯示;通信操作狀態寄存器清除;堆棧棧底設置MOVTMOD,#00100000B;T/C1方式 2MOV TH1,#TIM_H ;T/C1重裝填值MOVTL1,#TIM_L;T/C1計數值

25、SETBTR1;啟動T/C1MOV SCON0,#01010000B;串口方式 1SETBES;串口中斷允許SETBEA;開中斷CJNE A,#0FFH,L0按鍵狀態發生變化轉L0CLR FLAGSJMP LOOPL0: JB FLAG,LOOPMOV R7,AMOV A,#043HMOV SBUF0,ACALL DELAYMOV A,#04FHMOV SBUF0,ACALL DELAYMOV A,#04DHMOV SBUF0,ACALL DELAYMOV A,#04BHMOV SBUF0,ACALL DELAYMOV A,#30HMOV SBUF0,ACALL DELAYMOV A,R7AD

26、D A,#30HMOV SBUF0,ASETB FLAGSJMP LOOPRECE: JNB TI,REC1CLR TI ;RETI;按鍵狀態無變化,清除發送完成標志數據發送完成,返回主循環否則,鍵值暫存 R7;C;發送字符;O;發送字符;M;發送字符;K;發送字符; 發送數字C的ASCII碼值O的ASCII碼值M的ASCII碼值K的ASCII碼值0的ASCII碼值;生成鍵值的ASCII碼值發送鍵值的ASCII碼值;置位發送完成標志中斷服務程序非發送轉接收處理否則,清除發送中斷標志中斷返回REC1: PUSHACC保護累加器AMOV A,SBUF0讀接收緩沖器KEYBOARD: MOV A,P

27、2;讀按鍵狀態輸入端口CJNER6,#0,REC2 ;CJNEA,#43H,REC6 ;接收狀態為0,進行字符C的過濾處理MOV R6,#1; 接收狀態改為 1SJMPREC6 ;REC2: CJNE R6,#1,REC3 ;CJNEA,#4FH,REC5 ;接收狀態為1,進行字符。的過濾處理MOV R6,#2; 接收狀態改為2SJMPREC6 ;REC3: CJNE R6,#2,REC4 ;CJNE A,#4DH,REC5 ;接收狀態為2,進行字符 M的過濾處理MOV R6,#3; 接收狀態改為3MOV R5,#3;數據接收計數器設置為 3SJMP REC6 ;REC4: CJNE R6,#

28、3,REC6 ;PUSH ACC接收狀態為3,暫存接收的內容MOV A,#REC_BUF0ADD A,R5MOV R0,A生成接收數據存放緩沖器地址POP ACC恢復接收數據至A寄存器MOV R0,A保存接收的數據DEC R5接收數據計數器減1CJNE R5,#0,REC6CALL DISPLAY;接收數據計數器減為 0,進行接收結果的顯示REC5: MOV R6,#0;接收狀態恢復為0 (就緒狀態)REC6: POP ACC恢復累加器ACLR RI清除接收中斷標志中斷返回RETIRR AK4:MOV A,#0FFHK5:RETDISPLAY:MOV A,REC_BUF1SWAP A;ANL A,#0FH ;分離高CALL DECODE ;換碼MOV DPTR

溫馨提示

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

評論

0/150

提交評論