毕业论文基于STC89C52RC万年历程序.docVIP

  • 6
  • 0
  • 约1.64万字
  • 约 50页
  • 2018-06-08 发布于贵州
  • 举报
毕业论文基于STC89C52RC万年历程序

TICK_CNT EQU 40H ;T0溢出计数器 SECOND EQU 41H ;存储数据用真值,未用BCD码 MINUTE EQU 42H HOUR EQU 43H DAY EQU 44H MONTH EQU 45H YEAR EQU 46H YUSHU EQU 47H ;存放余数 FLASH_FLAG EQU 27H ;时间日期调整标志 ;R7: 0-时间;1-日期 ;中断向量表 ORG 0000H LJMP MAIN ORG 0003H LJMP EX0_INT ORG 000BH LJMP T0_INT ORG 0013H LJMP EX1_INT ;主程序 ORG 0030H MAIN: NOP ;初始化堆栈 MOV SP,#60H ;初始化变量 MOV SECOND,#0 MOV MINUTE,#0 MOV HOUR,#0 MOV DAY,#21 MOV MONTH,#1 MOV YEAR,#96 MOV FLASH_FLAG,#00H MOV R7,#00H ; MOV TL0,#0B0H ; 定时50ms MOV TH0,#3CH MOV TICK_CNT,#20 ;装计数初值(1s计数器) MOV TMOD,#01H SETB ET0 SETB EX0 SETB EX1 SETB EA ;开中断 SETB PX0 SETB PX1 ;设置中断优先级 SETB TR0 ; 启动定时器T0 LOPP:LCALL DISPLAY ;调用显示子程序 LJMP LOPP ; ------------------------------------------------- ; 定时器0中断 T0_INT: MOV TL0,#0B0H MOV TH0,#3CH ; 重装载 DJNZ TICK_CNT,NOT_1S ;1秒到? AJMP IS_1S NOT_1S: LJMP T0_RET ; 1秒时间到 IS_1S: PUSH ACC MOV A,SECOND CJNE A,#59,IN3 ; 59s到? AJMP IN4 IN3: LJMP SECOND_INC ; 秒加1 IN4: MOV SECOND,#0 ; 秒进位 MOV A,MINUTE CJNE A,#59,IN5 ; 59分到? AJMP IN6 IN5: LJMP MINUTE_INC IN6: MOV MINUTE,#0 ; 分进位 MOV A,HOUR CJNE A,#23,HOUR_INC ; 23h到? MOV HOUR,#0 ; 时进位 MOV A,MONTH CJNE A,#2,NOT_FEB ; 是否二月? ;2月处理 ;-------------------------- FEB: NOP ACALL DIV4 MOV A,YUSHU CJNE A,#0,NOT_LEAP_Y ;是否闰年? LEAP_Y: MOV A,DAY ;闰年 CJNE A,#29,DAY_INC MOV DAY,#1 MOV MONTH,#3 LJMP RESET_CNT ;非闰年 NOT_LEAP_Y: MOV A,DAY CJNE A,#28,DAY_INC ; MOV DAY,#1 MOV MONTH,#3 LJMP RESET_CNT ;--------------------------- ;非2月处理 ;30/31天? NOT_FEB:NOP CJNE A,#4,Y01 AJMP MON_30D Y01: CJNE A,#6,Y02 ;是否小月? AJMP MON_30D Y02: CJNE A,#9,Y03 AJMP MON_30D Y03: CJNE A,#11,T11 AJMP MON_30D ;31天 T11: MOV A,DAY ;大月 CJNE A,#31,DAY_INC AJMP NEXT_MONTH ;30天 MON_30D:MOV A,DAY ;小月 CJNE A,#30,DAY_INC ;天进位 NEXT_MONTH: MOV DAY,#1 MOV A,MONTH CJNE A

文档评论(0)

1亿VIP精品文档

相关文档