单片机电子时钟汇编语言程序
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
51单片机架构下时钟控制程序
;KEYA A键功能程序开启/关闭定时器
;KEYB B键功能程序时值加1
;KEYC C键功能程序分值加1
;KEYD D键功能程序秒值加1
;KEYE E键功能程序12/24时值转换
;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 ; TR0置"0",定时关闭
SETB EA ; EA置"1",中断总允许
SETB ET0 ; 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 ; 时、分、秒值存储单元清零
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 ;
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 ; 定时器是否运行,否跳转
MOV R0, #34H; 分值存储单元地址送R0
LCALL DAAD1 ; 调加1子程序
MOV A, R3 ;分值加1后的值送累加器A
XRL A, #60H ;
JNZ KEYC1 ; 分值是否到60分,否返回
LCALL CLR0 ; 分值存储单元清零
KEYC1: MOV 7CH, 34H
MOV 7BH, 33H
KEYC2: LJMP LOOP ; 返回监控程序
;D键功能子程序**************************************************** 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 ; 秒值是否到60秒,否返回
LCALL CLR0 ; 秒值存储单元清0 KEYD1: MOV 79H, 31H
MOV 7AH, 32H
KEYD2: LJMP LOOP ; 返回监控程序
;中断服务程序****************************************************** 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 ; 不到转RET0返回
ACALL CLR0 ; 到60秒显示单元清0
MOV R0, #34H ;分显示单元地址
ACALL DAAD1 ; 分加1