單片機(jī)試驗(yàn)程序_第1頁(yè)
單片機(jī)試驗(yàn)程序_第2頁(yè)
單片機(jī)試驗(yàn)程序_第3頁(yè)
單片機(jī)試驗(yàn)程序_第4頁(yè)
單片機(jī)試驗(yàn)程序_第5頁(yè)
已閱讀5頁(yè),還剩6頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、1.修改例程一的源程序(1)將A寄存器的初值改為80H (正邏輯,數(shù)據(jù)位為1表示發(fā)光二極管點(diǎn)亮),再對(duì)源程序進(jìn)行簡(jiǎn)單修改,使程序運(yùn)行后發(fā)光二極管 情況與修改前相同。(2)將LED向左循環(huán)移位點(diǎn)亮改為向右循環(huán)移位點(diǎn)亮(3)加快LED循環(huán)移位點(diǎn)亮的速度$include (C8051F020.inc);C8051F02x系列單片機(jī)信息頭文件包含偽指令I(lǐng)NIT:LCALL Init_Device調(diào)用初始設(shè)置子程序(1)MOVA,#080H;賦初始值并在發(fā)光二極管上顯示該數(shù)值CPLAMOVP3,ALOOP:CALLDELAYCALLDELAYCALLDELAYCALLDELAYCALLDELAYCALL

2、DELAYCALLDELAY(2)RLA;A寄存器內(nèi)容后移1位并送1發(fā)光二極管 顯示MOVP3,AAJMPLOOP;無(wú)限循環(huán)DELAY:MOVR5,#0H ;延時(shí)子程 序D1:MOVR6,#00HDJNZR6,$DJNZR5,D1RET$include (Init_Device.inc);初始設(shè)置子程序文件包含偽指令 END(3)可刪除幾個(gè) CALL DELAY語(yǔ)句即可加快循環(huán)速度2.將傷程二0F的循環(huán)顯示改為09的循環(huán)顯示$include (C8051F020.inc);C8051F02x系列單片機(jī)信息頭文件包ORG0000HLJMPINIT含偽指令TAB:DB0C0H,0F9H,0A4H,

3、0B0H,099H,092H,082H,0F8H;字符段碼表 0-7DB080H,090H;字符段碼表8-FINIT:lcall Init_Device;調(diào)用初始設(shè)置子程序INIT1:MOVR1,#00H;操作數(shù)據(jù)初始值MOVA,R1MAIN:MOVDPTR,#TAB;讀取與A中數(shù)值對(duì)應(yīng)的顯示段碼MOVCA,A+DPTRMOVP5,A;段碼送并行口 1顯示CALLDELAYCALLDELAYCALLDELAYCALLDELAYCALLDELAYCALLDELAYCALLDELAYCALLDELAYCALLDELAYCALLDELAYCALLDELAYCALLDELAYCALLDELAYCALL

4、DELAYINCR1操作數(shù)據(jù)(R1)增1MOVA,R1C C C C C ,#0AH,MAIN ;檢查操作數(shù)據(jù)是否大于顯示范圍(SJMPINIT1;無(wú)限循環(huán)F)D D DD D :MOVR5,#0H;延時(shí)子程序D1:MOVR6,#0HDJNZR6,$DJNZR5,D1RET$include (Init_Device.inc);初始設(shè)置子程序文件包含偽指令END1,例程5程序修改 將KEY2、KEY4的功能對(duì)調(diào)每次停下再啟動(dòng)以后,更改發(fā)光二極管點(diǎn)亮的循環(huán)方向$include(C8051F020.inc);C8051F02x系列單片機(jī)信息頭文件包含偽指令ORG0000HLJMPINITIAL ;主

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

6、采用邊沿觸發(fā)SETBEX0;INT1 (停止鍵 STOP)開(kāi)中斷SETBEA;開(kāi)放中斷LOOP:CLREA;關(guān)閉中斷CJNER4, #0FH, LPRLACJNER4,#0FH,LPMOVP3,ACJNER4,#0FH,LPINCR1CJNER4,#0FH,LPSETBEA;停止鍵的中斷服 務(wù)程序STOP:PUSHACC;保護(hù)A寄存器內(nèi)容MOVA,R1;讀取發(fā)光二極管點(diǎn)亮位置計(jì)數(shù)值MOVDPTR,#TABMOVCA,A+DPTR ;獲取發(fā)光二極管點(diǎn)亮位置計(jì)數(shù)值的顯示段碼MOVDPTR,#7F80HMOVXDPTR,A;發(fā)光二極管點(diǎn)亮位置計(jì)數(shù)值的顯示數(shù)據(jù)送顯示SETBEX1;INT0 (啟動(dòng)鍵

7、STAR)開(kāi)中斷JNZ $;等待重新啟動(dòng)條件-A=0MOVA,#0FFHMOVXDPTR,A;清除數(shù)碼管2 (NUM2)顯示CLREX1;禁止INT0中斷(避 免程序誤動(dòng)作)POPACC;恢復(fù)A寄存器內(nèi)容CLRIE1;清除INT1 (停止鍵STOP)中斷標(biāo)志(避免程序誤動(dòng)作RETI;中斷返回LP:LCALLDELAY1LCALLDELAY1LCALLDELAY1LCALLDELAY1CJNER1,#8H,LOOPMOVR1,#0HSJMPLOOPCLREACJNER4,#0F0H,LOOPRRACJNER4,#0F0H,LOOPMOVP3,ACJNER4,#0F0H,LOOPDECR1CJNE

8、R4,#0F0H,LOOPSETBEALCALLDELAY1LCALLDELAY1LCALLDELAY1LCALLDELAY1CJNER1,#0H,LPMOVR1,#8HSJMPLP;啟動(dòng)鍵的中斷服務(wù)程序STAR:MOV A,#00H;設(shè)置啟動(dòng)條件-A=0CLRPUSHMOVCPLMOVPOPRETIIE0 ;清除INT0 (啟動(dòng)鍵STOP)中斷標(biāo)志(避免程序誤動(dòng)ACCA,R4AR4,AACC;中斷返回作)TAB:DB0C0H,0F9H,0A4H,0B0H,099H;0-4段碼DB092H,082H,0F8H,080H;5-8段碼DELAY1:MOVR6,#0;延時(shí)子程序D1:MOVDJNZD

9、JNZRETR7,#0R7,$R6,D1;初始設(shè)置子程序文件包含偽指令$include (Init_Device.inc)END2.修改例程6,將計(jì)數(shù)范圍由0-F擴(kuò)展至00-FF (使用定時(shí)器/計(jì)時(shí)器0),并在2位數(shù)碼管上用10進(jìn)制數(shù)顯示計(jì)數(shù)結(jié)果(00-99)$include(C8051F020.inc);C8051F02x系列單片機(jī)信息頭文件包含偽指令DP2EQU07F80HDP_LEQU30H;低位數(shù)值暫存器DP_HEQU31H;高位數(shù)值暫存器MAIN:LCALLInit_Device;調(diào)用初始設(shè)置子程序MOVTMOD,#00000101B;C/T0 工作 于方式 2MOVA,#0;顯示初

10、值為0MOVDP_L,AMOVDP_H,ACALLDISPLAY;調(diào)用顯示子程序顯示初值0MOVTL0,#0;C/T0置初值0SETB TR0;啟動(dòng)計(jì)數(shù)器0LOOP:MOVA,TL0;讀計(jì)數(shù)器0的計(jì)數(shù)值CJNEA,#0AH,L1MOVTL0,#0MOVA,#0INCDP_HMOVA,DP_HCJNEA,#0AH,MMMOVDP_H,#0MM:MOVA,#0L1:MOVDP_L,A;在NUM2顯示計(jì)數(shù)器0的計(jì)數(shù)值CALLDISPLAY;調(diào)用顯示子程序顯示計(jì)數(shù)值SJMPLOOP;無(wú)限次循環(huán);顯示子程序DISPLAY:MOVA,DP_L;讀低位顯示值CALLDECODE;調(diào)用換碼子程序MOVDPTR

11、,#DP2;顯示段碼送NUM2MOVXDPTR,AMOVA,DP_H;讀高位顯示值CALLDECODE;調(diào)用換碼子程序MOVP5,ARET;換碼子程序DECODE:MOVDPTR,#TABMOVCA,A+DPTRRETTAB:DB0C0H,0F9H,0A4H,0B0H,099H,092H,082H,0F8H;顯示段碼 0-7DB080H,090H,088H,083H,0C6H,0A1H,086H,08EH;顯示段碼 8-F$include (Init_Device.inc);初始設(shè)置子程序文件包含偽指令END通過(guò)對(duì)例程8的程序進(jìn)行修改和上機(jī)調(diào)試,改變?cè)闯绦虻墓δ?將發(fā)送1、2、3、4的ASCI

12、I碼改為發(fā)送A、B、C、D的ASCII 碼將接收的第2、第3字節(jié)數(shù)據(jù)的顯示位置交換$include (C8051F020.inc);C8051F02x系列單片機(jī)信息頭文件包含偽指令NUM2EQU07F80H;NUM2地址NUM3EQU07F90H;NUM3地址NUM4EQU07FA0H;NUM4地址NUM5EQU07FB0H;NUM5地址TIM_LEQU0FDH;I/C1低字節(jié)計(jì)數(shù)值TIM_HEQU0FDH;I/C1高字節(jié)計(jì)數(shù)值REC_BUF0EQU32H;數(shù)據(jù)接收緩沖器0REC_BUF1EQU34H;數(shù)據(jù)接收緩沖器1REC_BUF2EQU33H;數(shù)據(jù)接收緩沖器2FLAGBIT01H;數(shù)據(jù)發(fā)送

13、完成標(biāo)志ORG 0000HLJMP MAIN;轉(zhuǎn)主程序ORG0023HLJMPRECE;轉(zhuǎn)串行通信中斷程序;主程序MAIN:Icall Init_Device;C8051F02x系列單片機(jī)信息頭文件包含偽指令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;堆棧棧底

14、設(shè)置MOVTMOD,#00100000B;T/C1 方式 2MOVTH1,#TIM_H;T/C1重裝填值MOVSETBMOVSETBSETBTL1,#TIM_LTR1SCON0,#01010000BESEA;T/C1計(jì)數(shù)值;啟動(dòng)T/C1;串口方式1;串口中斷允許;開(kāi)中斷;主循環(huán)LOOP:CALLKEYBOARD;調(diào)用案件狀態(tài)分析子程序CJNEA,#0FFH,L0;按鍵狀態(tài)發(fā)生變化轉(zhuǎn)L0CLRFLAG;按鍵狀態(tài)無(wú)變化,清除發(fā)送完成 標(biāo)志SJMPLOOPL0:JBFLAG,LOOP;數(shù)據(jù)發(fā)送完 成,返回主循環(huán)MOVR7,A;否則,鍵值暫存R7MOVA,#043H;CMOVSBUF0,A;發(fā)送字符C

15、的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碼值MOVSBUF0,ACALLDELAYMOVA,R7ADDA,#40H;生成鍵值的ASCII碼值MOVSBUF0,A;發(fā)送鍵值的ASCII碼值SETBFLAG;置位發(fā)送完成標(biāo)志SJMPLOOP;中斷服務(wù)程序RECE:JNBTI,REC1;非發(fā)送轉(zhuǎn)接收

16、處理CLRTI;否則,清除發(fā)送中斷標(biāo)志RETI;中斷返回REC1:PUSHACC;保護(hù)累加器AMOVA,SBUF0;讀接收緩沖器CJNER6,#0,REC2CJNEA,#43H,REC6;接收狀態(tài)為0,進(jìn)行字符C的過(guò)濾處理MOVR6,#1;接收狀態(tài)改為1SJMPREC6REC2:CJNER6,#1,REC3CJNEA,#4FH,REC5;接收狀態(tài)為1,進(jìn)行字符O的過(guò)濾處理MOVR6,#2;接收狀態(tài)改為2SJMPREC6REC3:CJNER6,#2,REC4CJNEA,#4DH,REC5;接收狀態(tài)為2,進(jìn)行字符M的過(guò)濾處理MOVR6,#3;接收狀態(tài)改為3MOVR5,#3;數(shù)據(jù)接收計(jì)數(shù)器設(shè)置為3S

17、JMPREC6REC4: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ù)計(jì)數(shù)器減1CJNER5,#0,REC6CALLDISPLAY;接收數(shù)據(jù)計(jì)數(shù)器減為0,進(jìn)行接收結(jié)果的顯示REC5:MOVR6,#0;接收狀態(tài)恢復(fù)為0 (就緒狀態(tài))REC6:POPACC;恢復(fù)累加器ACLRRI;清除接收中斷標(biāo)志RETI;中斷返回KEYBOARD:MOVA,P2;讀按鍵狀態(tài)輸入端口RRARRARRCA;KEY1有效鍵值移

18、入位累加器 CJCK1;鍵值無(wú)效轉(zhuǎn)KEY2鍵值的分析MOVA,#1;否則,KEY1代碼送A寄存器SJMPK5K1:RRCA;KEY2有效鍵值移入位累加器 CJCK2;鍵值無(wú)效轉(zhuǎn)KEY3鍵值的分析MOVA,#2;否則,KEY2代碼送A寄存器SJMPK5K2:RRCA;KEY3有效鍵值移入位累加器 CJCK3;鍵值無(wú)效轉(zhuǎn)KEY4鍵值的分析MOVA,#3;否則,KEY3代碼送A寄存器SJMPK5K3:RRCA;KEY4有效鍵值移入位累加器 CJCK4;鍵值無(wú)效轉(zhuǎn)按鍵無(wú)效處理MOVA,#4;否則,KEY4代碼送A寄存器SJMPK5K4:K5:MOVRETA,#0FFH;按鍵無(wú)效代碼送A寄存器DISPLAY:MOVA,REC_BUF2;讀取接收的第2字節(jié)數(shù)據(jù)SWAPA;局、低4位交換ANLA,#0FH;分離局4位后效數(shù)值CALLDECODE;換碼

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 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ì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論