單片機實驗程序教材_第1頁
單片機實驗程序教材_第2頁
單片機實驗程序教材_第3頁
免費預(yù)覽已結(jié)束,剩余12頁可下載查看

下載本文檔

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

文檔簡介

1、INIT:LCALLInit_Device(1)MOVA,#080HCPLAMOVP3,ALOOP:CALLDELAYCALLDELAYCALLDELAYCALLDELAYCALLDELAYCALLDELAYCALLDELAY(2)RLAMOVP3,AAJMPLOOPDELAY:MOVR5,#0HD1:MOVR6,#00HDJNZR6,$DJNZRETR5,D1$include (Init_Device.inc);END1修改例程一的源程序( 1)將 A 寄存器的初值改為 80H(正邏輯,數(shù)據(jù)位為 1 表示發(fā)光二 極管點亮),再對源程序進行簡單修改,使程序運行后發(fā)光二極管情 況與修改前相同。(

2、 2)將 LED 向左循環(huán)移位點亮改為向右循環(huán)移位點亮( 3)加快 LED 循環(huán)移位點亮的速度$include (C8051F020.inc);C8051F02x 系列單片機信息頭文件包含偽指令調(diào)用初始設(shè)置子程序;賦初始值并在發(fā)光二極管上顯示該數(shù)值;A 寄存器內(nèi)容右移 1位并送 1 發(fā)光二極管顯示;無限循環(huán);延時子程序初始設(shè)置子程序文件包含偽指令3)可刪除幾個CALL DELAY 語句即可加快循環(huán)速度2將例程二 0 F的循環(huán)顯示改為 09 的循環(huán)顯示$include (C8051F020.inc) ;C8051F02x 系列單片機信息頭文件包含偽指令ORGLJMP0000HINITTAB:IN

3、IT:INIT1:MAIN:DELAY:D1:DBDB0C0H,0F9H,0A4H,0B0H,099H,092H,082H,0F8H080H,090H;字符段碼表 8-FlcallInit_Device;調(diào)用初始設(shè)置子程序MOVR1,#00H;操作數(shù)據(jù)初始值MOVA,R1MOVDPTR,#TAB;讀取與 A 中數(shù)值對應(yīng)的顯示段碼MOVCA,A+DPTRMOVP5,A;段碼送并行口 1 顯示CALLDELAYCALLDELAYCALLDELAYCALLDELAYCALLDELAYCALLDELAYCALLDELAYCALLDELAYCALLDELAYCALLDELAYCALLDELAYCALLD

4、ELAYCALLDELAYCALLDELAYINCR1;操作數(shù)據(jù) (R1) 增 1MOVA,R1CJNEA,#0AH,MAIN;檢查操作數(shù)據(jù)是否大于顯示范圍SJMPINIT1;無限循環(huán)MOVR5,#0H;延時子程序MOVR6,#0HDJNZR6,$DJNZR5,D1RET$include (Init_Device.inc);初始設(shè)置子程序文件包含偽指令END;字符段碼表 0-71. 例程 5 程序修改1)將 KEY2 、KEY4 的功能對調(diào)2)每次停下再啟動以后,更改發(fā)光二極管點亮的循環(huán)方向$includeINITIAL:LOOP:ORG0000HLJMPINITIAL;主程序入口ORG000

5、3HLJMPSTOP;外中斷 0 服務(wù)程序入口 ,開始鍵( STAR)ORG0013HLJMPSTAR;外中斷 1 服務(wù)程序入口 停止鍵( STOPORG0100HInit_Device;調(diào)用初始設(shè)置子程序MOVP3,#0FFH;熄滅全部發(fā)光二極管MOVA,#0FFHMOVDPTR,#7F80HMOVXDPTR,A;清除數(shù)碼管 2( NUM2 )顯示MOVA,#0FEH;點亮發(fā)光二極管的初始數(shù)據(jù)MOVR1,#1H;發(fā)光二極管點亮位置初值MOVR4,#0FHMOVIP,#04H;設(shè)置 INT0 (開始鍵 STAR)為高優(yōu)先級MOVTCON,#05H ; 外中斷采用邊沿觸發(fā)SETBEX0;INT1

6、 (停止鍵 STOP)開中斷SETBEA;開放中斷CLREA;關(guān)閉中斷CJNER4, #0FH, LPRLACJNER4,#0FH,LPMOVP3,ACJNER4,#0FH,LPINCR1CJNER4,#0FH,LP;C8051F02x 系列單片機信息頭文件包含偽指令(C8051F020.inc)SETBEA)LCALLLP:LCALLDELAY1LCALLDELAY1LCALLDELAY1LCALLDELAY1CJNER1,#8H,LOOPMOVR1,#0HSJMPLOOPCLREACJNER4,#0F0H,LOOPRRACJNER4,#0F0H,LOOPMOVP3,ACJNER4,#0F0

7、H,LOOPDECR1CJNER4,#0F0H,LOOPSETBEALCALLDELAY1LCALLDELAY1LCALLDELAY1LCALLDELAY1CJNER1,#0H,LPMOVR1,#8HSJMPLP;停止鍵的中斷服務(wù)程序STOP:PUSHACC;保護 A 寄存器內(nèi)容MOVA,R1;讀取發(fā)光二極管點亮位置計數(shù)值MOVDPTR,#TABMOVCA,A+DPTR; 獲取發(fā)光二極管點亮位置計數(shù)值的顯示段碼MOVDPTR,#7F80HMOVXDPTR,A;發(fā)光二極管點亮位置計數(shù)值的顯示數(shù)據(jù)送顯示SETBEX1;INT0 (啟動鍵 STAR )開中斷JNZ$;等待重新啟動條件 -A=0MOV

8、A,#0FFHMOVXDPTR,A;清除數(shù)碼管 2( NUM2 )顯示CLREX1;禁止 INT0 中斷(避免程序誤動作)POPACC;恢復(fù) A 寄存器內(nèi)容CLRIE1; 清除 INT1(停止鍵 STOP)中斷標(biāo)志(避免程序誤動作)RETI;中斷返回STAR:;啟動鍵的中斷服務(wù)程序MOV A,#00H;設(shè)置啟動條件 -A=0CLRIE0 ;清除 INT0 (啟動鍵 STOP)中斷標(biāo)志(避免程序誤動作)PUSHACCMOVA,R4CPLAMOVR4,APOPACCRETI;中斷返回TAB:DB0C0H,0F9H,0A4H,0B0H,099H;0-4 段碼DB092H,082H,0F8H,080H

9、;5-8 段碼DELAY1:MOVR6,#0;延時子程序D1:MOVR7,#0DJNZR7,$DJNZR6,D1RET$include (Init_Device.inc);初始設(shè)置子程序文件包含偽指令END2. 修改例程 6,將計數(shù)范圍由 0-F 擴展至 00-FF(使用定時器 /計時器0),并在 2 位數(shù)碼管上用10 進制數(shù)顯示計數(shù)結(jié)果( 00-99)$include(C8051F020.inc);C8051F02x 系列單片機信息頭文件包含偽指令DP2EQU07F80HDP_LEQU30H;低位數(shù)值暫存器DP_HEQU31H;高位數(shù)值暫存器MAIN:LCALLInit_Device;調(diào)用初

10、始設(shè)置子程序MOVTMOD,#00000101B ;C/T0 工作于方式 2MOVA,#0;顯示初值為 0MOVDP_L,AMOVDP_H,ACALLDISPLAY;調(diào)用顯示子程序顯示初值 0MOVTL0,#0;C/T0 置初值 0SETBTR0;啟動計數(shù)器0LOOP:MOVA,TL0;讀計數(shù)器0 的計數(shù)值CJNEA,#0AH,L1MOVTL0,#0MOVA,#0INCDP_HMOVA,DP_HCJNEA,#0AH,MMMOVDP_H,#0MM:MOVA,#0L1:MOVDP_L,A;在 NUM2顯示計數(shù)器 0 的計數(shù)值CALLDISPLAY;調(diào)用顯示子程序顯示計數(shù)值SJMPLOOP;無限次循

11、環(huán);顯示子程序DISPLAY:MOVA,DP_L;讀低位顯示值CALLDECODE;調(diào)用換碼子程序MOVDPTR,#DP2;顯示段碼送 NUM2MOVXDPTR,AMOVA,DP_H;讀高位顯示值CALLDECODE;調(diào)用換碼子程序MOV P5,ARET;換碼子程序DECODE:MOV MOVC RETDPTR,#TAB A,A+DPTRTAB:DB0C0H,0F9H,0A4H,0B0H,099H,092H,082H,0F8H ;顯示段碼0-7DB080H,090H,088H,083H,0C6H,0A1H,086H,08EH ;顯示段碼8-F$include (Init_Device.inc)

12、;初始設(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 (C8051F020.inc);C8051F02x 系列單片機信息頭文件包含偽指令NUM2EQU07F80H;NUM2 地址NUM3EQU07F90H;NUM3 地址NUM4EQU07FA0H;NUM4 地址NUM5EQU07FB0H;NUM5 地址TIM_LEQU0FDH;T/C1 低字節(jié)計數(shù)值TIM_HEQU0FDH;T/C1 高字節(jié)

13、計數(shù)值REC_BUF0EQU32H;數(shù)據(jù)接收緩沖器 0REC_BUF1EQU34H;數(shù)據(jù)接收緩沖器 1REC_BUF2EQU33H;數(shù)據(jù)接收緩沖器 2FLAGBIT01H;數(shù)據(jù)發(fā)送完成標(biāo)志ORG0000HLJMPMAIN;轉(zhuǎn)主程序ORG0023HLJMPRECE;轉(zhuǎn)串行通信中斷程序;主程序MAIN:lcallInit_Device;C8051F02x 系列單片機信息頭文件包含偽指令MOVA,#0FFHMOVP5,AMOVDPTR,#NUM2MOVXDPTR,A;清除數(shù)碼管 NUM1 的顯示MOVDPTR,#NUM3MOVXDPTR,A;清除數(shù)碼管 NUM2 的顯示MOVDPTR,#NUM4MO

14、VXDPTR,A;清除數(shù)碼管 NUM3 的顯示MOVDPTR,#NUM5MOVXDPTR,A;清除數(shù)碼管 NUM4 的顯示MOVR6,#0;通信操作狀態(tài)寄存器清除MOVSP,#40H;堆棧棧底設(shè)置MOVTMOD,#00100000B;T/C1 方式 2MOVTH1,#TIM_H;T/C1 重裝填值MOV SETB MOV SETB SETBTL1,#TIM_LTR1SCON0,#01010000BESEA;T/C1 計數(shù)值;啟動 T/C1 ;串口方式 1 ;串口中斷允許;開中斷;主循環(huán)LOOP:CALLKEYBOARD;調(diào)用案件狀態(tài)分析子程序CJNEA,#0FFH,L0;按鍵狀態(tài)發(fā)生變化轉(zhuǎn) L

15、0CLRFLAG;按鍵狀態(tài)無變化,清除發(fā)送完成標(biāo)志SJMPLOOPL0:JBFLAG ,LOOP;數(shù)據(jù)發(fā)送完成,返回主循環(huán)MOVR7,A;否則,鍵值暫存 R7MOVA,#043H;CMOVSBUF0,A;發(fā)送字符 C 的 ASCII 碼值CALLDELAYMOVA,#04FH;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

16、碼值MOVSBUF0,ACALLDELAYMOVA,R7ADDA,#40H;生成鍵值的 ASCII 碼值MOVSBUF0,A;發(fā)送鍵值的 ASCII 碼值SETBFLAG;置位發(fā)送完成標(biāo)志SJMPLOOP;中斷服務(wù)程序RECE:JNBTI,REC1;非發(fā)送轉(zhuǎn)接收處理CLRTI;否則,清除發(fā)送中斷標(biāo)志RETI;中斷返回REC1:PUSHACC;保護累加器 AMOVA,SBUF0;讀接收緩沖器CJNER6,#0,REC2CJNEA,#43H,REC6;接收狀態(tài)為 0,進行字符 C 的過濾處理MOVR6,#1;接收狀態(tài)改為 1SJMPREC6REC2:CJNER6,#1,REC3CJNEA,#4FH

17、,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:CJNER6,#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,REC

18、6CALLDISPLAY;接收數(shù)據(jù)計數(shù)器減為 0,進行接收結(jié)果的顯示REC5:MOVR6,#0;接收狀態(tài)恢復(fù)為 0(就緒狀態(tài))REC6:POPACC;恢復(fù)累加器 ACLRRI;清除接收中斷標(biāo)志RETI;中斷返回KEYBOARD: MOVA,P2;讀按鍵狀態(tài)輸入端口RRARRARRCA;KEY1 有效鍵值移入位累加器CJCK1;鍵值無效轉(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 寄存器SJMPK5K3:RRCA;KEY4 有效鍵值移入位累加器CJCK4;鍵值無效轉(zhuǎn)按鍵無效處理MOVA,#4;否則, KEY4 代碼送 A 寄存器SJMPK5K4:MOVA,#0FFH;按鍵無效代碼送 A 寄存器K5:RETDISPLAY:MOV SWAP ANL CALLMOV MOVXA,REC_BUF2AA,#0FHDECODEDPTR,#NUM2DPTR,AMOVA,REC_BUF2ANLA,#0FHCALLDECO

溫馨提示

  • 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. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論