注册 登录
电子工程世界-论坛 返回首页 EEWORLD首页 频道 EE大学堂 下载中心 Datasheet 专题

chenht7的个人空间 http://home.eeworld.com.cn/space-uid-490705.html [收藏] [复制] [分享] [RSS]

日志

单片机_汇编编程_12_00-59定时器

已有 173 次阅读2017-10-7 16:06 |个人分类:汇编

 单片机_汇编编程_00-59定时器
时间:2017/10/6

# 一、任务描述
通过汇编编程,实现在数码管上,每间隔1s,更新一次数码管中,显示的数值。

# 二、任务实现
## 2.1 硬件连接
目前的硬件线路如下:
主控芯片: STC 89C52
输入引脚: 无
输出引脚: P0,P2 - 驱动两个共阳数码管
工作频率: 12MHz

[图 12_00-59定时器_IO]

## 2.2 分析命题
这次主要的功能如下:
1. 要产生间隔1s的延时函数 <-- 计数器实现
2. 数据需要通过数码管进行显示 <-- 要设置对应的查找表数组,便于调用
3. 数码管为2位,只能显示个位和十位 <-- 设置循环判断,便于溢出时的初始化

## 2.3 确定算法
先给数据赋予初值,用定时器对延时的时间进行计数。然后每间隔一秒,将定时器中的数值进行增一,并且通过端口P0与P2,将数据进行输出。当数据满60秒的时候,数值进行重新初始化,从0开始计数。

## 2.4 流程图

[图 12_00-59定时器_流程图]

## 2.5 程序

```
Second EQU 30H
ORG 00H
START:
    MOV Second, #00H          ; 设置秒定时器的初始值
NEXT:
    MOV A, Second               ; 将秒定时器中的数据储存到寄存器A中
    MOV B, #10                   ; 因被除数是十进制,故设被除数为10
    DIV AB                          ; 将A=A/10,B=A%10
    MOV DPTR, #TABLE       ; 调用数据表
    MOVC A, @A+DPTR        ; 将查表后的数据,通过程序寄存器传输到寄存器A
    MOV P0, A                     ; 将数据A通过端口P0进行输出
    MOV A, B                       ; 数据B传给寄存器B
    MOVC A, @A+DPTR        ; 将查表后的数据,通过程序存储器中的数据传给寄存器A
    MOV P2, A                     ; 将寄存器A中数据通过P2口输出
    LCALL DELY1S               ; 调用延时1秒的函数
    INC Second                   ; 秒寄存器进行自增一
    MOV A, Second              ; 将秒寄存器中的数值传给寄存器A
    CJNE A, #60, NEXT        ; 如果寄存器A中数值没有满60.则跳回到本段前面部分,将计数值进行显示
    LJMP START                  ; 计数满60后,跳转到初始位置,进行重新赋值

;---------------------------------------------------

DELY1S:                           ; 延时1秒
    MOV R5, #100              ; 执行一次,1个机器周期
D2:
    MOV R6, #20                ; 需执行100次,每次一个机器周期。1*100
D1:
    MOV R7, #248              ; 1*100*20
    DJNZ R7, $                   ; 2*100*20*248
    DJNZ R6, D1                 ; 2*100*20
    DJNZ R5, D2                 ; 2*100
    RET                             ; 2
    ; 总时间:1+1*100+100*20+2*100*20*248+2*100*20+2*100+2=998 303 us = 1 s

;---------------------------------------------------

TABLE:                           ; 驱动的是共阳数码管,段码 
    DB 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90
    END

```


# 三、总结
目前这个实验所实现的效果,结合了查表、计数以及这个将数据进行分割个位与十位。

# 参考资料
[1] 《单片机的编程与汇编程序案例》, https://wenku.baidu.com/view/9018d6795acfa1c7aa00cc58.html

评论 (0 个评论)

facelist doodle 涂鸦板

您需要登录后才可以评论 登录 | 注册

小黑屋|手机版|Archiver|电子工程世界 ( 京ICP证 060456

GMT+8, 2017-12-18 22:22 , Processed in 0.137535 second(s), 11 queries , Redis On.

Powered by EEWORLD电子工程世界

© 2017 http://bbs.eeworld.com.cn/

返回顶部