北京工業(yè)大學(xué)8051單片機(jī)實(shí)驗(yàn)報(bào)告.doc
《北京工業(yè)大學(xué)8051單片機(jī)實(shí)驗(yàn)報(bào)告.doc》由會(huì)員分享,可在線閱讀,更多相關(guān)《北京工業(yè)大學(xué)8051單片機(jī)實(shí)驗(yàn)報(bào)告.doc(18頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
8051單片機(jī)實(shí)驗(yàn)報(bào)告 專業(yè):電子科學(xué)與技術(shù) 姓名: 學(xué)號(hào): 120231 指導(dǎo)教師: 金冬月 第一單元 單片機(jī)程序調(diào)試環(huán)境使用及并行數(shù)據(jù)傳送操作訓(xùn)練 1-1修改例程一的源程序: 將A寄存器的初值改為80H(正邏輯,數(shù)據(jù)位為1表示發(fā)光二極管點(diǎn)亮),再對(duì)源程序進(jìn)行簡(jiǎn)單修改,使程序運(yùn)行后發(fā)光二極管點(diǎn)亮情況與修改前相同。 $include (C8051F020.inc) ;C8051F02x系列單片機(jī)信息頭文件包含偽指令 LCALL Init_Device ;調(diào)用初始設(shè)置子程序 MOV A,#080H ;賦初始值并在發(fā)光二極管上顯示該數(shù)值 CPL A MOV P3,A LOOP: CALL DELAY CALL DELAY CALL DELAY CALL DELAY CALL DELAY RR A ;A寄存器內(nèi)容右移1位并送發(fā)光二極管顯示 MOV P3,A AJMP LOOP ;無(wú)限循環(huán) DELAY: MOV R5,#0H ;延時(shí)子程序 D1: MOV R6,#0H DJNZ R6,$ DJNZ R5,D1 RET $include (Init_Device.inc) ;初始設(shè)置子程序文件包含偽指令 END 將LED向左循環(huán)移位點(diǎn)亮改為向右循環(huán)移位點(diǎn)亮。 $include (C8051F020.inc) ;C8051F02x系列單片機(jī)信息頭文件包含偽指令 LCALL Init_Device ;調(diào)用初始設(shè)置子程序 MOV A,#07FH ;賦初始值并在發(fā)光二極管上顯示該數(shù)值 MOV P3,A LOOP: CALL DELAY CALL DELAY CALL DELAY CALL DELAY CALL DELAY RL A ;A寄存器內(nèi)容右移1位并送發(fā)光二極管顯示 MOV P3,A AJMP LOOP ;無(wú)限循環(huán) DELAY: MOV R5,#0H ;延時(shí)子程序 D1: MOV R6,#0H DJNZ R6,$ DJNZ R5,D1 RET $include (Init_Device.inc) ;初始設(shè)置子程序文件包含偽指令 END 加快LED循環(huán)移位點(diǎn)亮的速度。(刪除幾個(gè)延遲指令!) $include (C8051F020.inc) ;C8051F02x系列單片機(jī)信息頭文件包含偽指令 LCALL Init_Device ;調(diào)用初始設(shè)置子程序 MOV A,#07FH ;賦初始值并在發(fā)光二極管上顯示該數(shù)值 MOV P3,A LOOP: CALL DELAY CALL DELAY RR A ;A寄存器內(nèi)容右移1位并送發(fā)光二極管顯示 MOV P3,A AJMP LOOP ;無(wú)限循環(huán) DELAY: MOV R5,#0H ;延時(shí)子程序 D1: MOV R6,#0H DJNZ R6,$ DJNZ R5,D1 RET $include (Init_Device.inc) ;初始設(shè)置子程序文件包含偽指令 END 1-2將例程二0-F的循環(huán)顯示改為0-9的循環(huán)顯示。 $include (C8051F020.inc) ORG 0000H LJMP INIT TAB: DB 0C0H,0F9H,0A4H,0B0H,099H,092H,082H,0F8H ; 段碼0-7 DB 080H,090H,088H,083H,0C6H,0A1H,086H,08EH ; 段碼8-F INIT: LCALL Init_Device MOV R1,#00H ;操作數(shù)據(jù)初始值 MOV A,R1 MAIN: MOV DPTR,#TAB ;讀取與A中數(shù)值對(duì)應(yīng)的顯示段碼 MOVC A,@A+DPTR MOV P5A ;段碼送并行口5顯示 CALL DELAY CALL DELAY CALL DELAY CALL DELAY CALL DELAY CALL DELAY CALL DELAY CALL DELAY CALL DELAY CALL DELAY INC R1 ;操作數(shù)據(jù)(R1)增1 MOV A,R1 CJNE A,#0AH,MAIN. ;檢查操作數(shù)據(jù)是否大于顯示范圍(F) SJMP INIT ;無(wú)限循環(huán) DELAY: MOV R5,#0H ;延時(shí)子程序 D1: MOV R6,#0H DJNZ R6,$ DJNZ R5,D1 RET $include (Init_Device.inc) END 實(shí)驗(yàn)2.中斷控制及定時(shí)器/計(jì)數(shù)器操作訓(xùn)練 2-1通過(guò)對(duì)例程5的程序進(jìn)行修改和上機(jī)調(diào)試,改變?cè)绦虻墓δ堋? (1)將KEY2,KEY4的功能對(duì)調(diào)。 (2)每次停下再啟動(dòng)后,更改發(fā)光二極管點(diǎn)亮的循環(huán)方向。 $include (C8051F020.inc) ;C8051F02x單片機(jī)信息頭文件包含偽指令 ORG 0000H LJMP INITIAL ;主程序入口 ORG 0013H LJMP STAR ;外中斷0服務(wù)程序入口,開始鍵(STAR) ORG 0003H LJMP STOP ;外中斷1服務(wù)程序入口 停止鍵(STOP) ORG 0100H INITIAL: LCALL Init_Device ;調(diào)用初始設(shè)置子程序 MOV P3,#0FFH ;熄滅全部發(fā)光二極管 MOV A,#0FFH MOV DPTR,#7F80H MOVX @DPTR,A ;清除數(shù)碼管2(NUM2)顯示 MOV A,#0FEH ;點(diǎn)亮發(fā)光二極管的初始數(shù)據(jù) MOV R1,#1H ;發(fā)光二極管點(diǎn)亮位置初值 MOV IP,#04H ;設(shè)置INT0(開始鍵STAR)為高優(yōu)先級(jí) MOV TCON,#05H ;外中斷采用邊沿觸發(fā) SETB EX1 ;INT1(停止鍵STOP)開中斷 SETB EA ;開放中斷LOOP: LOOP: CLR EA ;關(guān)閉中斷 RL A MOV P3,A ;刷新發(fā)光二極管控制數(shù)據(jù) INC R1 ;發(fā)光二極管點(diǎn)亮位置計(jì)數(shù)值增1 SETB EA ;開放中斷 LCALL DELAY1 ;延時(shí) LCALL DELAY1 CJNE R1,#8,LOOP ;發(fā)光二極管點(diǎn)亮位置計(jì)數(shù)值有效性檢測(cè) MOV R1,#0H ;發(fā)光二極管點(diǎn)亮位置計(jì)數(shù)值等于8則回0 SJMP LOOP ;無(wú)限次循環(huán) ;停止鍵的中斷服務(wù)程序 STOP: PUSH ACC ;保護(hù)A寄存器內(nèi)容 MOV A,R1 ;讀取發(fā)光二極管點(diǎn)亮位置計(jì)數(shù)值 MOV DPTR,#TAB MOVC A,@A+DPTR ;獲取發(fā)光二極管點(diǎn)亮位置計(jì)數(shù)值的顯示段碼 MOV DPTR,#7F80H MOVX @DPTR,A ;發(fā)光二極管點(diǎn)亮位置計(jì)數(shù)值的顯示數(shù)據(jù)送顯示 SETB EX1 ;INT0(啟動(dòng)鍵STAR)開中斷 JNZ $ ;等待重新啟動(dòng)條件--A=0 MOV A,#0FFH MOVX @DPTR,A ;清除數(shù)碼管2(DS2)顯示 CLR EX1 ;禁止INT0中斷(避免程序誤動(dòng)作) POP ACC ;恢復(fù)A寄存器內(nèi)容 CLR IE0 ;清除INT1中斷標(biāo)志(避免程序誤動(dòng)作) RETI ;中斷返回 ;啟動(dòng)鍵的中斷服務(wù)程序 STAR: MOV A,#00H ;設(shè)置啟動(dòng)條件--A=0 CLR IE1 ;清除INT0中斷標(biāo)志(避免程序誤動(dòng)作) RETI ;中斷返回 TAB: DB 0C0H,0F9H,0A4H,0B0H,099H ;0--4段碼 DB 092H,082H,0F8H,080H ;5--8段碼 DELAY1: MOV R6,#0 ;延時(shí)子程序 D1: MOV R7,#0 DJNZ R7,$ DJNZ R6,D1 RET $include (Init_Device.inc);初始設(shè)置子程序文件包含偽指令 2-2修改例程6,將計(jì)數(shù)范圍由0-F擴(kuò)展至00-FF(使用定時(shí)器/計(jì)時(shí)器0),并在2位數(shù)碼管上用10進(jìn)制數(shù)顯示計(jì)數(shù)結(jié)果(00-99)。16進(jìn)制→10進(jìn)制方法 Hex/10:商=10進(jìn)制十位,余數(shù)=10進(jìn)制個(gè)位 $include (C8051F020.inc) DP2 EQU 07F80H DP1 EQU 07F90H ;增加一個(gè) DP_L EQU 30H DP_H EQU 31H MAIN: LCALL Init_Device MOV TMOD,#00000110B ;使計(jì)數(shù)器工作在模式2 MOV A,#0 MOV DP_L,A ;顯示計(jì)數(shù)的低位 MOV DP_H,A ;顯示計(jì)數(shù)高位 CALL DISPLAY MOV TL0,#0 ;使TL0的初值為0 SETB TR0 ;啟用定時(shí)器0 LOOP: MOV A,TL0 CJNE A,#100,L1 ;A不等于100時(shí),轉(zhuǎn)到L1顯示 MOV TL0,#0 ;當(dāng)A等于100時(shí),TL0清零 MOV A,TL0 L1: MOV B,#10 DIV AB ;將16進(jìn)制數(shù)轉(zhuǎn)化為10進(jìn)制數(shù) MOV DP_L,B MOV B,#10 DIV AB MOV DP_H,B ;將B顯示為高位 CALL DISPLAY SJMP LOOP ;循環(huán)LOOP DISPLAY: MOV A,DP_L CALL DECODE MOV DPTR,#DP1 MOVX @DPTR,A MOV A,DP_H CALL DECODE MOV DPTR,#DP2 MOVX @DPTR,A MOV P5,A RET DECODE: MOV DPTR,#TAB MOVC A,@A+DPTR RET TAB: DB 0C0H,0F9H,0A4H,0B0H,099H,092H,082H,0F8H DB 080H,090H,088H,083H,0C6H,0A1H,086H,08EH $include (Init_Device.inc) END 實(shí)驗(yàn)三.串行數(shù)據(jù)傳送操作程序調(diào)試練習(xí) (1) 將發(fā)送1,2,3,4的ASC碼改為發(fā)送A,B,C,D的ASC碼 $include (C8051F020.inc) NUM2 EQU 07F80H ;NUM2地址 NUM3 EQU 07F90H ;NUM3地址 NUM4 EQU 07FA0H ;NUM4地址 NUM5 EQU 07FB0H ;NUM5地址 TIM_L EQU 0FDH ; T/C1低字節(jié)計(jì)數(shù)值 TIM_H EQU 0FDH ;T/C1高字節(jié)計(jì)數(shù)值 REC_BUF0 EQU 32H ;數(shù)據(jù)接收緩沖器0 REC_BUF1 EQU 33H ;數(shù)據(jù)接收緩沖器1 REC_BUF2 EQU 34H ;數(shù)據(jù)接收緩沖器2 FLAG BIT 01H ;數(shù)據(jù)發(fā)送完成標(biāo)志 ORG 0000H LJMP MAIN ;轉(zhuǎn)主程序 ORG 0023H LJMP RECE ;轉(zhuǎn)串行通信中斷程序 MAIN: lcall Init_Device MOV A,#0FFH MOV P5,A ;清除數(shù)碼管NUM1的顯示 MOV DPTR,#NUM2 MOVX @DPTR,A ;清除數(shù)碼管NUM2的顯示 MOV DPTR,#NUM3 MOVX @DPTR,A ;清除數(shù)碼管NUM3的顯示 MOV DPTR,#NUM4 MOVX @DPTR,A ;清除數(shù)碼管NUM4的顯示 MOV DPTR,#NUM5 MOVX @DPTR,A ;清除數(shù)碼管NUM5的顯示 MOV R6,#0 ;通信操作狀態(tài)寄存器清除 MOV SP,#40H ;堆棧棧底設(shè)置 MOV TMOD,#00100000B ;T/C1方式2 MOV TH1,#TIM_H ;T/C1重裝填值 MOV TL1,#TIM_L ;T/C1計(jì)數(shù)值 SETB TR1 ;啟動(dòng)T/C1 MOV SCON0,#01010000B ;串口方式1 SETB ES ;串口中斷允許 SETB EA ;開中斷 LOOP: CALL KEYBOARD ;調(diào)用案件狀態(tài)分析子程序 CJNE A,#0FFH,L0 ;按鍵狀態(tài)發(fā)生變化轉(zhuǎn)L0 CLR FLAG ;按鍵狀態(tài)無(wú)變化,清除發(fā)送完成標(biāo)志 SJMP LOOP ; L0: JB FLAG,LOOP ;數(shù)據(jù)發(fā)送完成,返回主循環(huán) MOV R7,A ;否則,鍵值暫存R7 MOV A,#043H ;C MOV SBUF0,A ;發(fā)送字符C的ASCII碼值 CALL DELAY ; MOV A,#04FH ;O MOV SBUF0,A ;發(fā)送字符O的ASCII碼值 CALL DELAY ; MOV A,#04DH ;M MOV SBUF0,A ;發(fā)送字符M的ASCII碼值 CALL DELAY ; MOV A,#04BH ;K MOV SBUF0,A ;發(fā)送字符K的ASCII碼值 CALL DELAY ; MOV A,#30H ;發(fā)送數(shù)字0的ASCII碼值 MOV SBUF0,A CALL DELAY ; MOV A,R7 ; ADD A,#40H ;生成鍵值的ASCII碼值 MOV SBUF0,A ;發(fā)送鍵值的ASCII碼值 SETB FLAG ;置位發(fā)送完成標(biāo)志 SJMP LOOP ;中斷服務(wù)程序 RECE: JNB TI,REC1 ;非發(fā)送轉(zhuǎn)接收處理 CLR TI ;否則,清除發(fā)送中斷標(biāo)志 RETI ;中斷返回 REC1: PUSH ACC ;保護(hù)累加器A MOV A,SBUF0 ;讀接收緩沖器 CJNE R6,#0,REC2 ; CJNE A,#43H,REC6 ;接收狀態(tài)為0,進(jìn)行字符C的過(guò)濾處理 MOV R6,#1 ;接收狀態(tài)改為1 SJMP REC6 ; REC2: CJNE R6,#1,REC3 ; CJNE A,#4FH,REC5 ;接收狀態(tài)為1,進(jìn)行字符O的過(guò)濾處理 MOV R6,#2 ;接收狀態(tài)改為2 SJMP REC6 ; REC3: CJNE R6,#2,REC4 ; CJNE A,#4DH,REC5 ;接收狀態(tài)為2,進(jìn)行字符M的過(guò)濾處理 MOV R6,#3 ;接收狀態(tài)改為3 MOV R5,#3 ;數(shù)據(jù)接收計(jì)數(shù)器設(shè)置為3 SJMP REC6 ; REC4: CJNE R6,#3,REC6 ; PUSH ACC ;接收狀態(tài)為3,暫存接收的內(nèi)容 MOV A,#REC_BUF0 ADD A,R5 MOV R0,A ;生成接收數(shù)據(jù)存放緩沖器地址 POP ACC ;恢復(fù)接收數(shù)據(jù)至A寄存器 MOV @R0,A ;保存接收的數(shù)據(jù) DEC R5 ;接收數(shù)據(jù)計(jì)數(shù)器減1 CJNE R5,#0,REC6 ; CALL DISPLAY ;接收數(shù)據(jù)計(jì)數(shù)器減為0,進(jìn)行接收結(jié)果的顯示 REC5: MOV R6,#0 ;接收狀態(tài)恢復(fù)為0(就緒狀態(tài)) REC6: POP ACC ;恢復(fù)累加器A CLR RI ;清除接收中斷標(biāo)志 RETI ;中斷返回 KEYBOARD: MOV A,P2 ;讀按鍵狀態(tài)輸入端口 RR A RR A RRC A ;KEY1有效鍵值移入位累加器C JC K1 ;鍵值無(wú)效轉(zhuǎn)KEY2鍵值的分析 MOV A,#1 ;否則,KEY1代碼送A寄存器 SJMP K5 K1: RRC A ;KEY2有效鍵值移入位累加器C JC K2 ;鍵值無(wú)效轉(zhuǎn)KEY3鍵值的分析 MOV A,#2 ;否則,KEY2代碼送A寄存器 SJMP K5 K2: RRC A ;KEY3有效鍵值移入位累加器C JC K3 ;鍵值無(wú)效轉(zhuǎn)KEY4鍵值的分析 MOV A,#3 ;否則,KEY3代碼送A寄存器 SJMP K5 K3: RRC A ;KEY4有效鍵值移入位累加器C JC K4 ;鍵值無(wú)效轉(zhuǎn)按鍵無(wú)效處理 MOV A,#4 ;否則,KEY4代碼送A寄存器 SJMP K5 K4: MOV A,#0FFH ;按鍵無(wú)效代碼送A寄存器 K5: RET DISPLAY: MOV A,REC_BUF1 ;讀取接收的第2字節(jié)數(shù)據(jù) SWAP A ;高、低4位交換 ANL A,#0FH ;分離高4位有效數(shù)值 CALL DECODE ;換碼 MOV DPTR,#NUM2 MOVX @DPTR,A ; NUM2顯示第2字節(jié)數(shù)據(jù)高4位數(shù)值 MOV A,REC_BUF1 ;讀取接收的第2字節(jié)數(shù)據(jù) ANL A,#0FH ;提取低4位有效數(shù)值 CALL DECODE ;換碼 MOV DPTR,#NUM3 MOVX @DPTR,A ; NUM3顯示第2字節(jié)數(shù)據(jù)低4位數(shù)值 MOV A,REC_BUF2 ;讀取接收的第3字節(jié)數(shù)據(jù) SWAP A ;高、低4位交換 ANL A,#0FH ;分離高4位有效數(shù)值 CALL DECODE ;換碼 MOV DPTR,#NUM4 MOVX @DPTR,A ; NUM4顯示第3字節(jié)數(shù)據(jù)高4位數(shù)值 MOV A,REC_BUF2 ;讀取接收的第3字節(jié)數(shù)據(jù) ANL A,#0FH ;提取低4位有效數(shù)值 CALL DECODE ;換碼 MOV DPTR,#NUM5 MOVX @DPTR,A ; NUM5顯示第3字節(jié)數(shù)據(jù)低4位數(shù)值 RET ;換碼程序 DECODE: MOV DPTR,#TAB MOVC A,@A+DPTR RET ;延時(shí)程序 DELAY: MOV R5,#80H D1: MOV R6,#0H DJNZ R6,$ DJNZ R5,D1 RET TAB: DB 0C0H,0F9H,0A4H,0B0H,099H,092H,082H,0F8H DB 080H,090H,088H,083H,0C6H,0A1H,086H,08EH $include (Init_Device.inc) END (2) 將第二字節(jié)和第三字節(jié)互換位置 $include (C8051F020.inc) NUM2 EQU 07F80H ;NUM2地址 NUM3 EQU 07F90H ;NUM3地址 NUM4 EQU 07FA0H ;NUM4地址 NUM5 EQU 07FB0H ;NUM5地址 TIM_L EQU 0FDH ; T/C1低字節(jié)計(jì)數(shù)值 TIM_H EQU 0FDH ;T/C1高字節(jié)計(jì)數(shù)值 REC_BUF0 EQU 32H ;數(shù)據(jù)接收緩沖器0 REC_BUF1 EQU 33H ;數(shù)據(jù)接收緩沖器1 REC_BUF2 EQU 34H ;數(shù)據(jù)接收緩沖器2 FLAG BIT 01H ;數(shù)據(jù)發(fā)送完成標(biāo)志 ORG 0000H LJMP MAIN ;轉(zhuǎn)主程序 ORG 0023H LJMP RECE ;轉(zhuǎn)串行通信中斷程序 MAIN: lcall Init_Device MOV A,#0FFH MOV P5,A ;清除數(shù)碼管NUM1的顯示 MOV DPTR,#NUM2 MOVX @DPTR,A ;清除數(shù)碼管NUM2的顯示 MOV DPTR,#NUM3 MOVX @DPTR,A ;清除數(shù)碼管NUM3的顯示 MOV DPTR,#NUM4 MOVX @DPTR,A ;清除數(shù)碼管NUM4的顯示 MOV DPTR,#NUM5 MOVX @DPTR,A ;清除數(shù)碼管NUM5的顯示 MOV R6,#0 ;通信操作狀態(tài)寄存器清除 MOV SP,#30H ;堆棧棧底設(shè)置 MOV TMOD,#00100000B ;T/C1方式2 MOV TH1,#TIM_H ;T/C1重裝填值 MOV TL1,#TIM_L ;T/C1計(jì)數(shù)值 SETB TR1 ;啟動(dòng)T/C1 MOV SCON0,#01010000B ;串口方式1 SETB ES ;串口中斷允許 SETB EA ;開中斷 LOOP: CALL KEYBOARD ;調(diào)用案件狀態(tài)分析子程序 CJNE A,#0FFH,L0 ;按鍵狀態(tài)發(fā)生變化轉(zhuǎn)L0 CLR FLAG ;按鍵狀態(tài)無(wú)變化,清除發(fā)送完成標(biāo)志 SJMP LOOP ; L0: JB FLAG,LOOP ;數(shù)據(jù)發(fā)送完成,返回主循環(huán) MOV R7,A ;否則,鍵值暫存R7 MOV A,#043H ;C MOV SBUF0,A ;發(fā)送字符C的ASCII碼值 CALL DELAY ; MOV A,#04FH ;O MOV SBUF0,A ;發(fā)送字符O的ASCII碼值 CALL DELAY ; MOV A,#04DH ;M MOV SBUF0,A ;發(fā)送字符M的ASCII碼值 CALL DELAY ; MOV A,#04BH ;K MOV SBUF0,A ;發(fā)送字符K的ASCII碼值 CALL DELAY ; MOV A,#30H ;發(fā)送數(shù)字0的ASCII碼值 MOV SBUF0,A CALL DELAY ; MOV A,R7 ; ADD A,#30H ;生成鍵值的ASCII碼值 MOV SBUF0,A ;發(fā)送鍵值的ASCII碼值 SETB FLAG ;置位發(fā)送完成標(biāo)志 SJMP LOOP ;中斷服務(wù)程序 RECE: JNB TI,REC1 ;非發(fā)送轉(zhuǎn)接收處理 CLR TI ;否則,清除發(fā)送中斷標(biāo)志 RETI ;中斷返回 REC1: PUSH ACC ;保護(hù)累加器A MOV A,SBUF0 ;讀接收緩沖器 CJNE R6,#0,REC2 ; CJNE A,#43H,REC6 ;接收狀態(tài)為0,進(jìn)行字符C的過(guò)濾處理 MOV R6,#1 ;接收狀態(tài)改為1 SJMP REC6 ; REC2: CJNE R6,#1,REC3 ; CJNE A,#4FH,REC5 ;接收狀態(tài)為1,進(jìn)行字符O的過(guò)濾處理 MOV R6,#2 ;接收狀態(tài)改為2 SJMP REC6 ; REC3: CJNE R6,#2,REC4 ; CJNE A,#4DH,REC5 ;接收狀態(tài)為2,進(jìn)行字符M的過(guò)濾處理 MOV R6,#3 ;接收狀態(tài)改為3 MOV R5,#3 ;數(shù)據(jù)接收計(jì)數(shù)器設(shè)置為3 SJMP REC6 ; REC4: CJNE R6,#3,REC6 ; PUSH ACC ;接收狀態(tài)為3,暫存接收的內(nèi)容 MOV A,#REC_BUF0 ADD A,R5 MOV R0,A ;生成接收數(shù)據(jù)存放緩沖器地址 POP ACC ;恢復(fù)接收數(shù)據(jù)至A寄存器 MOV @R0,A ;保存接收的數(shù)據(jù) DEC R5 ;接收數(shù)據(jù)計(jì)數(shù)器減1 CJNE R5,#0,REC6 ; CALL DISPLAY ;接收數(shù)據(jù)計(jì)數(shù)器減為0,進(jìn)行接收結(jié)果的顯示 REC5: MOV R6,#0 ;接收狀態(tài)恢復(fù)為0(就緒狀態(tài)) REC6: POP ACC ;恢復(fù)累加器A CLR RI ;清除接收中斷標(biāo)志 RETI ;中斷返回 KEYBOARD: MOV A,P2 ;讀按鍵狀態(tài)輸入端口 RR A RR A RRC A ;KEY1有效鍵值移入位累加器C JC K1 ;鍵值無(wú)效轉(zhuǎn)KEY2鍵值的分析 MOV A,#1 ;否則,KEY1代碼送A寄存器 SJMP K5 K1: RRC A ;KEY2有效鍵值移入位累加器C JC K2 ;鍵值無(wú)效轉(zhuǎn)KEY3鍵值的分析 MOV A,#2 ;否則,KEY2代碼送A寄存器 SJMP K5 K2: RRC A ;KEY3有效鍵值移入位累加器C JC K3 ;鍵值無(wú)效轉(zhuǎn)KEY4鍵值的分析 MOV A,#3 ;否則,KEY3代碼送A寄存器 SJMP K5 K3: RRC A ;KEY4有效鍵值移入位累加器C JC K4 ;鍵值無(wú)效轉(zhuǎn)按鍵無(wú)效處理 MOV A,#4 ;否則,KEY4代碼送A寄存器 SJMP K5 K4: MOV A,#0FFH ;按鍵無(wú)效代碼送A寄存器 K5: RET DISPLAY: MOV A,REC_BUF1 ;讀取接收的第2字節(jié)數(shù)據(jù) SWAP A ;高、低4位交換 ANL A,#0FH ;分離高4位有效數(shù)值 CALL DECODE ;換碼 MOV DPTR,#NUM4 MOVX @DPTR,A ; NUM2顯示第2字節(jié)數(shù)據(jù)高4位數(shù)值 MOV A,REC_BUF1 ;讀取接收的第2字節(jié)數(shù)據(jù) ANL A,#0FH ;提取低4位有效數(shù)值 CALL DECODE ;換碼 MOV DPTR,#NUM5 MOVX @DPTR,A ; NUM3顯示第2字節(jié)數(shù)據(jù)低4位數(shù)值 MOV A,REC_BUF2 ;讀取接收的第3字節(jié)數(shù)據(jù) SWAP A ;高、低4位交換 ANL A,#0FH ;分離高4位有效數(shù)值 CALL DECODE ;換碼 MOV DPTR,#NUM2 MOVX @DPTR,A ; NUM4顯示第3字節(jié)數(shù)據(jù)高4位數(shù)值 MOV A,REC_BUF2 ;讀取接收的第3字節(jié)數(shù)據(jù) ANL A,#0FH ;提取低4位有效數(shù)值 CALL DECODE ;換碼 MOV DPTR,#NUM3 MOVX @DPTR,A ; NUM5顯示第3字節(jié)數(shù)據(jù)低4位數(shù)值 RET ;換碼程序 DECODE: MOV DPTR,#TAB MOVC A,@A+DPTR RET ;延時(shí)程序 DELAY: MOV R5,#80H D1: MOV R6,#0H DJNZ R6,$ DJNZ R5,D1 RET TAB: DB 0C0H,0F9H,0A4H,0B0H,099H,092H,082H,0F8H DB 080H,090H,088H,083H,0C6H,0A1H,086H,08EH $include (Init_Device.inc) END- 1.請(qǐng)仔細(xì)閱讀文檔,確保文檔完整性,對(duì)于不預(yù)覽、不比對(duì)內(nèi)容而直接下載帶來(lái)的問(wèn)題本站不予受理。
- 2.下載的文檔,不會(huì)出現(xiàn)我們的網(wǎng)址水印。
- 3、該文檔所得收入(下載+內(nèi)容+預(yù)覽)歸上傳者、原創(chuàng)作者;如果您是本文檔原作者,請(qǐng)點(diǎn)此認(rèn)領(lǐng)!既往收益都?xì)w您。
下載文檔到電腦,查找使用更方便
9.9 積分
下載 |
- 配套講稿:
如PPT文件的首頁(yè)顯示word圖標(biāo),表示該P(yáng)PT已包含配套word講稿。雙擊word圖標(biāo)可打開word文檔。
- 特殊限制:
部分文檔作品中含有的國(guó)旗、國(guó)徽等圖片,僅作為作品整體效果示例展示,禁止商用。設(shè)計(jì)者僅對(duì)作品中獨(dú)創(chuàng)性部分享有著作權(quán)。
- 關(guān) 鍵 詞:
- 北京工業(yè)大學(xué) 8051 單片機(jī) 實(shí)驗(yàn) 報(bào)告
鏈接地址:http://m.italysoccerbets.com/p-6475781.html