南昌航空大学实验报告二0一一年 9月28 日课程名称:单片微型机实验名称:实验一软件实验9、10班级: 080611 姓名:吴智丽学号: 08061103指导教师评定:签名:一、实验目的1、熟悉8031定时/计数功能,掌握定时/计数初始化编程方法。
2、熟悉MCS—51定时器、串行口和中断初始化编程方法,了解定时器应用在实时控制中程序的设计技巧。
二、实验内容1、对定时器0外部输入的脉冲进行计数,并送显示器显示。
2、编写程序,从DVCC系列单片机实验仪键盘上输入时间初值,用定时器产生0.1S定时中断,对时钟计数器计数,并将数值实时地送数码管显示。
三、实验步骤脉冲计数1、实验程序框图2 、实验操作(1)把8032CPU的P3.4插孔接T0—T7任一根信号线或单脉冲输出空“SP”。
(2)用连续方式从起始地址02A0H开始运行程序(按02A0后按EXEC键)。
(3)观察数码管显示的内容应为脉冲个数。
(4)脉冲计数程序CONT: MOV SP,#53HMOV TMOD,#05H;初始化定时/计数器MOV TH0,#00HMOV TL0,#00HSETB TR0;允许定时/计数中断CONT1: MOV R2,TH0;取计数值MOV R3,TL0LCALL CONT2;调二转十进制子程序MOV R0,#79HMOV A,R6LCALL PWORMOV A,R5LCALL PWORMOV A,R4LCALL PWORLCALL DISP;调显示子程序SJMP CONT1;循环CONT2: CLR A;清R4、R5、R6MOV R4,AMOV R5,AMOV R6,AMOV R7,#10HCONT3: CLR C;R2、R3左移,移出的位送CYMOV A,R3RLC AMOV R3,AMOV A,R2RLC AMOV R2,AMOV A,R6ADDC A,R6;R4、R5、R6×2 + CY送R4、R5、R6 DA AMOV R6,A;十进制调整MOV A,R5ADDC A,R5DA AMOV R5,AMOV A,R4ADDC A,R4DA AMOV R4,ADJNZ R7,CONT3;循环16次RETPWOR: MOV R1,A ;;拆送显示缓冲区LCALL PWOR1MOV A,R1SWAP APWOR1: ANL A,#0FHMOV @R0,AINC R0RETDISP: SETB 0D4H;显示子程序MOV R1,#7EHMOV R2,#20HMOV R3,#00HDISP1: MOV DPTR,#0FF21HMOV A,R2MOVX @DPTR,AMOV DPTR,#CDATAMOV A,@R1MOVC A,@A+DPTRMOV DPTR,#0FF22HMOVX @DPTR,ADISP2: DJNZ R3,DISP2DEC R1CLR CMOV A,R2RRC AMOV R2,AJNZ DISP1MOV A,#0FFHMOV DPTR,#0FF22HMOVX @DPTR,ACLR 0D4HRETCDATA: DB0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H, 90HDB88H,83H,0C6H,0A1H,86H,8EH,0FFH,0CH,89H,0D EH电脑时钟1、实验程序框图2、实验操作(1) 用连续方式从起始地址0340H开始执行程序(输入0340后按EXEC键)。
(2) 连续运行程序,在键盘上输入时间初值。
如果输入时分秒初值超范围,则显示000000后要求重新设置初值,初值的默认值为000000。
(3) 再次按EXEC键时钟开始工作,数码管上实时显示时间值。
3、电脑时钟程序ORG 000BHLJMP TINTRUP ORG 0340hCLOCK0: MOV SP,#50HMOV R0,#7EH;清显示缓冲区MOV R4,#06HCLR A CLOCK1:MOV @R0,ADEC R0DJNZ R4,CLOCK1MOV A,#7EHMOV DPTR,#1FFFHMOVX @DPTR,AMOV 76H,#00H;初始化定时/计数器MOV 77H,#00HLCALL KEYDISP0;调显示键扫子程序LCALL DISDA0;调显示缓冲区放数程序MOV TMOD,#01HORL IE,#82HMOV TL0,#0B7HMOV TH0,#3CHMOV 23H,#00HSETB TR0 ;开定时中断CLOCK2: LCALL DISP;调显示子程序LCALL DISDA0;调显示缓冲区放数子程序SJMP CLOCK2 ;循环DISDA0: MOV R0,#79H ;显示缓冲区放数子程序MOV A,22HACALL DISDAMOV A,21HACALL DISDAMOV A,20HACALL DISDARETDISDA: M OV R1,AACALL DISDA1MOV A,R1SWAP ADISDA1: ANL A,#0FHMOV @R0,AINC R0RETTINTRUP: MOV TL0,#0B7H;定时器中断服务程序MOV TH0,#3CH;重新置初值PUSH PSWPUSH ACC;保护当前值SETB 0D3HINC 23H;0.1秒单元加1MOV A,23HCJNE A,#0AH,TINTRUP1;判1秒到否,未到继续MOV 23H,#00H;清0.1秒单元MOV A,22HINC A;秒单元加1DA AMOV 22H,ACJNE A,#60H,TINTRUP1;判60秒到否,未到继续MOV 22H,#00H;清秒计数单元MOV A,21HINC A;分单元加1DA AMOV 21H,ACJNE A,#60H,TINTRUP1;判60分到否,未到继续MOV 21H,#00H;清分计数单元MOV A,20HINC A;时单元加1DA AMOV 20H,ACJNE A,#24H,TINTRUP1;判24小时到否,未到继续MOV 20H,#00H;清时计数单元TINTRUP1:POP ACCPOP PSWRETI;返回主程序KEYDISP0:LCALL KEY;调显示键扫子程序JNC FANCKEY;转功能键处理DA TAKEY: LCALL DATAKEY1;数值键处理DB 79H,7EHSJMP KEYDISP0FANCKEY: CJNE A,#16H,KEYDISP0 ;是执行键,判输入的秒初值是否超限MOV A,7AHSWAP AORL A,79HMOV 22H,ACJNE A,#60H,FANCKEY1 FANCKEY1: JNC FANCKEY4;判输入的分初值是否超限MOV A,7CHSWAP AORL A,7BHMOV 21H,ACJNE A,#60H,FANCKEY2 FANCKEY2: JNC FANCKEY4;判输入的时初值是否超限MOV A,7EHSWAP AORL A,7DHMOV 20H,ACJNE A,#24H,FANCKEY3 FANCKEY3:JNC FANCKEY4RETFANCKEY4:CLR TR0LJMP CLOCK0DA TAKEY1:MOV R4,A;数字键处理子程序MOV DPTR,#1FFFH MOVX A,@DPTRMOV R1,AMOV A,R4MOV @R1,ACLR APOP 83HPOP 82HMOVC A,@A+DPTRINC DPTRCJNE A,01H,DATAKEY3DEC R1CLR AMOVC A,@A+DPTRDA TAKEY2: PUSH 82H PUSH 83HMOV DPTR,#1FFFHMOVX @DPTR,APOP 83HPOP 82HINC DPTRPUSH 82HPUSH 83HRETDA TAKEY3: DEC R1MOV A,R1SJMP DATAKEY2 KEY0: MOV R6,#20H;数字键闪动程序MOV DPTR,#1FFFHMOVX A,@DPTRMOV R0,AMOV A,@R0MOV R7,AMOV A,#10HMOV @R0,AKEY3: LCALL KEYDISP JNB 0E5H,KEY2DJNZ R6,KEY3MOV DPTR,#1FFFHMOVX A,@DPTRMOV R0,AMOV A,R7MOV @R0,AKEY: MOV R6,#50HKEY1: LCALL KEYDISPJNB 0E5H,KEY2DJNZ R6,KEY1SJMP KEY0KMOV A,@R1MOV R3,AXRL A,R4MOV R3,04HMOV R4,02HJZ KEYDISP1MOV R2,#88HMOV R4,#88HKEYDISP1: DEC R4MOV A,R4XRL A,#82HJZ KEYDISP2MOV A,R4XRL A,#0EHJZ KEYDISP2MOV A,R4ORL A,R4JZ KEYDISP3MOV R4,#20HDEC R2LJMP KEYDISP5KEYDISP3: MOV R4,#0FH KEYDISP2: MOV R2,04HMOV R4,03HKEYDISP5: MOV R1,#76HMOV A,R2MOV @R1,AINC R1MOV A,R3MOV @R1,AMOV A,R4CJNE R3,#10H,KEYDISP4 KEYDISP4: RETDISP: SETB 0D4H ;显示子程序MOV R1,#7EHMOV R2,#20HMOV R3,#00HDISP1: MOV DPTR,#0FF21HMOV A,R2MOVX @DPTR,AMOV DPTR,#DATACOMOV A,@R1MOVC A,@A+DPTRMOV DPTR,#0FF22HMOVX @DPTR,ADISP2: DJNZ R3,DISP2DEC R1CLR CMOV A,R2RRC AMOV R2,AJNZ DISP1MOV A,#0FFHMOV DPTR,#0FF22HMOVX @DPTR,ACLR 0D4HRETDA TACO: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,8 0H,90HDB88H,83H,0C6H,0A1H,86H,8EH,0FFH,0CH,89H ,0DEH键扫子程序KEYSM:SETB 0D4HMOV A,#0FFHMOV DPTR,#0FF22HMOVX @DPTR,AKEYSM0: MOV R2,#0FEHMOV R3,#08HMOV R0,#00HKEYSM1: MOV A,R2MOV DPTR,#0FF21HMOVX @DPTR,A;键矩阵中第1列置0NOPRL AMOV R2,AMOV DPTR,#0FF23H;读键的行值MOVX A,@DPTRCPL ANOPNOPNOPANL A,#0FHJNZ KEYSM2INC R0;无键且未到最后一列继续DJNZ R3,KEYSM1SJMP KEYSM10KEYSM2: ;有键,计算键值CPL AJB 0E0H,KEYSM3MOV A,#00HSJMP KEYSM7KEYSM3: JB 0E1H,KEYSM4MOV A,#08HSJMP KEYSM7KEYSM4: JB 0E2H,KEYSM5MOV A,#10HSJMP KEYSM7KEYSM5: JB 0E3H,KEYSM10MOV A,#18HKEYSM7: ADD A,R0CLR 0D4HCJNE A,#10H,KEYSM9KEYSM9: JNC KEYSM10MOV DPTR,#KEYDATAMOVC A,@A+DPTRKEYSM10: RET ;返回KEYDATA: DB 07H,04H,08H,05H,09H,06H,0AH,0BH ;键值表(0—F)DB01H,00H,02H,0FH,03H,0EH,0CH,0DH四、实验小结通过本次实验了解了单片机工作的基本原理,再次复习了汇编语言编写的相关内容,练习了单片机汇编程序设计的相关知识。