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

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

相关文档
最新文档