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

📄 at89s52.asm

📁 基于AT89S52单片机的电子万年历设计制作的汇编程序
💻 ASM
📖 第 1 页 / 共 2 页
字号:
  CONFIG12 EQU 7FH
  TEMPH EQU 21H
  TEMPL EQU 20H
  REG2 EQU 22H
  REG3 EQU 23H
  REG4 EQU 24H
  DAT EQU P0.7
  SCLK  EQU P3.2
  IO   EQU P3.3
  RST  EQU P3.4
  year DATA 66H
  month DATA 65H
  week DATA 64H
  day  DATA 63H
  hour DATA 62H
  mintue DATA 61H
  second DATA 60H

  ORG 0000H
  LJMP  START
  ORG 001BH
  LJMP INTT1

START:             ;初值
  LCALL ZJ
  SETB EA
  MOV TMOD,#10H    ;计数器1,方式1
  MOV TL1,#00H
  MOV TH1,#00H
  MOV 32H,#8EH
  MOV 31H,#00H     ;允许写1302
  LCALL WRITE
  MOV 32H,#90H
  MOV 31H,#0A6H   ;1302充电,充电电流1.1MA
  LCALL WRITE
  ;主程序~~~~~~~~~~~~~~~~~~~~~
MAIN1:
  MOV 32H,#8DH    ;读出年
  LCALL  READ
  MOV year,31H

  MOV 32H,#8BH   ;读出星期
  LCALL READ
  MOV week,31H

  MOV 32H,#89H   ;读出月
  LCALL READ
  MOV month,31H

  MOV 32H,#87H  ;读出日
  LCALL READ
  MOV day,31H

  MOV 32H,#85H  ;读出小时
  LCALL READ
  MOV hour,31H

  MOV 32H,#83H  ;读出分钟
  LCALL READ
  MOV mintue,31H

  MOV 32H,#81H  ;读出秒
  LCALL READ
  MOV second,31H
  ;~~~~~~~~~~~~分离缓存~~~~~~~~
  MOV R0,year    ;年分离,送显示缓存
  LCALL DIVIDE
  MOV 7BH,R1
  MOV 4BH,R1
  MOV 7CH,R2
  MOV 4CH,R2
  MOV 78H,week
  MOV 48H,week
  MOV R0,month  ;月分离,送显示缓存
  LCALL DIVIDE
  MOV 79H,R1
  MOV 49H,R1
  MOV 7AH,R2
  MOV 4AH,R2
  MOV R0,day   ;日分离,送显示缓存
  LCALL DIVIDE
  MOV 76H,R1
  MOV 46H,R1
  MOV 77H,R2
  MOV 47H,R2
  MOV R0,hour ;小时分离,送显示缓存
  LCALL DIVIDE
  MOV 74H,R1
  MOV 44H,R1
  MOV 75H,R2
  MOV 45H,R2
  MOV R0,mintue ;分钟分离,送显示缓存
  LCALL DIVIDE
  MOV 72H,R1
  MOV 42H,R1
  MOV 73H,R2
  MOV 43H,R2
  MOV R0,second  ;秒分离,送显示缓存
  LCALL  DIVIDE
  MOV 70H,R1
  MOV 40H,R1
  MOV 71H,R2
  MOV 41H,R2
  CLR EA
  LCALL TOUTOU
  LCALL NS
  SETB EA
  LCALL DISPLAY
  LCALL GENGXIAN    ;更新农历程序
  JNB P0.1,SETG111
  JNB F0,SSS
  SETB P0.4         ;非闰月,则p0.4清零,指示灯亮
  LJMP MAIN1
SETG111:
  LJMP SETG
SSS:
  CLR P0.4          ;闰月,则p0.4置位,指示灯不亮
  LJMP MAIN1

;~~~~~~~~~~~~~~~~~~~~~~~~~  温度

TOUTOU:
  LCALL CHUSHI
  LCALL RDTEMP
  MOV A,TEMPL
  ANL A,#11110000B
  MOV TEMPL,A
  MOV A,TEMPH
  ANL A,#00000111B
  ORL A,TEMPL
  SWAP A
  MOV 25H,A
  MOV A,25H
  MOV B,#64H
  DIV AB
  MOV A,B
  MOV B,#0AH
  DIV AB
  SWAP A
  ORL A,B
  MOV 10H,A
  RET
CHUSHI:
  LCALL RESET
  MOV A,#0CCH
  LCALL WRITE111
  MOV A,#4EH
  LCALL WRITE111
  MOV A,#CONFIG12
  LCALL WRITE111
  RET
RDTEMP:
  LCALL RESET
  MOV A,#0CCH
  LCALL WRITE111
  MOV A,#44H
  LCALL WRITE111
  LCALL DL1MS
  LCALL RESET
  MOV A,#0CCH
  LCALL WRITE111
  MOV A,#0BEH
  LCALL WRITE111
  LCALL ERAD111
  MOV TEMPL,A
  LCALL ERAD111
  MOV TEMPH,A
  RET
RESET:
LA:
  SETB DAT
  MOV 52H,#200
LB:
  CLR DAT
  DJNZ 52H,LB
  SETB DAT
  MOV 52H,#30
LC:
  DJNZ 52H,LC
  CLR C
  ORL C,DAT
  JC LB
  MOV 58H,#80
LD:
  ORL C,DAT
  JC LP
  DJNZ 58H,LD
  SJMP LA
LP:
  MOV 52H,#250
LF:
  DJNZ 52H,LF
  RET
WRITE111:
  MOV 53H,#8
W51HA:
  SETB DAT
  MOV 54H,#8
  RRC A
  CLR DAT
W52HA:
  DJNZ 54H,W52HA
  MOV DAT,C
  MOV 54H,#30
W53HA:
  DJNZ 54H,W53HA
  DJNZ 53H,W51HA
  SETB DAT
  RET
ERAD111:
  CLR EA
  MOV 58H,#8
RD1A:
  CLR DAT
  MOV 54H,#6
  NOP
  SETB DAT
RD2A:
  DJNZ 54H,RD2A
  MOV C,DAT
  RRC A
  MOV 55H,#30
RD3A:
  DJNZ 55H,RD3A
  DJNZ 58H,RD1A
  SETB DAT
  RET


;公历设置程序~~~~~~

SETG :
  SETB TR1
  SETB ET1
  MOV 32H,#8EH
  MOV 31H,#00H      ;允许写1302
  LCALL WRITE
  MOV 32H,#80H
  MOV 31H,#80H      ;1302停止振荡
  LCALL WRITE
GWAIT:           ;~
  LCALL DISPLAY
  JNB P0.1,GWAIT
SETG1:
  LCALL DISPLAY
  JNB P0.1,SETG2
  JNB P0.2,GADDYEAR
  JNB P0.3,JIANYEAR
  AJMP SETG1
GADDYEAR:
  MOV R7,66H      ;年加一
  LCALL ADD1
  MOV 66H,A
  CJNE A,#51H,GADDYEAR1
  MOV 66H,#00H
  AJMP GADDYEAR1
JIANYEAR:
  MOV R7,66H      ;年减一
  LCALL JIAN1
  MOV 66H,A
  CJNE A,#00H,GADDYEAR1
  MOV 66H,#51H
GADDYEAR1:
  MOV 32H,#8CH    ;年值送人1302
  MOV 31H,66H
  LCALL WRITE
  MOV R0,66H
  LCALL DIVIDE    ;年分离送显示缓存
  MOV 4BH,R1
  MOV 7BH,R1
  MOV 4CH,R2
  MOV 7CH,R2
WAITT1:          ;~~~~~~~
  LCALL DISPLAY
  JNB P0.2,WAITT1
  JNB P0.3,WAITT1
  AJMP SETG1
SETG2:
  SETB 0AH         ;调月时闪标志
GWAIT2:
  LCALL DISPLAY
  JNB P0.1,GWAIT2
SETG3:
  LCALL DISPLAY
  JNB P0.1,SETG4
  JNB P0.2,GADDMONTH
  JNB P0.3,JIANMONTH
  AJMP SETG3
GADDMONTH:
  MOV R7,65H     ;月加一
  LCALL ADD1
  MOV 65H,A
  CJNE A,#13H,GADDMONTH1
  MOV 65H,#01H
  AJMP GADDMONTH1
JIANMONTH:
  MOV R7,65H     ;月减一
  LCALL JIAN1
  MOV 65H,A
  CJNE A,#00H,GADDMONTH1
  MOV 65H,#12H
GADDMONTH1:
  MOV 32H,#88H  ;月值送人1302
  MOV 31H,65H
  LCALL WRITE
  MOV R0,65H
  LCALL DIVIDE  ;月分离,送显示缓存
  MOV 79H,R1
  MOV 49H,R1
  MOV 7AH,R2
  MOV 4AH,R2
WAITT2:            ;~
  LCALL DISPLAY
  JNB P0.2,WAITT2
  JNB P0.3,WAITT2
  AJMP SETG3
SETG4:
  SETB 0BH    ;调日时闪标志
GWAIT4:
  LCALL DISPLAY
  JNB P0.1,GWAIT4
SETG5:
  LCALL DISPLAY
  JNB P0.1,SETG6
  JNB P0.2,GADDDAY
  JNB P0.3,JIANDAY
  AJMP SETG5
GADDDAY:
  MOV R7,63H     ;日加一
  LCALL ADD1
  MOV 63H,A
  CJNE A,#32H,GADDDAY1
  MOV  63H,#01H
JIANDAY:
  MOV R7,63H     ;日减一
  LCALL JIAN1
  MOV 63H,A
  CJNE A,#00H,GADDDAY1
  MOV  63H,#31H
GADDDAY1:
  MOV 32H,#86H ;日值送人1302
  MOV 31H,63H
  LCALL WRITE
  MOV R0,63H
  LCALL DIVIDE  ;日分离,送显示缓存
  MOV 76H,R1
  MOV 46H,R1
  MOV 77H,R2
  MOV 47H,R2
WAITT3:              ;~~~
  LCALL DISPLAY
  JNB P0.2,WAITT3
  JNB P0.3,WAITT3
  AJMP SETG5
SETG6:
  SETB 0CH    ;调星期时闪标志
GWAIT6:
  LCALL DISPLAY
  JNB P0.1,GWAIT6
SETG7:
  LCALL DISPLAY
  JNB P0.1,SETG8
  JNB P0.2,GADDWEEK
  JNB P0.3,JIANWEEK
  AJMP SETG7
GADDWEEK:
  MOV R7,64H       ;星期加一
  LCALL ADD1
  MOV 64H,A
  CJNE A,#07H,GADDWEEK1
  MOV  64H,#00H
  AJMP GADDWEEK1
JIANWEEK:
  MOV R7,64H       ;星期减一
  LCALL JIAN1
  MOV 64H,A
  CJNE A,#00H,GADDWEEK1
  MOV  64H,#06H
GADDWEEK1:
  MOV 32H,#8AH
  MOV 31H,64H     ;星期值送人1302
  LCALL WRITE
  MOV R0,64H
  LCALL DIVIDE     ;星期值分离送显示缓存
  MOV 48H,R1
  MOV 78H,R1
WAITT4:                ;~~~~
  LCALL DISPLAY
  JNB P0.2,WAITT4
  JNB P0.3,WAITT4
  AJMP SETG7
SETG8:
  SETB 0DH       ;调小时时闪标志
GWAIT8:
  LCALL DISPLAY
  JNB P0.1,GWAIT8
SETG9:
  LCALL DISPLAY
  JNB P0.1,SETG10
  JNB P0.2,GADDHOUR
  JNB P0.3,JIANHOUR
  AJMP SETG9
GADDHOUR:
  MOV R7,62H        ;小时加一
  LCALL ADD1
  MOV 62H,A
  CJNE A,#24H,GADDHOUR1
  MOV 62H,#00H
  AJMP GADDHOUR1
JIANHOUR:
  MOV R7,62H        ;小时减一
  LCALL JIAN1
  MOV 62H,A
  CJNE A,#00H,GADDHOUR1
  MOV 62H,#23H
GADDHOUR1:
  MOV 32H,#84H     ;小时值送人1302
  MOV 31H,62H
  LCALL WRITE
  MOV R0,62H
  LCALL DIVIDE      ;小时值分离送显示缓存
  MOV 74H,R1
  MOV 44H,R1
  MOV 75H,R2
  MOV 45H,R2
WAITT5:              ;~~~~~
  LCALL DISPLAY
  JNB P0.2,WAITT5
  JNB P0.3,WAITT5
  AJMP SETG9
SETG10:
  SETB 0EH        ;调分时候闪标志
GWAIT10:
  LCALL DISPLAY
  JNB P0.1,GWAIT10
SETG11:
  LCALL DISPLAY
  JNB P0.1,SETGOUT
  JNB P0.2,GADDMINTUE
  JNB P0.3,JIANMINTUE
  AJMP SETG11
GADDMINTUE:
  MOV R7,61H      ;分钟加一
  LCALL ADD1
  MOV 61H,A
  CJNE A,#60H,GADDMINTUE1
  MOV 61H,#00H
  AJMP GADDMINTUE1
JIANMINTUE:
  MOV R7,61H      ;分钟减一
  LCALL JIAN1
  MOV 61H,A
  CJNE A,#00H,GADDMINTUE1
  MOV 61H,#59H
GADDMINTUE1:
  MOV 32H,#82H    ;分钟值送人1302
  MOV 31H,61H
  LCALL WRITE
  MOV R0,61H
  LCALL DIVIDE    ;分钟值分离送显示缓存
  MOV 72H,R1
  MOV 42H,R1
  MOV 73H,R2
  MOV 43H,R2
WAITT6:
  LCALL DISPLAY
  JNB P0.2,WAITT6

⌨️ 快捷键说明

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