单片机电子时钟汇编语言程序 联系客服

发布时间 : 星期六 文章单片机电子时钟汇编语言程序更新完毕开始阅读1a81486a7e21af45b307a8cc

51单片机架构下时钟控制程序

;KEYA A键功能程序 开启/关闭定时器 ;KEYB B键功能程序 时值加1 ;KEYC C键功能程序 分值加1 ;KEYD D键功能程序 秒值加1

;KEYE E键功能程序 12/24时值转换 ;BEEP_BL整点报时 ;P0 显示接口

;系统初始化程序****************************************************

KEYA EQU P3.0

ORG 0000H AJMP MAIN

ORG 000BH AJMP PITO

;转到系统初始化程序

KEYB EQU P3.1 KEYC EQU P3.2 KEYD EQU P3.3 KEYE EQU P3.4 BEEP EQU P3.7

;单片机控制设置 ;单片机控制设置 ;单片机控制设置 ;单片机控制设置 ;单片机控制设置 ;单片机控制设置

;转到定时器0中断服务程序

ORG 0100H

MAIN: MOV SP, #60H MOV TMOD, #01H MOV TL0, #0DCH

MOV TH0, #0BH CLR 21H.0 CLR TR0 ; SETB EA ;

;确立堆栈区

;设定定时器0为工作方式1 ;装计数器初值

TR0置\,定时关闭 EA置\,中断总允许

SETB ET0 ; ET0置\,定时器0中断 ; 允许 MOV 30H, #10H ; MOV 7EH, #0AH ; MOV R0, #79H MOV R1, #05H PP: MOV @R0, #0BH INC R0

DJNZ R1, PP

MOV R0, #31H ;

循环次数 P.点显示初始化

时、分、秒值存储单元清零

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 ; 时值加1

JB 20H.2, KEYC ; 分值加1

JB 20H.3, KEYD 秒值加1

JB 20H.4, KEYE

C键是否按下,是跳转到C键功能程序 B键是否按下,是跳转到B键功能程序

; D键是否按下,是跳转到D键功能程序 ; 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 ; 定时器是否运行,否跳转

JNB 21H.0, KEYC2

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 LCALL CLR0

KEYD1: MOV 79H, 31H MOV 7AH, 32H KEYD2: LJMP LOOP

;

返回监控程序 ; ;

秒值是否到60秒,否返回 秒值存储单元清0

;中断服务程序****************************************************** PITO: PUSH PSW PUSH A SETB RS0

;中断服务程序,现场保护 ;选第三组通用寄存器 ;

计数器重新加载

SETB RS1

MOV TL0, #0DCH MOV TH0, #0BH MOV A, 30H

DEC A

MOV 30H, A JNZ RETO MOV 30H, #10H

;循环次数减1

;不满16次,转RET0返回 ;满16次开始计时操作 ;秒显示单元地址 ; 秒加1

加1后秒值在R3中 判是否到60秒 不到转RET0返回 ; 到60秒显示单元清0 分显示单元地址 ; 分加1

MOV R0, #32H ACALL DAAD1 MOV A, R3 ; XRL A, #60H ; JNZ RETO ; ACALL CLR0 MOV R0, #34H; ACALL DAAD1

MOV A, R3 ;

XRL A, #60H ; JNZ RETO ; ACALL CLR0 MOV R0, #36H ;

加1后分值在R3中 判是否到60分 不到转RET0返回

; 到60分显示单元清0 时显示单元地址

时加1

加1后时值在R3中

ACALL DAAD1 MOV A, R3 ; ;

LCALL BEEP_BL ; 整点报时

XRL A, #12H ; 时值是否到12时

JNZ KEYB3 ;

XRL A, #24H ; 判是否到24时

;

不到转RET0返回

JNZ RETO

ACALL CLR0 ; 到24时显示单元清0 KEYB3:JB 20H.4, RETO; 是否启用12时值,否返回 ACALL CLR0 RETO: CLR RS0 CLR RS1 POP A

; 时值存储单元清零 ; 返回第0组通用寄存器

;

现场恢复

POP PSW MOV 79H, 31H ; MOV 7AH, 32H

时、分、秒值放缓冲区

MOV 7BH, 33H MOV 7CH, 34H MOV 7DH, 35H MOV 7EH, 36H RETI ; 中断返回

;加1子程序******************************************************* DAAD1: MOV A, @R0 ; 加1子程序,十位送A DEC R0 SWAP A

;

十位数占高4位

ORL A, @R0 ; ADD A, #01H ; DA A MOV R3, A

;

个位数占低4位 加1

; 十进制调整 全值暂存R3中

屏蔽十位数,取出个位数 ; 个位值送显示缓冲单元

ANL A, #0FH ; MOV @R0, A MOV A, R3 INC R0

ANL A, #0F0H ; SWAP A MOV @R0, A RET CLR0: CLR A MOV @R0, A

; ;

屏蔽个位数取出十位数 ; ;

使十位数占低四位 十位数送缓冲单元

返回

清缓冲单元子程序

; 十位缓冲单元清\