单片机实验 脉冲计数和电脑时钟程序
- 格式:doc
- 大小:84.50 KB
- 文档页数:8
南昌航空大学实验报告
二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 PWOR
LCALL DISP ;调显示子程序 SJMP CONT1 ;循环
CONT2: CLR A ;清R4、R5、R6
MOV R4,A MOV R5,A MOV R6,A
MOV R7,#10H CONT3: CLR C ;R2、R3左移,移出的位送CY MOV A,R3 RLC A
MOV R3,A
MOV A,R2
RLC A
MOV R2,A
MOV A,R6
ADDC A,R6
;R4、R5、R6×2 + CY送R4、R5、R6
DA A
MOV R6,A
;十进制调整
MOV A,R5
ADDC A,R5
DA A
MOV R5,A
MOV A,R4
ADDC A,R4
DA A
MOV R4,A
DJNZ R7,CONT3
;循环16次
RET
PWOR: MOV R1,A ;
CDATA: DB
0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H ,80H,90H
DB
88H,83H,0C6H,0A1H,86H,8EH,0FFH,0CH,8 9H,0DEH
;拆送显示缓冲区
LCALL PWOR1
MOV A,R1
SWAP A
PWOR1: ANL A,#0FH
MOV @R0,A
INC R0
RET
DISP: SETB 0D4H
;显示子程序
MOV R1,#7EH
MOV R2,#20H
MOV R3,#00H
DISP1: MOV DPTR,#0FF21H
MOV A,R2
MOVX @DPTR,A
MOV DPTR,#CDA TA
MOV A,@R1
MOVC A,@A+DPTR
MOV DPTR,#0FF22H
MOVX @DPTR,A DISP2: DJNZ R3,DISP2
DEC R1
CLR C
MOV A,R2
RRC A
MOV R2,A
JNZ DISP1
MOV A,#0FFH
MOV DPTR,#0FF22H
MOVX @DPTR,A
CLR 0D4H
RET
2、电脑时钟程序
(1)用连续方式从起始地址0340H开始执行程序(输入0340后按EXEC键)。
(2)连续运行程序,在键盘上输入时间初值。如果输入时分秒初值超范围,则显示000000后要求重新设置初值,初值的默认值为000000。
(3)再次按EXEC键时钟开始工作,数码管上实时显示时间值。
(4)电脑时钟程序(源文件名:Cock.Asm)。汇编程序代码如下。
ORG 000BH
LJMP TINTRUP
ORG 0340h
CLOCK0: MOV SP,#50H
MOV R0,#7EH
;清显示缓冲区
MOV R4,#06H
CLR A
CLOCK1:MOV @R0,A
DEC R0
DJNZ R4,CLOCK1
MOV A,#7EH
MOV DPTR,#1FFFH
MOVX @DPTR,A
MOV 76H,#00H
;初始化定时/计数器
MOV 77H,#00H
LCALL KEYDISP0
;调显示键扫子程序
LCALL DISDA0
;调显示缓冲区放数程序
MOV TMOD,#01H
ORL IE,#82H
MOV TL0,#0B7H
MOV TH0,#3CH
MOV 23H,#00H
SETB TR0 ;开定时中断CLOCK2: LCALL DISP
;调显示子程序
LCALL DISDA0
;调显示缓冲区放数子程序
SJMP CLOCK2 ;循环DISDA0: MOV R0,#79H
;显示缓冲区放数子程序
MOV A,22H
ACALL DISDA
MOV A,21H
ACALL DISDA
MOV A,20H
ACALL DISDA
RET
DISDA: MOV R1,A
ACALL DISDA1
MOV A,R1
SWAP A
DISDA1: ANL A,#0FH
MOV @R0,A
INC R0
RET
TINTRUP: MOV TL0,#0B7H
;定时器中断服务程序
MOV TH0,#3CH
;重新置初值
PUSH PSW
PUSH ACC
;保护当前值
SETB 0D3H
INC 23H
;0.1秒单元加1
MOV A,23H
CJNE A,#0AH,TINTRUP1
;判1秒到否,未到继续
MOV 23H,#00H
;清0.1秒单元
MOV A,22H
INC A
;秒单元加1
DA A
MOV 22H,A
CJNE A,#60H,TINTRUP1
;判60秒到否,未到继续
MOV 22H,#00H
;清秒计数单元
MOV A,21H
INC A
;分单元加1
DA A
MOV 21H,A
CJNE A,#60H,TINTRUP1
;判60分到否,未到继续
MOV 21H,#00H
;清分计数单元
MOV A,20H
INC A
;时单元加1
DA A
MOV 20H,A
CJNE A,#24H,TINTRUP1
;判24小时到否,未到继续
MOV 20H,#00H
;清时计数单元TINTRUP1:POP ACC