单片机电子时钟汇编语言程序

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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

相关文档
最新文档