单片机电子时钟设计(流程图+电路图+源程序+论文) 第2页
五:程序
SEC EQU 32H ;秒 即时时间 \伪指令
MIN EQU 31H ;分
HOUR EQU 30H ;时
DAY EQU 35H ;日
MON EQU 34H ;月
YEAR EQU 33H ;年
MIN_1 EQU 41H ;分 定时器1 路、开存储单元
HOUR_1 EQU 42H ;时
DAY_1 EQU 43H ;
MON_1 EQU 44H ;
YEAR_1 EQU 45H ;
MIN_11 EQU 40H ;分 定时器1 路、关存储单元
HOUR_11 EQU 46H ;时
DAY_11 EQU 47H ;日
MON_11 EQU 48H ;月
YEAR_11 EQU 49H ;年
;***********************
ORG 0000H
ljmp MAIN
ORG 0003H ;中断转换显示年月日、INT0(SB4 键)
LJMP SHOW
ORG 000BH ;计数中断 T0、方式1
LJMP TIME
ORG 0013H
LJMP CHANGE; 调整时间、定时、INT1(SB0 键)
;------主程序
ORG 0030H
MAIN:
;--------初始化付值
MOV YEAR , #02
MOV MON , #05
MOV DAY , #01
MOV HOUR , #00
MOV MIN , #00
MOV SEC , #00
CLR 40H ;定时单元1 路清零
CLR 41H
CLR 42H
CLR 43H
CLR 44H
CLR 45H
CLR 46H
CLR 47H
CLR 48H
CLR 49H
;-------开中断
MOV TMOD , #01H ;计数、模式1、T0
MOV TL0, #0B0H ;100SM 计数定时
MOV TH0, #3CH ;
clr p3.0
MOV 20H, #0AH ;10 次*100SM
SETB PT0 ;T0 为最高级
SETB TR0 ;允许计数
SETB ET0 ;允许T0 中断
SETB EX0 ;允许INT0 中断
SETB EX1 ;允许INT1 中断
SETB EA ;开总中断
;------显示、定时器启动判断
LOOP:
MOV R1, #30H; 存储单元
MOV R4, #01H; 位选通
MOV R3, #03H; 三组显示
NEXT:
MOV A , @R1 ;
MOV B , #10 ;将存储单元转换成两高低两组的BCD 码
DIV AB
SWAP A
ORL A, B
MOV P0, A;输出
MOV P2, R4
INC R1 ;下一单元
MOV A, R4 ;
RL A ;位移
MOV R4, A
LCALL DE5SM ;延时0.5SM
DJNZ R3, NEXT ;全扫描显示一偏
;------判断定时输出(只编写了一路)
CJNE R7, #88H,LOOP ;是8 则开,否则、定时已关、转
;---------开
MOV A, YEAR
CJNE A, YEAR_1, LOOP_1;年比较,不等转关
MOV A, MON
CJNE A, MON_1, LOOP_1
MOV A, DAY
CJNE A , DAY_1,LOOP_1
MOV A, HOUR
CJNE A, HOUR_1,LOOP_1
MOV A, MIN
CJNE A, MIN_1, LOOP_1
CPL P3.0
;---------关
LOOP_1:
MOV A, YEAR
CJNE A, YEAR_11, LOOP;年比较
MOV A, MON
CJNE A, MON_11, LOOP
MOV A, DAY
CJNE A , DAY_11,LOOP
MOV A, HOUR
CJNE A, HOUR_11,LOOP
MOV A, MIN
CJNE A, MIN_11, LOOP
CPL P3.0
LJMP LOOP
;-----年月日显示中断子程序
SHOW:
PUSH PSW
push ACC
PUSH B
PUSH 01H
PUSH 02H
PUSH 03H
PUSH 04H
MOV R2, #0FFH ;中断扫描次数
TURN: MOV R1 , #33H
MOV R4 , #01H
MOV R3 , #03H
NEXT_1:
MOV A, @R1
MOV B , #10
DIV AB
SWAP A
毕业论文http://www.751com.cn/ 论文网http://www.lwfree.com/ DJNZ R3, NEXT_1
DJNZ R2, TURN ;反复显示一定时间后返回
POP 04H
POP 03H
POP 02H
POP 01H
POP B
POP ACC
POP PSW
RETI
;-----计数中断服务子程序
TIME:
PUSH PSW
PUSH ACC
PUSH B
PUSH 06H
MOV TH0 , #3CH;重装计数
MOV TL0 , #0BH;
DJNZ 20H, OUT ;转到中断跳出pop 程序
MOV 20H, #0AH ; 重装:100*10=1000
;-----进位程序
INC SEC
MOV R6, SEC ;
CJNE R6, #60, OUT;比较
MOV SEC , #00 ;
INC MIN
MOV R6, MIN
CJNE R6, #60, OUT
MOV MIN , #00
INC HOUR
MOV R6 , HOUR
CJNE R6 , #25 , OUT
MOV HOUR ,#00
INC DAY
MOV R5, MON
CJNE R5, #1, MON_22;是否1 月、不是转2 月
MOV R5, DAY
CJNE R5, #32, OUT ; 本月是否益出
INC MON
MOV DAY,#1
LJMP OUT
OUT:
POP 06H