当前位置:文档之家› 单片机实验 脉冲计数和电脑时钟程序

单片机实验 脉冲计数和电脑时钟程序

南昌航空大学实验报告二0一一年九月二十九日课程名称:单片微型机实验名称:脉冲计数和电脑时钟程序班级: 080611 学生姓名:学号: 08061108 指导教师评定:签名:一、实验目的1、熟悉8031定时/计数功能,掌握定时/计数初始化编程方法;2、熟悉MCS—51定时器、串行口和中断初始化编程方法,了解定时器应用在实时控制中程序的设计技巧;3、编写程序,从DVCC系列单片机实验仪键盘上输入时间初值,用定时器产生0.1S定时中断,对时钟计数器计数,并将数值实时地送数码管显示。

二、实验内容及要求1、脉冲计数对定时器0外部输入的脉冲进行计数,并送显示器显示。

程序框图如下:图1 二进制转换子程序2、电脑时钟程序程序程序框图如下:图2 定时中断服务程序三、实验步骤及操作结果1、脉冲计数程序(1) 当DVCC 单片机仿真实验系统独立工作时1) 把8032CPU 的P3.4插孔接T0—T7任一根信号线或单脉冲输出空“SP ”。

2)用连续方式从起始地址02A0H 开始运行程序(按02A0后按EXEC 键)。

3)观察数码管显示的内容应为脉冲个数。

(2) 脉冲计数程序(源文件名:Cont .Asm )。

汇编程序代码如下: ORG 02A0H CONT: MOV SP,#53H MOV TMOD,#05H;初始化定时/计数器MOV TH0,#00H MOV TL0,#00H SETB TR0 ;允许定时/计数中断CONT1: MOV R2,TH0 ;取计数值MOV R3,TL0 LCALL CONT2 ;调二转十进制子程序MOV R0,#79H MOV A,R6 LCALL PWOR MOV A,R5 LCALL PWOR MOV A,R4 LCALL PWORLCALL DISP ;调显示子程序 SJMP CONT1 ;循环CONT2: CLR A ;清R4、R5、R6MOV R4,A MOV R5,A MOV R6,AMOV R7,#10H CONT3: CLR C ;R2、R3左移,移出的位送CY MOV A,R3 RLC AMOV R3,AMOV A,R2RLC AMOV R2,AMOV A,R6ADDC A,R6;R4、R5、R6×2 + CY送R4、R5、R6DA 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 ;CDATA: DB0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H ,80H,90HDB88H,83H,0C6H,0A1H,86H,8EH,0FFH,0CH,8 9H,0DEH;拆送显示缓冲区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,#CDA TAMOV A,@R1MOVC A,@A+DPTRMOV DPTR,#0FF22HMOVX @DPTR,A DISP2: DJNZ R3,DISP2DEC R1CLR CMOV A,R2RRC AMOV R2,AJNZ DISP1MOV A,#0FFHMOV DPTR,#0FF22HMOVX @DPTR,ACLR 0D4HRET2、电脑时钟程序(1)用连续方式从起始地址0340H开始执行程序(输入0340后按EXEC键)。

(2)连续运行程序,在键盘上输入时间初值。

如果输入时分秒初值超范围,则显示000000后要求重新设置初值,初值的默认值为000000。

(3)再次按EXEC键时钟开始工作,数码管上实时显示时间值。

(4)电脑时钟程序(源文件名:Cock.Asm)。

汇编程序代码如下。

ORG 000BHLJMP TINTRUPORG 0340hCLOCK0: MOV SP,#50HMOV R0,#7EH;清显示缓冲区MOV R4,#06HCLR ACLOCK1: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: MOV 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 KEYDISP0 FANCKEY: 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,#1FFFHMOVX A,@DPTRMOV R1,AMOV A,R4MOV @R1,ACLR APOP 83HPOP 82HMOVC A,@A+DPTRINC DPTRCJNE A,01H,DATAKEY3DEC R1CLR AMOVC A,@A+DPTR DATAKEY2: PUSH 82HPUSH 83HMOV DPTR,#1FFFHMOVX @DPTR,APOP 83HPOP 82HINC DPTRPUSH 82HPUSH 83HRETDATAKEY3: DEC R1MOV A,R1SJMP DATAKEY2KEY0: MOV R6,#20H;数字键闪动程序MOV DPTR,#1FFFHMOVX A,@DPTRMOV R0,AMOV A,@R0MOV R7,AMOV A,#10HMOV @R0,AKEY3: LCALL KEYDISPJNB 0E5H,KEY2DJNZ R6,KEY3MOV DPTR,#1FFFHMOVX A,@DPTRMOV R0,AMOV A,R7MOV @R0,AKEY: MOV R6,#50HKEY1: LCALL KEYDISPJNB 0E5H,KEY2DJNZ R6,KEY1SJMP KEY0KEY2: MOV R6,AMOV A,R7MOV @R0,AMOV A,R6;A = 键值KEYEND: RETKEYDISP:LCALL DISP;调用显示子程序LCALL KEYSM;调用键扫子程序MOV R4,A;键值存R4MOV R1,#76HMOV A,@R1MOV R2,AINC R1MOV A,@R1MOV R3,AXRL A,R4MOV R3,04HMOV R4,02HJZ KEYDISP1MOV R2,#88HMOV R4,#88H KEYDISP1: DEC R4MOV A,R4XRL A,#82HJZ KEYDISP2MOV A,R4XRL A,#0EHJZ KEYDISP2MOV A,R4ORL A,R4JZ KEYDISP3MOV R4,#20HDEC R2LJMP KEYDISP5 KEYDISP3: 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,80H,90HDB 88H,83H,0C6H,0A1H,86H,8EH,0FFH,0CH,89H,0DEH 键扫子程序KEYSM:SETB 0D4HMOV A,#0FFHMOV DPTR,#0FF22HMOVX @DPTR,A KEYSM0: MOV R2,#0FEHMOV R3,#08HMOV R0,#00H KEYSM1: MOV A,R2 MOV DPTR,#0FF21H MOVX @DPTR,A;键矩阵中第1列置0 NOPRL AMOV R2,AMOV DPTR,#0FF23H ;读键的行值MOVX A,@DPTRCPL ANOPNOPNOPANL A,#0FHJNZ KEYSM2INC R0;无键且未到最后一列继续DJNZ R3,KEYSM1SJMP KEYSM10 KEYSM2: ;有键,计算键值CPL AJB 0E0H,KEYSM3MOV A,#00HSJMP KEYSM7 KEYSM3: JB 0E1H,KEYSM4MOV A,#08HSJMP KEYSM7 KEYSM4: JB 0E2H,KEYSM5MOV A,#10HSJMP KEYSM7 KEYSM5: JB 0E3H,KEYSM10MOV A,#18HKEYSM7: ADD A,R0CLR 0D4HCJNE A,#10H,KEYSM9 KEYSM9: JNC KEYSM10MOV DPTR,#KEYDATAMOVC A,@A+DPTR KEYSM10: RET ;返回KEYDATA: DB 07H,04H,08H,05H,09H,06H,0AH,0BH ;键值表(0—F)DB 01H,00H,02H,0FH,03H,0EH,0CH,0DH3、实验编译、调试及联接点击编译程序,如果编译正确,则点击联接按钮,显示联接成功后,点击窗口显示反汇编窗口、数显示据窗口、显示寄存器窗口等具体信息,再观察联接的硬件显示情况,并进行分析。

相关主题