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

📄 sx1302.asm

📁 单片机例程打包 液晶 AD EEPROM LED 电机 BEEP 键盘等
💻 ASM
📖 第 1 页 / 共 2 页
字号:
;天逸版实时时钟程序(未作测试,只供参考)
;***************************************************************************
;*  ohm@szsxmcu.com	      深圳随想电子科技有限公司版权所有    *
;*  Create by :欧海明     www.szsxmcu.com 更多例程及单片机专业    *
;*  咨讯请登陆网站      因为专业所以做得更好!深圳随想电子科技 	  *
;***************************************************************************
          IO_DATA  BIT  P1.1     
          SCLK     BIT  P1.0     
          RST      BIT  P1.2     

          K1     EQU  P3.2       
          K2     EQU  P3.3
          K3     EQU  P3.4
          K4     EQU  P3.5

          BEEP   EQU  P2.0       
          RELAY  EQU  P1.4       

          T_CONU  EQU  22H       
          TIME_L  EQU  23H       
          TIME_H  EQU  24H

          TIME_DATA   EQU  50H   
          DATE_DATA   EQU  60H   
          DS_DATA     EQU  58H   
;------------------------------------------------
          ORG 0000H
          AJMP MAIN

          ORG  000BH
          AJMP  INT_T0

          ORG  0100H
;------------------------------------------------
MAIN:
          MOV  TMOD,#01H        
          MOV  TIME_L,#00H      
          MOV  TIME_H,#4CH
          MOV  T_CONU,#00H      
          MOV  IE,#82H          

          MOV  A,#00H
          MOV  R0,#40H          
          MOV  R1,#40H          
M_CLEAR:  MOV  @R0,A
          INC  R0
          DJNZ  R1,M_CLEAR

          MOV  7FH,#0AH         
          SETB   BEEP
          LCALL  TIME_DELAY     
          LCALL  PROSET         

MAIN1:
          LCALL  GET_TIME       
          LCALL  CHULI          
          MOV  R0,#TIME_DATA    ;
          LCALL  DISP
          MOV  R0,#TIME_DATA
          LCALL  TIME_DISPLAY
          LCALL  SET_KEY        
          LCALL  COMP           
          JB  K1,MAIN1
          CALL  BEEP_BL
MAIN2:
          LCALL  CHULI          
          MOV  R0,#DATE_DATA
          LCALL  DISP           
          MOV  R0,#DATE_DATA
          LCALL  TIME_DISPLAY
          JB  K1,MAIN2
          CALL  BEEP_BL
MAIN3:
          LCALL  DS_CHULI        
          MOV  R0,#DS_DATA
          LCALL  DS_SP           
          MOV  R0,#DS_DATA
          LCALL  DS_DISPLAY
          JB  K1,MAIN3
          CALL  BEEP_BL
          AJMP  MAIN1
;--------------------------------------------
;中断服务子程序
;300MS对闪动标记取反一次
;--------------------------------------------
INT_T0:
          PUSH  ACC
          PUSH  PSW
          MOV  TL0,TIME_L
          MOV  TH0,TIME_H
          INC  T_CONU
          MOV  A,T_CONU
          CJNE  A,#06H,INT_END
          MOV  T_CONU,#00H
          CPL  0AH
INT_END:
          POP  PSW
          POP  ACC
          RETI
;--------------------------------------------
;DS1302 初始化子程序
; (R0)=数据  (R1)=地址
;--------------------------------------------
PROSET:
           CLR   RST            ;DS1302复位
           CLR   SCLK
           NOP
           NOP
           SETB  RST

          ;MOV  R1,#80H          
          ;MOV  R0,#00H         
          ;LCALL WRITE

          ;MOV  R1,#82H          
          ;MOV  R0,#58H
          ;LCALL WRITE

          ;MOV  R1,#84H          
          ;MOV  R0,#80H
          ;LCALL WRITE

          MOV  R1,#90H          
          MOV  R0,#0ABH
          LCALL WRITE
          RET
;===============================================
;读时间、日期数据子程序
;存放单元 40H - 46H
;===============================================
GET_TIME:
          MOV  R1,#81H          
          LCALL  READ
          MOV 40H,R0

          MOV  R1,#83H          
          LCALL  READ
          MOV 41H,R0

          MOV  R1,#85H          
          LCALL  READ
          MOV 42H,R0

          MOV  R1,#87H          
          LCALL  READ
          MOV 43H,R0

          MOV  R1,#89H          
          LCALL  READ
          MOV 44H,R0

          MOV  R1,#8BH          
          LCALL  READ
          MOV 46H,R0

          MOV  R1,#8DH          
          LCALL  READ
          MOV 45H,R0

          RET
;================================================
;写 DS1302 子程序
;================================================
WRITE:
          CLR  SCLK
          NOP
          NOP
          SETB  RST
          NOP
          MOV  A,R1
          MOV  R2,#08H
WRI_01:
          RRC  A                
          NOP
          NOP
          CLR  SCLK
          NOP
          NOP          
          MOV  IO_DATA,C
          NOP
          NOP         
          SETB  SCLK
          NOP
          NOP
          DJNZ  R2,WRI_01
          CLR  SCLK
          NOP
          NOP
          MOV  A,R0
          MOV  R2,#08H
WRI_02:
          RRC  A           
          NOP
          CLR  SCLK
          NOP
          NOP
          MOV  IO_DATA,C
          NOP
          NOP
          SETB  SCLK
          NOP
          NOP
          DJNZ  R2,WRI_02
          CLR  SCLK
          NOP
          NOP
          CLR  RST
          NOP
          NOP
          RET
;=================================================
;读 DS1302 子程序
;=================================================
READ:
          CLR   SCLK
          NOP
          NOP
          SETB  RST
          NOP
          NOP
          MOV  A,R1
          MOV  R2,#08H
READ_01:
          RRC  A
          NOP               
          MOV  IO_DATA,C
          NOP
          NOP
          SETB  SCLK
          NOP
          NOP
          CLR  SCLK
          NOP
          NOP
          DJNZ  R2,READ_01
          NOP
          NOP
          SETB  IO_DATA
          CLR  A
          CLR  C
          MOV  R2,#08H
READ_02:
          CLR  SCLK
          NOP
          NOP         
          MOV  C,IO_DATA
          NOP
          NOP         
          RRC  A                
          NOP
          NOP          
          SETB  SCLK
          NOP
          NOP          
          DJNZ  R2,READ_02
          MOV  R0,A
          CLR  RST
          RET
;==============================================
;实时时间、日期数据处理子程序
;==============================================
 CHULI:
          MOV A,40H               
          ANL A,#0FH
          MOV 50H,A
          MOV 70H,A
          MOV A,40H
          ANL A,#11110000B
          SWAP A
          MOV 51H,A
          MOV 71H,A
;---------------------------------------------
          MOV A,41H               
          ANL A,#0FH
          MOV 52H,A
          MOV 72H,A
          MOV A,41H
          ANL A,#11110000B
          SWAP A
          MOV 53H,A
          MOV 73H,A
;---------------------------------------------
          MOV A,42H               
          ANL A,#0FH
          MOV 54H,A
          MOV 74H,A
          MOV A,42H
          ANL A,#11110000B
          SWAP A
          MOV 55H,A
          MOV 75H,A
;----------------------------------------------
          MOV A,43H               
          ANL A,#0FH
          MOV 60H,A
          MOV 76H,A
          MOV A,43H
          ANL A,#11110000B
          SWAP A
          MOV 61H,A
          MOV 77H,A
;---------------------------------------------
          MOV A,44H               
          ANL A,#0FH
          MOV 62H,A
          MOV 78H,A
          MOV A,44H
          ANL A,#11110000B
          SWAP A
          MOV 63H,A
          MOV 79H,A
;---------------------------------------------
          MOV A,45H               
          ANL A,#0FH
          MOV 64H,A
          MOV  7AH,A
          MOV A,45H
          ANL A,#11110000B
          SWAP A
          MOV 65H,A
          MOV 7BH,A
;----------------------------------------------
          MOV A,46H               
          MOV 66H,A
          MOV 7CH,A
          RET
;=============================================
;实时时间、日期查表取数子程序
;=============================================
DISP:     ;MOV  R0,#TIME_DATA
          MOV R3,#06H
DISP1:    MOV A,@R0
          MOV DPTR,#TAB_NU
          MOVC A,@A+DPTR
          MOV @R0,A
          INC R0
          DJNZ R3,DISP1
          RET
;====================================================
;时间、日期显示子程序
;====================================================
TIME_DISPLAY:
          ;MOV  R0,#TIME_DATA      
          MOV  R1,#07FH          
          MOV  R2,#08H           ;共6个数码管

DISLP:    MOV  P0,@R0            
          MOV  A,R1
          MOV  P2,A             
          JB  ACC.5,DISLP1      
          MOV  P0,#0BFH
          JMP  DISLP3
DISLP1:   JB  ACC.2,DISLP2      
          MOV  P0,#0BFH
          JMP  DISLP3
DISLP2:   INC  R0
DISLP3:   MOV  A,R1              
          RR  A                  
          MOV  R1,A              
          LCALL  DELAY           
          DJNZ  R2,DISLP        
          RET                  

DELAY:
          MOV  R4,#0AH
  L15:    MOV  R5,#64H
  L16:    DJNZ  R5,L16
          DJNZ  R4,L15
          RET
;******************************************************
SET_KEY:
         SETB  K1             
         SETB  K2             
         SETB  K3             
         SETB  K4             
         NOP
         JB  K4,KEY01
         LCALL  BEEP_BL
         JMP  DS_KEY          
KEY01:   JB  K2,KEY02
         LCALL  BEEP_BL
         JMP  SET_TIME        
KEY02:   JB  K3,KEY03
         LCALL  BEEP_BL
         CPL  20H.0          
KEY03:   RET

;-----------------------------------------------------
DS_KEY:
         CALL  DS_DELAY
         JNB  K4,$          
         LCALL  DSSET
         CALL  DS_DELAY
         RET

SET_TIME:
         MOV  R1,#8EH          
         MOV  R0,#00H          
         LCALL WRITE

         MOV  R1,#80H          
         MOV  R0,#80H          
         LCALL WRITE

         SETB  TR0

K001:    CALL TIME_DELAY       
         JNB K3,K001           
K010:
         CALL  CHULI
         JNB  0AH,KH01
         MOV  54H,7FH          
         MOV  55H,7FH
         JMP  KH02
 KH01:   MOV  54H,74H          
         MOV  55H,75H          
 KH02:   MOV  R0,#TIME_DATA
         CALL  DISP
         MOV  R0,#TIME_DATA
         CALL  TIME_DISPLAY
         JNB  K1,K011A
         JNB  K2,K011B
         JNB  K3,K002
         JMP  K010
K011A:
         MOV  A,42H
         ADD A,#01H
         DA A
         MOV 42H,A
         XRL  A,#24H
         JNZ K012A
         MOV  42H,#00H
K012A:   MOV  R1,#84H           
         MOV  R0,42H
         LCALL WRITE
         CALL  TIME_DELAY
         JMP  K010

K011B:
         MOV  A,42H
         XRL  A,#00H
         JZ  K012B
         SETB  C              
         CLR  A
         ADDC  A,#99H         
         SUBB  A,#01H         
         ADD   A,42H          
         DA A                 
         MOV 42H,A            
         XRL  A,#00H
         JNZ K012C
K012B:   MOV  42H,#23H
K012C:   MOV  R1,#84H           
         MOV  R0,42H
         LCALL WRITE
         CALL  TIME_DELAY
         JMP  K010
;-------------------------------------------------
K002:    CALL TIME_DELAY       
         JNB K3,K002            

K020:    CALL  CHULI
         JNB  0AH,KM01

         MOV  52H,7FH          
         MOV  53H,7FH
         JMP  KM02

 KM01:   MOV  52H,72H          
         MOV  53H,73H          
 KM02:   MOV  R0,#TIME_DATA
         CALL  DISP
         MOV  R0,#TIME_DATA
         CALL  TIME_DISPLAY

⌨️ 快捷键说明

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