<微机原理>[汇编语言]-[实验五] 定时器实验

实验五 定时器实验

一、实验目的

  1. 学习定时器的工作原理及使用方法。

  2. 学习定时器的初始化程序、应用程序的编写和调试。

二、实验仪器

  1. Keil5
  2. 普中A2开发板
  3. stc-isp

三、实验内容

数码管间隔一秒循环显示0-F,一秒的时间要求采用内部定时器T0。

四、流程框图

在这里插入图片描述

五、实验程序

		ORG     0000H
    AJMP    START
    ORG     000BH
    AJMP    T0_INT
    ORG     0030H
START:                          ;系统初始化
    MOV     R0  ,   #00H        ;R0作为TO中断计数器
    MOV     R1  ,   #00H        ;R1存储显示数字
    MOV     DPTR,   #TAB1       ;指向字形码表首地址
    MOV     A   ,   #00H        ;初始化数码管显示0
    MOVC    A   ,   @A+DPTR     ;取字形码
    MOV     P0  ,   A           ;数码管显示0
    ANL     TMOD,   #0F0H       ;初始化定时器0
    ORL     TMOD,   #01H        ;设置定时器0工作方式1
    MOV     TL0 ,   #00H        ;设置定时器初值 50ms
    MOV     TH0 ,   #4CH        ;设置定时器初值
    CLR     TF0                 ;清除TF0标志
    SETB    TR0                 ;定时器0开始计时
    SETB    ET0                 ;开启T0溢出中断
    SETB    EA                  ;开启总中断
KEEP:
    SJMP    KEEP                ;等待定时器0中断
T0_INT:
    MOV     TL0 ,   #00H        ;重装定时器初值 50ms
    MOV     TH0 ,   #4CH        ;重装定时器初值
    INC     R0                  ;R0加1
    CJNE    R0  ,   #20 ,RETURN ;判断是否到达1s
    MOV     R0  ,   #00H        ;R0清0
    INC     R1                  ;显示值加1
    CJNE    R1  ,   #10H,SC     ;判断R1是否到了16,到了则置0进行循环
    MOV     R1  ,   #0          ;R1置0
SC:
    MOV     A   ,   R1          ;
    MOVC    A   ,   @A+DPTR     ;
    MOV     P0  ,   A           ;
    RETI
RETURN:
    RETI
TAB1:;0 - F共阴极字形码
    DB      03FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH;0-9
    DB      77H,7CH,39H,5EH,79H,71H
    
    END

六、程序分析

使用定时器0计时50ms,每50ms进入一次定时器0中断服务函数

使用R0作为T0中断的计数器,每50ms进入中断进行R0+1,若R0等于20,则说明计时1s。

使用R1存储数码管显示的数字,每计时1秒R1+1,若R1等于16,则R1置0,实现0~F循环。

思考题:

阐述定时器几种工作方式所实现的功能及应用时的注意事项。

定时器T0有两种工作模式(计数模式、定时模式)和4种工作方式(方式0,方式1,方式2,方式3)

工作模式

(1)计数模式

计数模式是指对外部事件进行计数,外部事件的发生以输入脉冲来表示,因此计数功能的实质就是对外来脉冲进行计数

(2)定时模式

定时功能也是通过计数来实现的,只不过此时的计数脉冲来自单片机芯片内部,是系统震荡脉冲经12分频后送来的,由于一个机器周期等于12个震荡脉冲周期,所以此时的定时器/计数器是每到一个机器周期就加1,计数频率位震荡脉冲频率的1/12。

工作方式

(1)方式0

为13位计数器,由TL的低5位和TH的在整个8位所构成。TL低5位溢出向TH进位,TH计数溢出则把TCON种的溢出标志位TF置位为1,此时,计数器会清0并暂停工作,待初值重新装入后才又开始工作。

(2)方式1

方式1与方式0基本相同,方式1为16位计数器,由TH作为高8位,TL作为低8位

(3)方式2

为自动恢复初值(初值自动装入)的高8位定时器/计数器,TL作为8位计数器用,TH作为8位常数缓存器,以保存计数初值。当TL计数溢出时,在置1溢出标志TF的同时,还自动将TH中保存的初值送至TL,使TL从初值开始重新计数。

方式2可以省去用户软件中重装初值的指令执行时间,简化定时初值的计算办法,可以相当精确地确定定时时间。

(4)方式3

方式3是为了增加1个附加的8位定时器/计数器提供的,从而使单片机具有三个定时器/计数器。只有定时器/计数器T0能工作于这种方式。

注意事项

初始化定时器时(以初始化定时器0为例),应使用ANL语句而不是MOV语句

ANL TMOD, #0F0H ;初始化定时器0

这样可以将影响定时器0工作方式的标志位清0,且不影响定时器1的工作方式。

再使用ORL语句设置定时器0的工作方式

ORL TMOD, #01H ;设置定时器0工作方式1

如果使用MOV语句,在设置定时器0工作方式的同时会影响定时器1的工作方式。

采用上面两条语句初始化则不需要关心定时器1的工作方式。做到一条语句只办一件事,增强了程序的复用性。

七、测试报告

每隔1秒,数码管显示的值+1,实现0~F循环显示

在这里插入图片描述

  • 4
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值