版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、一 1修改例程一的源程序(1)將A寄存器的初值改為80H(正邏輯,數(shù)據(jù)位為1表示發(fā)光二極管點亮),再對源程序進行簡單修改,使程序運行后發(fā)光二極管情況與修改前相同。(2)將LED向左循環(huán)移位點亮改為向右循環(huán)移位點亮(3)加快LED循環(huán)移位點亮的速度$include (C8051F020.inc);C8051F02x系列單片機信息頭文件包含偽指令I(lǐng)NIT:LCALL Init_Device調(diào)用初始設(shè)置子程序 (1)MOV A,#080H ;賦初始值并在發(fā)光二極管上顯示該數(shù)值CPL AMOV P3,ALOOP:CALL DELAYCALL DELAYCALL DELAYCALL DELAYCALL
2、DELAYCALL DELAYCALL DELAY(2)RL A;A寄存器內(nèi)容右移1位并送1發(fā)光二極管顯示MOV P3,AAJMP LOOP;無限循環(huán)DELAY: MOVR5,#0H;延時子程序D1:MOVR6,#00HDJNZR6,$DJNZR5,D1RET$include (Init_Device.inc);初始設(shè)置子程序文件包含偽指令 END(3)可刪除幾個 CALL DELAY語句即可加快循環(huán)速度2將例程二0F的循環(huán)顯示改為09的循環(huán)顯示$include (C8051F020.inc);C8051F02x系列單片機信息頭文件包含偽指令 ORG 0000H LJMP INITTAB:DB
3、0C0H,0F9H,0A4H,0B0H,099H,092H,082H,0F8H;字符段碼表0-7DB080H,090H;字符段碼表8-FINIT:lcall Init_Device;調(diào)用初始設(shè)置子程序INIT1: MOV R1,#00H;操作數(shù)據(jù)初始值 MOV A,R1MAIN: MOV DPTR,#TAB;讀取與A中數(shù)值對應(yīng)的顯示段碼MOVC A,A+DPTRMOV P5,A;段碼送并行口1顯示CALL DELAYCALL DELAYCALL DELAYCALL DELAYCALL DELAYCALL DELAYCALL DELAYCALL DELAYCALL DELAYCALL DELAY
4、CALL DELAYCALL DELAYCALL DELAYCALL DELAYINC R1 ;操作數(shù)據(jù)(R1)增1MOV A,R1CJNE A,#0AH,MAIN;檢查操作數(shù)據(jù)是否大于顯示范圍(F)SJMP INIT1;無限循環(huán)DELAY: MOVR5,#0H ;延時子程序D1:MOVR6,#0HDJNZR6,$DJNZR5,D1RET$include (Init_Device.inc);初始設(shè)置子程序文件包含偽指令END二1. 例程5程序修改(1) 將KEY2、KEY4的功能對調(diào)(2) 每次停下再啟動以后,更改發(fā)光二極管點亮的循環(huán)方向$include (C8051F020.inc) ;C8
5、051F02x系列單片機信息頭文件包含偽指令 ORG0000H LJMPINITIAL ;主程序入口 ORG0003H LJMPSTOP ;外中斷0服務(wù)程序入口,開始鍵(STAR) ORG0013H LJMP STAR ;外中斷1服務(wù)程序入口 停止鍵(STOP) ORG0100HINITIAL:LCALL Init_Device ;調(diào)用初始設(shè)置子程序MOV P3,#0FFH ;熄滅全部發(fā)光二極管MOV A,#0FFHMOV DPTR,#7F80HMOVX DPTR,A ;清除數(shù)碼管2(NUM2)顯示MOV A,#0FEH ;點亮發(fā)光二極管的初始數(shù)據(jù)MOV R1,#1H ;發(fā)光二極管點亮位置初值
6、MOV R4,#0FHMOVIP,#04H ;設(shè)置INT0(開始鍵STAR)為高優(yōu)先級MOVTCON,#05H ;外中斷采用邊沿觸發(fā)SETB EX0 ;INT1(停止鍵STOP)開中斷SETB EA ;開放中斷LOOP: CLR EA;關(guān)閉中斷CJNE R4, #0FH, LPRL A CJNE R4,#0FH,LPMOV P3,A CJNE R4,#0FH,LPINC R1 CJNE R4,#0FH,LP SETB EALCALL DELAY1LCALL DELAY1LCALL DELAY1LCALL DELAY1CJNE R1,#8H,LOOPMOV R1,#0HSJMP LOOPLP:
7、CLR EA CJNE R4,#0F0H,LOOPRR A CJNE R4,#0F0H,LOOP MOV P3,ACJNE R4,#0F0H,LOOPDEC R1CJNE R4,#0F0H,LOOPSETB EALCALL DELAY1LCALL DELAY1LCALL DELAY1LCALL DELAY1CJNE R1,#0H,LPMOV R1,#8HSJMP LP;停止鍵的中斷服務(wù)程序STOP:PUSH ACC ;保護A寄存器內(nèi)容 MOV A,R1 ;讀取發(fā)光二極管點亮位置計數(shù)值MOV DPTR,#TABMOVC A,A+DPTR ;獲取發(fā)光二極管點亮位置計數(shù)值的顯示段碼 MOV DPTR
8、,#7F80HMOVX DPTR,A ;發(fā)光二極管點亮位置計數(shù)值的顯示數(shù)據(jù)送顯示SETB EX1 ;INT0(啟動鍵STAR)開中斷JNZ $ ;等待重新啟動條件-A=0MOV A,#0FFHMOVX DPTR,A ;清除數(shù)碼管2(NUM2)顯示 CLR EX1 ;禁止INT0中斷(避免程序誤動作) POP ACC ;恢復(fù)A寄存器內(nèi)容 CLR IE1;清除INT1(停止鍵STOP)中斷標志(避免程序誤動作) RETI ;中斷返回 ;啟動鍵的中斷服務(wù)程序STAR: MOV A,#00H;設(shè)置啟動條件-A=0 CLRIE0;清除INT0(啟動鍵STOP)中斷標志(避免程序誤動作) PUSH ACC
9、 MOV A,R4 CPL A MOV R4,A POP ACC RETI;中斷返回TAB: DB0C0H,0F9H,0A4H,0B0H,099H ;0-4段碼 DB092H,082H,0F8H,080H ;5-8段碼DELAY1: MOVR6,#0;延時子程序D1: MOV R7,#0 DJNZ R7,$ DJNZ R6,D1 RET$include (Init_Device.inc) ;初始設(shè)置子程序文件包含偽指令 END2. 修改例程6,將計數(shù)范圍由0-F擴展至00-FF(使用定時器/計時器0),并在2位數(shù)碼管上用10進制數(shù)顯示計數(shù)結(jié)果(00-99)$include (C8051F020
10、.inc);C8051F02x系列單片機信息頭文件包含偽指令DP2 EQU 07F80H DP_L EQU 30H ;低位數(shù)值暫存器DP_H EQU 31H ;高位數(shù)值暫存器 MAIN: LCALL Init_Device;調(diào)用初始設(shè)置子程序 MOV TMOD,#00000101B ;C/T0工作于方式2 MOV A,#0 ;顯示初值為0 MOV DP_L,A MOV DP_H,A CALL DISPLAY ;調(diào)用顯示子程序顯示初值0 MOV TL0,#0 ;C/T0置初值0 SETB TR0 ;啟動計數(shù)器0 LOOP: MOV A,TL0 ;讀計數(shù)器0的計數(shù)值 CJNE A,#0AH,L1
11、MOV TL0,#0MOV A,#0 INC DP_HMOV A,DP_HCJNE A,#0AH,MM MOV DP_H,#0MM: MOV A,#0L1: MOV DP_L,A ;在NUM2顯示計數(shù)器0的計數(shù)值 CALL DISPLAY ;調(diào)用顯示子程序顯示計數(shù)值 SJMP LOOP ;無限次循環(huán) ;顯示子程序DISPLAY: MOV A,DP_L ;讀低位顯示值 CALL DECODE ;調(diào)用換碼子程序 MOV DPTR,#DP2 ;顯示段碼送NUM2 MOVX DPTR,A MOV A,DP_H ;讀高位顯示值 CALL DECODE ;調(diào)用換碼子程序 MOV P5,A RET ;換碼子
12、程序 DECODE: MOV DPTR,#TAB MOVC A,A+DPTR RETTAB: DB 0C0H,0F9H,0A4H,0B0H,099H,092H,082H,0F8H ;顯示段碼0-7 DB 080H,090H,088H,083H,0C6H,0A1H,086H,08EH ;顯示段碼8-F$include (Init_Device.inc) ;初始設(shè)置子程序文件包含偽指令 END 三通過對例程8的程序進行修改和上機調(diào)試,改變源程序的 功能(1) 將發(fā)送1、2、3、4的ASCII碼改為發(fā)送A、B、C、D的ASCII碼(2) 將接收的第2、第3字節(jié)數(shù)據(jù)的顯示位置交換$include (C
13、8051F020.inc);C8051F02x系列單片機信息頭文件包含偽指令NUM2EQU07F80H;NUM2地址NUM3EQU07F90H;NUM3地址NUM4EQU07FA0H;NUM4地址NUM5EQU07FB0H;NUM5地址TIM_LEQU 0FDH;T/C1低字節(jié)計數(shù)值TIM_HEQU 0FDH ;T/C1高字節(jié)計數(shù)值REC_BUF0EQU32H;數(shù)據(jù)接收緩沖器0REC_BUF1EQU34H;數(shù)據(jù)接收緩沖器1REC_BUF2EQU33H;數(shù)據(jù)接收緩沖器2FLAGBIT 01H;數(shù)據(jù)發(fā)送完成標志ORG 0000HLJMP MAIN ;轉(zhuǎn)主程序ORG 0023HLJMP RECE ;
14、轉(zhuǎn)串行通信中斷程序;主程序MAIN: lcall Init_Device;C8051F02x系列單片機信息頭文件包含偽指令MOVA,#0FFHMOVP5,AMOVDPTR,#NUM2MOVXDPTR,A;清除數(shù)碼管NUM1的顯示MOVDPTR,#NUM3MOVXDPTR,A;清除數(shù)碼管NUM2的顯示MOVDPTR,#NUM4MOVXDPTR,A;清除數(shù)碼管NUM3的顯示MOVDPTR,#NUM5MOVXDPTR,A;清除數(shù)碼管NUM4的顯示MOVR6,#0;通信操作狀態(tài)寄存器清除MOVSP,#40H ;堆棧棧底設(shè)置MOV TMOD,#00100000B ;T/C1方式2 MOV TH1,#TI
15、M_H ;T/C1重裝填值 MOV TL1,#TIM_L ;T/C1計數(shù)值 SETB TR1 ;啟動T/C1 MOV SCON0,#01010000B ;串口方式1 SETB ES ;串口中斷允許 SETB EA ;開中斷;主循環(huán)LOOP:CALLKEYBOARD ;調(diào)用案件狀態(tài)分析子程序CJNEA,#0FFH,L0;按鍵狀態(tài)發(fā)生變化轉(zhuǎn)L0CLRFLAG;按鍵狀態(tài)無變化,清除發(fā)送完成標志SJMPLOOP L0:JBFLAG,LOOP;數(shù)據(jù)發(fā)送完成,返回主循環(huán)MOVR7,A;否則,鍵值暫存R7MOVA,#043H;CMOVSBUF0,A;發(fā)送字符C的ASCII碼值CALLDELAYMOVA,#0
16、4FH;OMOVSBUF0,A;發(fā)送字符O的ASCII碼值CALLDELAYMOVA,#04DH;MMOVSBUF0,A;發(fā)送字符M的ASCII碼值CALLDELAYMOVA,#04BH;KMOVSBUF0,A;發(fā)送字符K的ASCII碼值CALLDELAYMOVA,#40H;發(fā)送數(shù)字0的ASCII碼值MOVSBUF0,ACALLDELAYMOVA,R7ADDA,#40H;生成鍵值的ASCII碼值MOVSBUF0,A;發(fā)送鍵值的ASCII碼值SETBFLAG;置位發(fā)送完成標志SJMPLOOP ;中斷服務(wù)程序RECE: JNBTI,REC1;非發(fā)送轉(zhuǎn)接收處理CLRTI ;否則,清除發(fā)送中斷標志RE
17、TI ;中斷返回REC1: PUSH ACC ;保護累加器AMOVA,SBUF0 ;讀接收緩沖器 CJNER6,#0,REC2CJNEA,#43H,REC6;接收狀態(tài)為0,進行字符C的過濾處理MOVR6,#1;接收狀態(tài)改為1SJMPREC6REC2:CJNER6,#1,REC3CJNEA,#4FH,REC5;接收狀態(tài)為1,進行字符O的過濾處理MOVR6,#2;接收狀態(tài)改為2SJMPREC6REC3:CJNER6,#2,REC4CJNEA,#4DH,REC5;接收狀態(tài)為2,進行字符M的過濾處理MOVR6,#3;接收狀態(tài)改為3MOVR5,#3;數(shù)據(jù)接收計數(shù)器設(shè)置為3SJMPREC6REC4:CJN
18、ER6,#3,REC6PUSHACC;接收狀態(tài)為3,暫存接收的內(nèi)容MOVA,#REC_BUF0ADDA,R5MOVR0,A;生成接收數(shù)據(jù)存放緩沖器地址POPACC;恢復(fù)接收數(shù)據(jù)至A寄存器MOVR0,A;保存接收的數(shù)據(jù)DECR5;接收數(shù)據(jù)計數(shù)器減1CJNER5,#0,REC6CALLDISPLAY;接收數(shù)據(jù)計數(shù)器減為0,進行接收結(jié)果的顯示REC5:MOVR6,#0;接收狀態(tài)恢復(fù)為0(就緒狀態(tài))REC6:POP ACC ;恢復(fù)累加器A CLRRI;清除接收中斷標志RETI ;中斷返回 KEYBOARD:MOVA,P2;讀按鍵狀態(tài)輸入端口RRARRARRCA;KEY1有效鍵值移入位累加器CJCK1;
19、鍵值無效轉(zhuǎn)KEY2鍵值的分析MOVA,#1;否則,KEY1代碼送A寄存器SJMPK5K1:RRCA;KEY2有效鍵值移入位累加器CJCK2;鍵值無效轉(zhuǎn)KEY3鍵值的分析MOVA,#2;否則,KEY2代碼送A寄存器SJMPK5K2:RRCA;KEY3有效鍵值移入位累加器CJCK3;鍵值無效轉(zhuǎn)KEY4鍵值的分析MOVA,#3;否則,KEY3代碼送A寄存器SJMP K5K3:RRCA;KEY4有效鍵值移入位累加器CJCK4;鍵值無效轉(zhuǎn)按鍵無效處理MOVA,#4 ;否則,KEY4代碼送A寄存器SJMPK5K4:MOVA,#0FFH;按鍵無效代碼送A寄存器K5:RETDISPLAY:MOVA,REC_BUF2;讀取接收的第2字節(jié)數(shù)據(jù)SWAPA;高、低4位交換ANLA,#0FH;分離高4
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度臨時用電安全設(shè)施維護保養(yǎng)合同文本2篇
- 2025年度產(chǎn)品代理合同:智能家電全系列產(chǎn)品代理權(quán)轉(zhuǎn)讓
- 2025版內(nèi)蒙古自治區(qū)農(nóng)牧廳農(nóng)業(yè)產(chǎn)業(yè)鏈延伸與價值鏈提升合同4篇
- 二零二五年度臨時用電安全培訓(xùn)服務(wù)合同范本
- 2025年度食品添加劑研發(fā)項目配料保密合同范本
- 2025年度苗木種植項目招投標合同4篇
- 二零二五年度家電品牌代言合同標準范本
- 二零二五年度某某學(xué)校校園內(nèi)電梯維修保養(yǎng)服務(wù)合同4篇
- 《短視頻編?。哼x題構(gòu)想+腳本制作+劇本策劃+鏡頭拍攝》課件 第5、6章 了解劇本:創(chuàng)作優(yōu)劇本的基礎(chǔ)、劇本編寫:創(chuàng)作優(yōu)的故事情節(jié)
- 2025年度鋼材深加工項目運輸及安裝合同2篇
- 平安產(chǎn)險陜西省地方財政生豬價格保險條款
- 銅礦成礦作用與地質(zhì)環(huán)境分析
- 30題紀檢監(jiān)察位崗位常見面試問題含HR問題考察點及參考回答
- 詢價函模板(非常詳盡)
- 《AI營銷畫布:數(shù)字化營銷的落地與實戰(zhàn)》
- 麻醉藥品、精神藥品、放射性藥品、醫(yī)療用毒性藥品及藥品類易制毒化學(xué)品等特殊管理藥品的使用與管理規(guī)章制度
- 一個28歲的漂亮小媳婦在某公司打工-被老板看上之后
- 乘務(wù)培訓(xùn)4有限時間水上迫降
- 2023年低年級寫話教學(xué)評語方法(五篇)
- DB22T 1655-2012結(jié)直腸外科術(shù)前腸道準備技術(shù)要求
- GB/T 16474-2011變形鋁及鋁合金牌號表示方法
評論
0/150
提交評論