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

  • 格式:doc
  • 大小:84.50 KB
  • 文档页数:8

下载文档原格式

  / 8
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

南昌航空大学实验报告

二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