⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 yss215.asm

📁 用芯片AT89C51做的简单的万年历
💻 ASM
字号:
ORG 0
 SJMP STAR
 ORG 0013H
 LJMP XW
ORG 001BH
LJMP TLSTART
 ORG 30H
STAR:; CLR RS0        ;主程序,初始化,等待中断
      ;CLR RS1
      MOV SP,#30H
      MOV TMOD,#10H
      SETB PX1      ;外中断优先级高
      CLR IT1       ;外中断申请信号;低电平
     MOV IE,#8CH     ;开中断
     MOV TH1,#3CH   ;设置定时器中断次数初值
     MOV TL1,#0B0H   
     MOV 40H,#2    
     MOV 20H,#80H
     MOV 70H,#40  ;秒
     MOV 71H,#58  ;分
     MOV 72H,#23  ;时
     MOV 73H,#4   ;天
     MOV 74H,#6   ;月
     MOV 75H,#08  ;年
     MOV 76H,#20  ;年
     SETB P3.3
     SETB P3.4
     SETB TR1
E01: SJMP E01  ;等待溢出
;;;;;;;;;;;;;;;;;;
XW: PUSH ACC   ;外中断
    MOV A,20H  ;移动标志位并修改内容
    JB ACC.6,E60  
    RL A
    MOV  20H,A
     SJMP E20
E60:MOV 20H,#1
E20:JNB P3.4,E20 ;检测JIA下降沿;等待变成1
E30:JB P3.4,E30  ;等待变成0
    JB P3.3,E37  ;JIA下降沿时,若P3.3为1,退出子程序
    ; MOV A,20H
    JB 20H.6,E36  
    JB 20H.5,E35
    JB 20H.4,E34
    JB 20H.3,E33
    JB 20H.2,E32
    JB 20H.1,E31

    INC 70H      ;修改秒
    MOV A,70H
    CJNE A,#60,BTOD
    MOV 70H,#0
    SJMP  BTOD
E31:INC 71H    ;修改分
    MOV A,71H
    CJNE A,#60,BTOD
    MOV 71H,#0
    SJMP  BTOD
E32: INC 72H  ;修改时
     MOV A,72H
     CJNE A,#24,BTOD
     MOV 72H,#0
     SJMP  BTOD
E33: SJMP YUE  ; 跳转YUE,修改天
E34:INC 74H    ;修改月
    MOV A,74H
    CJNE A,#13,BTOD
    MOV 74H,#1
     SJMP  BTOD
E35:INC 75H     ;修改低年
    MOV A,75H
   CJNE  A,#100,BTOD
   MOV 75H,#0
   SJMP BTOD
E36:INC 76H   ;修改高年
   MOV A,76H
   CJNE  A,#100,BTOD
   MOV 76H,#0
BTOD:ACALL BTOD5
    ACALL DISP
    SJMP E20
E37:POP ACC
    RETI
;;;;;;;;;;;;;;;
AA:MOV 73H,#1  ;中间跳转
 SJMP BTOD
;;;;;;;;;;;;;;;
YUE: MOV A,74H 
   CJNE A,#2,SS
   MOV A,75H
   CJNE A,#0,ss1;判断75H内是0,向下执行

   MOV A,76H   ;76H,即检验能否被400除
   MOV B,#4
   DIV AB
   MOV A,B
   JZ ss2
   SJMP ss3

ss1:MOV A,75H ;75H不为0,验证75H能否被4整除
    MOV  B,#4
    DIV AB
    MOV A,B
    JZ ss2
    SJMP ss3

ss2:INC 73H      ;闰年时二月
    MOV A,73H
    CJNE A,#30,BTOD    
    SJMP AA
ss3: INC 73H    ;平年时二月
    MOV A,73H
    CJNE A,#29,BTOD
    SJMP AA              
SS: MOV A,74H   ;除二月其它月
    ACALL seg7
    INC  73H
    CJNE A,73H,BTOD
    SJMP AA
;;;;;;;;;;;;;;;
BTOD5: MOV R0,#70H  ;数据转换子程序
       MOV R1,#50H 
BTOD1: MOV A,@R0
       MOV B,#10
       DIV AB
       MOV @R1,B
      SWAP A
      ORL A,@R1
      MOV @R1,A
      INC R1
     INC  R0
     CJNE R0,#77H,BTOD1
     RET
;;;;;;;;;;;;;;;;
DISP: MOV R1,#50H ;显示子程序
      MOV A,@R1  
      MOV  P1,A  ;显示秒
     CLR P3.2
     SETB P3.2
     NOP
    INC  R1   
    MOV A,@R1
    MOV P1,A   ;显示分
    CLR P3.1  
    SETB P3.1  ;产生锁存信号
     NOP
    INC R1
   MOV A,@R1
   MOV P1,A   ;显示时
   CLR P3.0  
   SETB P3.0  ;产生锁存信号
    NOP
   INC  R1
   MOV A,@R1
   MOV P1,A   ;显示天
   CLR P2.2  
   SETB P2.2  ;产生锁存信号
    NOP
    INC  R1
    MOV A,@R1
    MOV P1,A   ;显示月
    CLR P2.1
    SETB P2.1   ;产生锁存信号
    NOP

    INC  R1   
    MOV A,@R1
    MOV P1,A    ;显示年 
    CLR P2.0
     SETB P2.0  ;产生锁存信号
    NOP
    INC  R1
    MOV A,@R1
    MOV P1,A    ;显示年 
    CLR P2.3  
    SETB P2.3   ;产生锁存信号
    NOP
 RET
;;;;;;;;;;;;
TLSTART: ;SETB RS1   ;定时中断
        ;CLR RS0
       PUSH ACC
       MOV TH1,#3CH
       MOV TL1,#0B0H
       DJNZ 40H,E50
       MOV    40H,#2
       ACALL BTOD5
       INC  70H    ;够1秒
       MOV A,70H
       CJNE A,#60,BTOD2
       MOV 70H,#0
       INC 71H    ;够1分
       MOV A,71H
       CJNE A,#60,BTOD2
       MOV 71H,#0
       INC  72H   ;够1小时
       MOV A,72H
       CJNE A,#24,BTOD2
       MOV 72H,#0

;;;;;;;;;;;
 SJMP  YUEE   ;跳到YUEE 判断修改天
;;;;;;;;;;;;
BB:MOV 73H,#1  ;中间跳转
  ;SJMP  CC
;;;;;;;;;;
CC:INC  74H    ;够1月
   MOV A,74H
   CJNE A,#13,BTOD2
   MOV 74H,#1
   INC  75H   ;够1年
   MOV A,75H
   CJNE A,#100,BTOD2
   MOV 75H,#0
   INC 76H    ;够100年
   MOV A,76H
   CJNE A,#100,BTOD2
   MOV 76H,#0
BTOD2:ACALL  BTOD5 
      ACALL DISP
E50:   CLR RS0
      CLR RS1
      POP ACC
      RETI
;;;;;;;;;;;;;;
YUEE:MOV A,74H 
   CJNE A,#2,KK
   MOV A,75H
   CJNE A,#0,kk1; 75H为0向下执行

   MOV A,76H   ; 看76H,即检验能否被400整除
   MOV B,#4
   DIV AB
   MOV  A,B
   JZ kk2
   SJMP kk3
kk1:MOV A,75H  ;75H不为0 ,只验证75H能不能被4整除
    MOV  B,#4
    DIV AB
    MOV A,B
    JZ kk2
   SJMP  kk3

kk2:INC 73H     ;闰年时二月
    MOV A,73H
    CJNE A,#30,BTOD2
    SJMP  BB  

kk3: INC 73H    ;平年时二月
    MOV A,73H
    CJNE A,#29,BTOD2
    SJMP BB  
KK: MOV A,74H    ;除二月其它月
   ACALL SEG7
    INC  73H
   CJNE A,73H,BTOD2
   SJMP BB
;;;;;;;;;;;;;;;;;
SEG7:MOVC A,@A+PC
    RET
TAB: DB 32,28,32,31,32,31,32,32,31,32,31,32
;;;;;;;;;;;;;;;;;
END







⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -