51單片機(jī)5個(gè)例程修改實(shí)驗(yàn)報(bào)告課件.doc_第1頁(yè)
51單片機(jī)5個(gè)例程修改實(shí)驗(yàn)報(bào)告課件.doc_第2頁(yè)
51單片機(jī)5個(gè)例程修改實(shí)驗(yàn)報(bào)告課件.doc_第3頁(yè)
51單片機(jī)5個(gè)例程修改實(shí)驗(yàn)報(bào)告課件.doc_第4頁(yè)
51單片機(jī)5個(gè)例程修改實(shí)驗(yàn)報(bào)告課件.doc_第5頁(yè)
免費(fèi)預(yù)覽已結(jié)束,剩余19頁(yè)可下載查看

下載本文檔

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

文檔簡(jiǎn)介

1、MCS-51單片機(jī)實(shí)驗(yàn)報(bào)告專(zhuān)業(yè):通信工程指導(dǎo)老師:學(xué)號(hào):姓名:精品文章1-1.實(shí)驗(yàn)要求:修改例程一的源程序(1)將A寄存器的初值改為 80H (正邏輯,數(shù)據(jù)位為 1表示發(fā)光二極管點(diǎn)亮) 再對(duì)源程序進(jìn)行簡(jiǎn)單修改,使程序運(yùn)行后發(fā)光二極管點(diǎn)亮情況與修改前相同。(2)將LED向左循環(huán)移位點(diǎn)亮改為向右循環(huán)移位點(diǎn)亮。(3)加快LED循環(huán)移位點(diǎn)亮的速度。實(shí)驗(yàn)過(guò)程:針對(duì)三個(gè)小問(wèn)題,分別有以下實(shí)驗(yàn)方法:(1)對(duì)A賦值80H,然后對(duì) A取反可達(dá)到原始點(diǎn)亮情況(2)改變A內(nèi)位移數(shù)據(jù)的方向。(3)減少調(diào)用 DELAY函數(shù)的次數(shù)。原程序:MOV A,#0FFH ;清除掛接在總線(xiàn)上的數(shù)碼管的顯示內(nèi)容MOV DPTR,#0

2、0HMOVX DPTR,AMOV A,#07FH ;賦初始值并在發(fā)光二極管上顯示該數(shù)值MOV P1,ALOOP: CALL DELAYCALL DELAYRR A ;A寄存器內(nèi)容右移1位并送發(fā)光二極管顯示MOV P1,AAJMP LOOP ;無(wú)限循環(huán)DELAY: MOV R5,#0H延時(shí)子程序D1: MOV R6,#0HDJNZ R6,$DJNZ R5,D1RETEND最終程序:$include (C8051F020.inc)INIT:CPLLOOP:LCALLMOVAMOVCALLCALLCALLCALLRL AMOVAJMPInit_DeviceA,#080HP3,ADELAYDELAYD

3、ELAYDELAYP3,ALOOPDELAY:MOV R5,#0HD1:MOVR6,#00HDJNZR6,$DJNZR5,D1RET$include (Init_Device.inc)END1-2.實(shí)驗(yàn)要求:將例程0-F的循環(huán)顯示改為 0-9的循環(huán)顯示實(shí)驗(yàn)過(guò)程:減少了數(shù)字顯示,修改循環(huán)語(yǔ)句中歸零判定語(yǔ)句的判定值即可原程序:ORG 0000HLJMP INITTAB:字符段碼表0-7DB 0C0H,0F9H,0A4H,0B0H,099H,092H,082H,0F8H ;字符段碼表 8-FDB 080H,090H,088H,083H,0C6H,0A1H,086H,08EH ;INIT:MOV A,

4、#0FFH清除掛接在總線(xiàn)上的數(shù)碼管的顯示內(nèi)容MOV DPTR,#00HMOVX DPTR,AMOVR1,#00H操作數(shù)據(jù)初始值MOVA,R1MAIN:MOVDPTR,#TAB讀取與A中數(shù)值對(duì)應(yīng)的顯示段碼MOVC A,A+DPTRMOV P1,A段碼送并行口1顯示CALL DELAYCALLDELAYCALLDELAYCALLDELAYCALLDELAYINC R1操作數(shù)據(jù)(R1)增MOV A,R1CJNE A,#10H,MAIN檢查操作數(shù)據(jù)是否大于顯示范圍(F)SJMP INIT無(wú)限循環(huán)DELAY: MOV R5,#0H;延時(shí)子程序D1: MOV R6,#0HDJNZ R6,$DJNZ R5,

5、D1RETEND最終程序:$include (C8051F020.inc)ORG0000HINITLJMPTAB: DB0C0H,0F9H,0A4H,0B0H,099H,092H,082H,0F8HDB080H,090HINIT:LCALLInit_DeviceINIT1:MOVR1,#00HMOVA,R1MAIN:MOVDPTR,#TABMOVCA,A+DPTRMOVP5,ACALLDELAYCALLDELAYCALLDELAYCALLDELAYCALLDELAYCALLDELAYINCR1MOVA,R1CJNEA,#0AH,MAINSJMPINIT1DELAY:MOVR5,#0HD1:MO

6、VR6,#0HDJNZR6,$DJNZR5,D1RET$include (Init_Device.inc)END改變?cè)绦虻墓δ?-1實(shí)驗(yàn)要求:通過(guò)對(duì)例程5的程序進(jìn)行修改和上機(jī)調(diào)試,將Key2.Key4功能對(duì)調(diào),(2)每次停下再啟動(dòng)時(shí),更改發(fā)光二極管循環(huán)點(diǎn)亮的方向?qū)嶒?yàn)過(guò)程:(1)將序中的中斷部分 EX1與EX0對(duì)調(diào)即可;(2)在每次點(diǎn)亮前進(jìn)行點(diǎn)亮方向判定,即加入一個(gè)循環(huán)。原程序:ORG 0000HLJMP INITIAL;主程序入口ORG 0003HLJMP STAR ;外中斷0服務(wù)程序入口 ,開(kāi)始鍵(STAR)ORG 0013HLJMP STOP ; 外中斷1服務(wù)程序入口停止鍵(STOP)O

7、RG 0100HINITIAL: MOV A,#0FFHMOV P1,#0FFH ;熄滅全部發(fā)光二極管精品文章MOV DPTR,#00HMOVX DPTR,A ;清除數(shù)碼管 2 (DS2)顯示MOVA,#0FEH點(diǎn)亮發(fā)光二極管的初始數(shù)據(jù)MOVR1,#1H發(fā)光二極管點(diǎn)亮位置初值MOVIP,#01H設(shè)置INT0 (開(kāi)始鍵 STAR )為高優(yōu)先級(jí)MOVTCON,#05H外中斷采用邊沿觸發(fā)SETBEX1 ;INT1(停止鍵 STOP )開(kāi)中斷SETBEA開(kāi)放中斷LOOP:CLR EARL AMOV P1,A ;刷新發(fā)光二極管控制數(shù)據(jù)INC R1發(fā)光二極管點(diǎn)亮位置計(jì)數(shù)值增SETB EA開(kāi)放中斷LCALL

8、 DELAY1LCALL DELAY1延時(shí)CJNE R1,#8,LOOPMOV R1,#0H ;SJMP LOOP停止鍵的中斷服務(wù)程序STOP:PUSH ACC發(fā)光二極管點(diǎn)亮位置計(jì)數(shù)值有效性檢測(cè)發(fā)光二極管點(diǎn)亮位置計(jì)數(shù)值等于無(wú)限次循環(huán)保護(hù)A寄存器內(nèi)容RETI8則回0MOV A,R1MOV DPTR,#TABMOVC A,A+DPTR ;MOV DPTR,#00HMOVX DPTR,A ;SETB EX0 ;INT0JNZ $MOV A,#0FFHMOVX DPTR,ACLREX0讀取發(fā)光二極管點(diǎn)亮位置計(jì)數(shù)值獲取發(fā)光二極管點(diǎn)亮位置計(jì)數(shù)值的顯示段碼發(fā)光二極管點(diǎn)亮位置計(jì)數(shù)值的顯示數(shù)據(jù)送顯示(啟動(dòng)鍵 S

9、TAR)開(kāi)中斷等待重新啟動(dòng)條件-A=0清除數(shù)碼管 2 (DS2)顯示禁止INT0中斷(避免程序誤動(dòng)作)PR8:CLRPOP ACCIE1中斷返回;啟動(dòng)鍵的中斷服務(wù)程序STAR:MOV A,#00H恢復(fù)A寄存器內(nèi)容清除INT1 (停止鍵 STOP)中斷標(biāo)志(避免程序誤動(dòng)作)設(shè)置啟動(dòng)條件-A=0INC R0CLR IE0清除INT0(啟動(dòng)鍵 STOP )中斷標(biāo)志(避免誤動(dòng)作)RETI中斷返回;啟動(dòng)鍵的中斷服務(wù)程序STAR:MOV A,#00H設(shè)置啟動(dòng)條件-A=0RETITAB:INC R0CLR IE0 ;中斷返回清除into (啟動(dòng)鍵STOP )中斷標(biāo)志(避免程序誤動(dòng)作)DB 0C0H,0F9H

10、,0A4H,0B0H,099H;0-4段碼精品文章DB 092H,082H,0F8H,080H;5-8段碼DELAY1: MOV R6,#0;延時(shí)子程序D1: MOV R7,#0DJNZ R7,$DJNZ R6,D1RETEND最終程序:$include (C8051F020.inc)ORGLJMPORGLJMPORGLJMPORG0000HINITIAL0013HSTAR0003HSTOP0100HINITIAL:LCALLInit_DeviceMOV R4,#0FHMOVP3,#0FFHMOVA,#0FFHMOVDPTR,#7F80HMOVXDPTR,AMOVA,#0FEHMOVR1,#1

11、HMOVIP,#04HMOVTCON,#05HSETBEX0SETBEALOOP1:CLREACJNE R4,#0FH,LOOP2RLACJNE R4,#0FH,LOOP2MOVP3,ACJNE R4,#0FH,LOOP2INCR1CJNE R4,#0FH,LOOP2SETBEALCALL DELAY1LCALL DELAY1LCALL DELAY1LCALL DELAY1CJNE R1,#8,LOOP1MOV R1,#0HSJMP LOOP1LOOP2:CLR EACJNE R4,#0F0H,LOOP1RRACJNE R4,#0F0H,LOOP1MOV P3,ACJNE R4,#0F0H,L

12、OOP1DECR1SETBEALCALL DELAY1LCALL DELAY1LCALL DELAY1LCALL DELAY1CJNE R1,#0,LOOP2MOV R1,#8SJMPLOOP2STOP:PUSHACCMOVA,R1MOVDPTR,#TABMOVCA,A+DPTRMOVDPTR,#7F80HMOVXDPTR,ASETBEX1JNZ$MOVA,#0FFHMOVXDPTR,ACLREX1POPACCCLRIE0RETISTAR:MOVA,#00HCLRIE1PUSH ACCMOVA,R4CPLAMOVR4,APOPACCRETITAB:DB0C0H,0F9H,0A4H,0B0H,0

13、99HDB092H,082H,0F8H,080HDELAY1:MOVR6,#0D1:MOVR7,#0DJNZR7,$DJNZR6,D1RET$include (Init_Device.inc)END2-2實(shí)驗(yàn)要求:修改歷程6,將計(jì)數(shù)范圍擴(kuò)展到00-FF (使用計(jì)時(shí)器0),并在2位數(shù)碼管上用10進(jìn)制顯示00-99實(shí)驗(yàn)過(guò)程:用輸入數(shù)除以10,商等于10進(jìn)制十位,余數(shù)等于10進(jìn)制各位。低位計(jì)數(shù)進(jìn)位時(shí)高位加1,然后將商和余數(shù)分別輸入顯示,即可得到 10進(jìn)制顯示原程序:DP2 EQU 00000HDP_L EQU 30H;低位數(shù)值暫存器DP_H EQU 31H ;高位數(shù)值暫存器MAIN:MOV TMOD

14、,#01100110B;C/T0,C/T1工作在方式 2顯示初值為0MOV A,#0MOV DP_L,AMOV DP_H,A CALL DISPLAY ;MOV TL0,#0;C/T0MOV TL1,#0;C/T1SETB TR1 ;LOOP:MOV A,TL0 ;CJNE A,#10H,L1;MOV TL0,#0;MOV A,TL0;L1:MOV DP_H,A ;MOV A,TL1;CJNE A,#10H,L2;MOV TL1,#0;MOV A,TL1;L2:MOV DP_L,A ;CALL DISPLAY ;SJMP LOOP ;顯示子程序DISPLAY: MOV A,DP_L;CALL

15、DECODE ;MOV DPTR,#DP2 ;MOVX DPTR,AMOV A,DP_H;CALL DECODE ;MOV P1,A ;調(diào)用顯示子程序顯示初值0置初值0置初值0啟動(dòng)計(jì)數(shù)器1讀計(jì)數(shù)器0的計(jì)數(shù)值如果A中為16時(shí)計(jì)數(shù)器0清0讀計(jì)數(shù)器0的計(jì)數(shù)值在DS2顯示計(jì)數(shù)器0的計(jì)數(shù)值讀計(jì)數(shù)器1的計(jì)數(shù)值如果A中為16時(shí)計(jì)數(shù)器1清0讀計(jì)數(shù)器1的計(jì)數(shù)值在DS1顯示計(jì)數(shù)器1的計(jì)數(shù)值調(diào)用顯示子程序顯示計(jì)數(shù)值無(wú)限次循環(huán)讀低位顯示值調(diào)用換碼子程序顯示段碼送DS2讀高位顯示值調(diào)用換碼子程序顯示段碼送DS1RET;換碼子程序DECODE: MOV DPTR,#TABMOVC A,A+DPTR RET;延時(shí)子程序DE

16、LAY: MOV R5,#80H D1:MOV R6,#0HDJNZ R6,$DJNZ R5,D1RETTAB: DB 0C0H,0F9H,0A4H,0B0H,099H,092H,082H,0F8H ;顯示段碼 0-7DB 080H,090H,088H,083H,0C6H,0A1H,086H,08EH ;顯示段碼 8-FEND最終程序:$include (C8051F020.inc)DP2EQU07F80HDP1EQU07F90HDP_LEQU30HDP_HEQU31HMAIN:LCALLInit_DeviceMOV TMOD,#00000110BMOV A,#0MOV DP_L,AMOV D

17、P_H,ACALL DISPLAYMOV TL0,#0SETB TR0LOOP:MOV A,TL0CJNE A,#64H,L1MOV TL0,#0MOV A,TL0L1:MOV B,#10DIV ABMOV DP_L,BMOV B,#10DIV ABMOV DP_H,BCALL DISPLAYSJMP LOOPDISPLAY:MOV A,DP_LCALL DECODEMOV DPTR,#DP2MOVX DPTR,AMOV A,DP_HCALL DECODEMOV P5,ARETMOV DPTR,#TABDECODE:MOVC A,A+DPTRRETTAB:DB 0C0H,0F9H,0A4H,0

18、B0H,099H,092H,082H,0F8HDB080H,090H,088H,083H,0C6H,0A1H,086H,08EH$include (Init_Device.inc)END2-3實(shí)驗(yàn)要求: 將例程7的10秒計(jì)數(shù)器功能改為秒表功能,計(jì)時(shí)范圍仍為10秒,計(jì)數(shù)分辨率仍為 0.1秒。要求KEY2停止,KEY4啟動(dòng),停止期間按 KEY1清0實(shí)驗(yàn)過(guò)程:結(jié)合2-1中的啟動(dòng)和停止部分源代碼,在進(jìn)行中斷嵌套。原程序:DS1 EQU P1數(shù)碼管(DS1 )訪(fǎng)問(wèn)地址DS2 EQU 0H數(shù)碼管(DS2 )訪(fǎng)問(wèn)地址US100 EQU 30H;100uS軟件計(jì)數(shù)器地址MS1 EQU 31H;1MS軟件計(jì)數(shù)器

19、地址MS100 EQU 32H;100Ms軟件計(jì)數(shù)器地址S1 EQU 33H;1S軟件計(jì)數(shù)器地址ORG 0000HAJMP MAINORG 000BH定時(shí)器/計(jì)數(shù)器0中斷服務(wù)程序入口地址AJMP TIMERMAIN: MOV A,#0FFH ;清除顯示MOV DS1,AMOV DPTR,#DS2MOVX DPTR,ACLR A軟件計(jì)數(shù)器清0定時(shí)器/計(jì)數(shù)器0 100uS計(jì)數(shù)值 定時(shí)器/計(jì)數(shù)器0重裝填計(jì)數(shù)值 啟動(dòng)定時(shí)器/計(jì)數(shù)器0計(jì)數(shù)開(kāi)放定時(shí)器/計(jì)數(shù)器0中斷中斷允許MOV US100,AMOV MS1,AMOV MS100,AMOV S1,AMOV TMOD,#02H ; 定時(shí)器/計(jì)數(shù)器 0工作于(

20、8位重裝填)方式二MOV TL0,#155;MOV TH0,#155;SETB TR0;SETB ET0;SETB EA ;SJMP $定時(shí)器/計(jì)數(shù)器0中斷服務(wù)程序TIMER: INC US100;100uS軟件計(jì)數(shù)器加1MOV R0,#US100CJNE R0,#10,TIM3 ;計(jì)數(shù)未達(dá)到 IMS轉(zhuǎn)TIM3MOV US100,#0否則100uS軟件計(jì)數(shù)器清INC MS1 ;1MS軟件計(jì)數(shù)器加1INC R0CJNE R0,#100,TIM3 ;計(jì)數(shù)未達(dá)到 100Ms轉(zhuǎn)TIM3MOV MS1,#0否則IMS軟件計(jì)數(shù)器清INC MS100;100MS軟件計(jì)數(shù)器加1INC R0CJNE R0,#1

21、0,TIM2計(jì)數(shù)未達(dá)到 1S轉(zhuǎn)TIM2MOV MS100,#0;100MS軟件計(jì)數(shù)器清INC S1;1S軟件計(jì)數(shù)器加1INC R0CJNER0,#10,TIM1計(jì)數(shù)未達(dá)到 10S轉(zhuǎn)TIM1MOVS1,#0;1S軟件計(jì)數(shù)器清0TIM1:MOVA,S1讀取秒計(jì)數(shù)值CALLDECODE轉(zhuǎn)換為顯示段碼MOVDS1,A秒計(jì)數(shù)值送數(shù)碼管1(DS1 )顯示TIM2:MOVA,MS100讀取100毫秒計(jì)數(shù)值CALLDECODE轉(zhuǎn)換為顯示段碼MOVDPTR,#DS2TIM3:MOVXRETIDPTR,A;100中斷返回毫秒計(jì)數(shù)值送數(shù)碼管2 ( DS2 )顯示DECODE: MOV DPTR,#TAB ;段碼表頭地址送DPTRMOVC A,A+DPTR ;DPTR作基地址A作偏移量讀取顯示段碼數(shù)據(jù)RET ;子程序返回TAB: DB 0C0H,0F9H,0A4H,0B0H,099H ;0-4段碼ENDDB 092H,082H,0F8H,080H,090H ;5-9段碼最終程序:$include (C8051F020.inc)NUM1EQUP5NUM2EQU07F80HUS100EQU30HMS1EQU31HMS100EQU32HS1EQU33HORG0000HAJMPMAINORG000B

溫馨提示

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

評(píng)論

0/150

提交評(píng)論