单片机电子时钟汇编语言程序
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
51 单片机架构下时钟控制程序 ;KEYA A 键功能程
序 ;KEYB B 键功能程序 ;KEYC C 键功能程序 ;KEYD D 键功能程序 ;KEYE E 键功能程序 ;BEEP_BL 整点报时
;P0 显示接口
****************************************************
KEYA EQU P3.0
;单片机控制设置 KEYB EQU P3.1 ;单片机控制设置 KEYC EQU P3.2 ;单片机控制设置 KEYD EQU P3.3 ;单片机控制设置 KEYE EQU P3.4 ;单片机控制设置 BEEP EQU P3.7
;单片机控制设置
ORG 0000H
AJMP MAIN
;转到系统初始化程序
ORG 000BH
AJMP PITO
;转到定时器 0 中断服务程序
ORG
0100H
MAIN: MOV
SP, #60H ;确立堆栈区
MOV TMOD, #01H ;设定定时器 0 为工作方式 1 MOV TL0, #0DCH
;装计数器初值
MOV TH0, #0BH
CLR 21H.0
CLR TR0 J TR0 置"0" ,定时关闭 SETB
EA J EA 置 "1" ,中断总允许
SETB
ET0
J ; ET0 置"1" ,定时器 0 中断 允
许
MOV 30H, #10H ; 循环次数
MOV 7EH, #0AH ;
p 点显示初始化
MOV R0, #79H
MOV R1, #05H
PP: MOV
@R0, #0BH
INC R0
DJNZ
R1, PP
MOV R0,
#31H ;
时、分、秒值存储单元清零
开启/关闭定时器 时值加 1 分值加 1 秒值加 1
12/24 时值转换
MOV R1, #06H
Q00: MOV @R0, #00H
INC R0
DJNZ R1, Q00
**********************************************************
LOOP: LCALL DIR ; 调显示子程序
LCALL KEY ; 调键扫描子程序
LOOP1: JB 20H.0, KEYA ; A 键是否按下,是跳转到A 键功能程序开启/关闭定时器
JB 20H.1, KEYB ; B 键是否按下,是跳转到 B 键功能程序时值加1
JB 20H.2, KEYC ; C 键是否按下,是跳转到 C 键功能程序分值加1
JB 20H.3, KEYD ; D 键是否按下,是跳转到D 键功能程序秒值加1
JB 20H.4, KEYE ; E 键是否按下,是跳转到 E 键功能程序12/24 时值转换
LCALL DIR
跳转到监控程序
LJMP LOOP ;
A 键功能子程序****************************************************
KEYA: CPL TR0 ;开启/关闭定时器
SETB 21H.0
AJMP LOOP ;返回
****************************************************
;B 键功能子程序
KEYB: JB TR0, KEYB1 ; 定时器是否运行,是跳转
JNB 21H.0, KEYB2
MOV R0, #36H 时值存储单元地址送R0
LCALL DAAD1 ; 调加 1 子程序
MOV A, R3 时值加 1 后的值送累加器 A
LCALL BEEP
BL ; 整点报时
_
XRL A, #12H ;时值是否到12 时
JNZ KEYB0 J
BACK: XRL A, #24H; 判是否到24 时
JNZ KEYB1 ; 时值是否到24 时,否返回
LCALL CLR0 时值存储单元清零
KEYB0: JB 20H.4, KEYB1; 是否启用12 时值,否返回
LCALL CLR0 时值存储单元清零
KEYB1: MOV 7DH, 35H
MOV 7EH, 36H
KEYB2: LJMP LOOP 返回监控程序
****************************************************
;C 键功能子程序
KEYC: JB 8CH, KEYC1 ; 定时器是否运行,否跳转
JNB
21H.0, KEYC2
MOV
R0,
#34H; 分值存储单元地址送
R0
LCALL
DAAD1
; 调加 1 子程序
MOV
A, R3;
分值加 1 后的值送累加器 A
XRL
A, #60H ;
JNZ
KEYC1 J 分值是否到 60 分, 否返回
LCALL
CLR0 J 分值存储单元清零
KEYC1:
MOV 7CH, 34H
MOV
7BH, 33H
KEYC2:
LJMP LOOP
J
返回监控程序
******************************************************
PITO: PUSH PSW
;中断服务程序,现场保护 PUSH A
SETB RS0
;选第三组通用寄存器
SETB RS1
MOV TL0, #0DCH
; 计数器重新加载 MOV TH0, #0BH
MOV A, 30H
;循环次数减 1
DEC A
MOV 30H, A
JNZ RETO
;不满 16 次,转 RET0 返
回
MOV 30H, #10H ;满 16 次开始计时操作
MOV R0, #32H
;秒显示单元地址 ACALL DAAD1
; 秒加 1
MOV A, R3 ; 加 1 后秒值在 R3 中 XRL A, #60H ;
判是否到 60 秒 JNZ RETO J
不到转 RET0 返回
ACALL
CLR0
; 到 60 秒显示单元清 0
MOV R0,
#34H ;
分显示单元地址 ACALL
DAAD1
; 分加 1
KEYD: JB
8CH, KEYD1
; 定时器是否运行,否跳转
JNB
21H.0, KEYD2
MOV
R0,
#32H ; 秒值存储单元地址送 R0
LCALL
DAAD1
; 调加 1 子程序
MOV
A, R3
; 秒值加 1 后的值送 R0
XRL
A, #60H
JNZ
KEYD1 J
秒值是否到 60 秒, 否返回
LCALL
CLR0 J
秒值存储单元清 0 KEYD1:
MOV 79H, 31H
MOV
7AH,
32H
KEYD2:
LJMP LOOP
J
返回监控程序
****************************************************
;D 键功能子程序