单片机时钟程序

ORG 0000H
AJMP MAIN
ORG 000BH
AJMP TIME

ORG 0300H
MAIN:
mov 20h,#00h
MOV 21H,#00H
MOV 22H,#00H
MOV 23H,#00H
MOV IP,#02H ;IP,IE
初始化
MOV IE,#82H
MOV TMOD,#01H ;
设定定时器工作方式?
MOV TL0,#0B0H
MOV TH0,#3CH
SETB TR0 ;
启动定时?
MOV SP,#40H ;
重设堆栈指针
NEXT: LCALL DISP ;
调用显示子程序?
LCALL KEY ;
调用按键检测子程序
JZ NEXT ;
LCALL ANKEY ;
调用按键处理子程序
SJMP NEXT ;
重新循环
NOP
NOP
NOP
;
定时中断处理程序:
TIME: PUSH ACC ;
保护现场
PUSH PSW
MOV TL0,#0B4H ;
赋定时初值
MOV TH0,#3CH
INC 20H ;
MOV A,20H
CJNE A,#20,RETI1
MOV 20H,#00H ;
一秒钟时间到
MOV A,21H
ADD A,#01H
DA A
MOV 21H,A
CJNE A,#60H,RETI1
MOV 21H,#00H ;
一分钟时间到
MOV A,22H
ADD A,#01H
DA A
MOV 22H,A
CJNE A,#60H,RETI1
MOV 22H,#00H ;
一小时时间到
MOV A,23H
ADD A,#01H
DA A
MOV 23H,A
CJNE A,#24H,RETI1
MOV 23H,#00H ;
到时间达到24小时,清零.
RETI1: POP PSW ;
恢复现场
POP ACC
RETI ;
中断返回?
NOP
NOP

;
显示子程序
DISP: ANL 2FH,#10H ;
处理小数点
MOV A,21H ;
处理秒21H-->2DH,2EH
ANL A,#0FH
ORL A,2FH
MOV 2FH,A
MOV A,21H
ANL A,# 0F 0H
SWAP A
MOV 2EH,A
ANL 2DH,#10H
MOV A,22H ;
处理分钟22H-->2CH,2DH
ANL A,#0FH
ORL A,2DH
MOV 2DH,A
MOV A,22H
ANL A,# 0F 0H
SWAP A
MOV 2CH,A
ANL 2BH,#10H
MOV A,23H ;
处理小时23H-->2AH,2BH
ANL A,#0FH
ORL A,2BH
MOV 2BH,A
MOV A,23H
ANL A,# 0F 0H
SWAP A
MOV 2AH,A
MOV R0,#2FH ;
显示偏移量
MOV R3,#06H
MOV DPTR,#TABLE
MOV A,#0BFH
LOOP1: MOV B,A ;
MOV P2,a
MOV A,@R0
MOVC A,@A+DPTR
MOV P0,a ;
送显示
MOV R2,#80H ;
延时
DJNZ R2,$
DEC R0
MOV A,B
RR A
DJNZ R3,LOOP1 ;
循环显示
RET

TABLE: db 28h,7eh, 0a 2h,62h,74h,61h,21h ;
不带小数点
DB 7ah,20h,60h,00,00,00,00,00,00
DB 8H,5eH,82H,42H,54H,41H,1H,5aH ;
带小数点
DB 00H,40H,00,00,00,00,00,00
NOP
NOP
;
按键判断程序
KEY: MOV P3,#0FFH ;
MOV A,P3
CPL A
ANL A,#3CH
JZ RETX ;
无键按下则返回
LCALL DISP ;
LCALL DISP
MOV A,P3
CPL A
ANL A,#3CH
JZ RETX ;
键盘去抖动。
MOV R6,A ;
将键值存入R6
LOOP2: LCALL DISP ;
MOV A,P3
CPL A
ANL A,#3CH
JNZ LOOP2 ;
等待键释放
MOV A,R6
RETX: RET
NOP
NOP
;
按键处理子程序
ANKEY: CLR EA ;
关中断
LX: MOV A,R6
JB ACC.2,L1 ;
是功能键转L1
JB ACC.3,L2 ;
是确认键转L2
JB ACC.4,L3 ;
是减1键转L3
JNB ACC.5,L12 ;
不是增1键,转L12
JB 2BH.4,L6 ;
判断使哪一位(时、分、秒)的值加1
JB 2DH.4,L8
JB 2FH.4,L 9

L12: LCALL DISP
LCALL DISP
LCALL KEY ;
判断有无键按下。
JZ L12
LJMP LX

L2: MOV 25H,#00H ;
确认键处理程序
CLR 2BH.4
CLR 2DH.4
CLR 2FH.4
SETB EA
RET

L3: JB 2BH.4,L61 ;
增一键处理程序
JB 2DH.4,L81
JB 2FH.4,L91
AJMP L 12

L1: MOV A,25H ;
功能键处理程序
JZ LB1
JB ACC.0,LB2
JB ACC.1,LB3
JNB ACC.2,L 12
LB1: MOV 25H,#01H ;25H
单元是标志位,(25H=01H调节时单元的值
SETB 2BH.4
CLR 2DH.4
CLR 2FH.4
AJMP L 12

LB3: MOV 25H,#04H ;25H
单元是标志位,(25H=01H调节秒单元的值
SETB 2FH.4
CLR 2DH.4
CLR 2BH.4
AJMP L 12

LB2: MOV 25H,#02H ;25H
单元是标志位,(25H=01H调节分单元的值
SETB 2DH.4
CLR 2BH.4
CLR 2FH.4
AJMP L 12

L61: AJMP L611 ;
L81: AJMP L811 ;
L91: AJMP L 911
L6: MOV A,23H ;
时加一
ADD A,#01H
DA A
MOV 23H,A
CJNE A,#24H,L 15
L15: JC L112
MOV 23H,#00H
L112: AJMP L 12

L8: MOV A,22H ;
分加一
ADD A,#01H
DA A
MOV 22H,A
CJNE A,#60H,L 16
L16: JC L112
MOV 22H,#00H
AJMP L 12

L9: MOV A,21H ;
秒加一
ADD A,#01H
DA A
MOV 21H,A
CJNE A,#60H,L 17
L17: JC L112
MOV 21H,#00H
AJMP L 12

L611: MOV A,23H ;
时减一
ADD A,#99H
DA A
MOV 23H,A
CJNE A,#99H,L112
MOV 23H,#23H
AJMP L 12

L811: MOV A,22H ;
分减一
ADD A,#99H
DA A
MOV 22H,A
CJNE A,#99H,L112
MOV 22H,#59H
AJMP L 12

L911: MOV A,21H ;
秒减一
ADD A,#99H
DA A
MOV 21H,A
CJNE A,#99H,L112
MOV 21H,#59H
AJMP L12
NOP
NOP
END

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Keil 单片机时钟程序是针对 Keil 软件开发工具的一种编程方式,用来控制单片机时钟管理。随着智能化时代的到来,单片机已经被广泛应用于各个领域,因此时钟程序的编写和管理变得越来越重要。 Keil 单片机时钟程序主要分为两种类型:外部晶振和内部时钟。外部晶振通常需要在嵌入式系统中外接一个晶体来进行稳定的时钟控制,而内部时钟则是通过芯片本身内置的时钟模块来实现。 在 Keil 软件开发工具中,时钟程序的编写其实就是配置 RCC 和 SysTick。其中 RCC 是时钟控制器,可以控制主时钟和各个外设的时钟。SysTick 是一个用于实现延时和周期统计的定时器模块。通过配置 RCC 和 SysTick,可以实现单片机时钟控制,如时钟频率的设置、延时和周期计数等操作。 具体来说,在 Keil 中编写时钟程序的步骤如下: 1. 配置 RCC。通过 RCC 的配置,可以实现系统时钟的设置、外设时钟的设置等操作。 2. 配置 SysTick。在 Keil 中,SysTick 可以用于延时和周期计数。通过配置 SysTick,可以设置延时时间和统计周期等参数。 3. 编写时钟程序。通过对 RCC 和 SysTick 的配置,可以实现单片机时钟控制。具体编写步骤可以参考 Keil 的相关文档和教程。 总之,Keil 单片机时钟程序是一种非常重要的编程方式,可以实现单片机时钟控制和管理。对于嵌入式系统的开发者来说,掌握该技能可以提高代码的可维护性和可靠性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值