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

📄 ht1380.src

📁 HT1380/DS1380的读写汇编程序
💻 SRC
字号:
.include"s3C9454.reg"
      

         
SDA_164 BIT P1.0
SCL_164 BIT P1.1
  SW BIT P2.6
LED_ BIT P2.5
LED4 BIT P2.4
LED3 BIT P2.3
LED2 BIT P2.2
LED1 BIT P2.1 
SCL_2402 BIT P0.7
SDA_2402 BIT P0.6
SCL_1380 BIT P0.5
SDA_1380 BIT P0.4
RST_1380 BIT P0.3
COMMAND EQU 60H;1380命令字节地址 
BYTECNT EQU 61H;数据字节读数地址 
XMTDAT EQU 62H;写入数据寄存器 
RCVDAT EQU 70H;读出数据寄存器 

         
        ORG 0000H
        
        VECTOR 00H,INT_9454
        ORG 003CH
        DB 00H
        DB 00H
        DB 0E7H
        DB 03H;3.2M时钟 
      
       
        ORG 0100H
          
  RESET:
     
        DI
        LD BTCON,#10100011B;禁止看门狗 
        LD CLKCON,#00011000B;选择时钟 FOSC 
        LD SP,#0C0H
        LD P0CONH,#10101010B;P0为输出口 
        LD P0CONL,#10101010B
        LD P1CON,#00001010B;P1.0-P1.1为输出口 
        LD P2CONH,#00001010B;P2.0-P2.5为输出口 
        LD P2CONL,#10101010B;P2.6为输入 
        
        LD T0DATA,#04EH
        LD T0CON,#00001010B;定时0.1秒
    
   MAIN:LD P2,#0H;P2.1-P2.4接数码管共阳脚极   
        SETBIT LED_
        LD 30H,#10
        LD 20H,#0H
        LD 21H,#0H
        LD 22H,#0H
        LD 23H,#0H
        LD 25H,#0
        LD 26H,#0;按键按一次有效 
        LD 27H,#0;SET,只有当27=1时。加减才有效 
        LD 28H,#0;当按了SET时,28=1,显示闪烁 
       
        EI
        CALL DELY
        LD R0,#05H
        LD R1,#TAB
         JR MMMM1 
        CALL OSC_ENABLE
        CALL WRITE_ENABLE
        
        CALL WRITE_1380
         
    MAI:CALL READ_1380 
        LD R5,71H
        AND 71H,#00001111B
        LD 20H,71H
        CALL ZH4
        AND R5,#00001111B
        LD 21H,R5
        LD R5,72H
        AND 72H,#00001111B
        LD 22H,72H
        CALL ZH4
        AND R5,#00001111B
        LD 23H,R5
        CALL SIAO
        JR MAI
    ZH4:LD R4,#4
    ZH3:RR R5
        DEC R4
        JR NZ,ZH3
        RET    
       
  MMMM1:CALL AT2402R 
        LD 20H,50H
        LD 21H,51H
        LD 22H,52H
        LD 23H,53H
     
        
  MAIN2:TM P2,#01000000B
        JR NZ,MAIN0
        LD 26H,#0 
  
  MAIN0:TM 28H,#00000001B
        JR NZ,MAIN3
        CALL SIAO
        LD 40H,20H
        LD 41H,21H 
        LD 42H,22H 
        LD 43H,23H 
        CALL AT2402W
         
        
  MAIN3:LD R5,#0FFH
        CALL SEND164
        
        CALL DELY
        TM P2,#40H
        JR Z,MAIN2 
        CALL SW_S
        JR MAIN2
      
INT_9454:AND T0CON,#11111110B
         DEC 30H
         CP 30H,#5
         JP NE,L1
         LD 28H,#1 
         SETBIT LED_ 
      L1:AND 30H,#11111111B
         JR NZ,L5
         LD 30H,#10
         LD 28H,#0
         CLRBIT LED_ 
         CALL XIANSHI
      L5:TM 27H,#00000001B
         JR NZ,L6
         LD 28H,#0  
      L6:IRET 
        
 XIANSHI:INC 20H
         CP 20H,#0AH
         JP LT,XS
         LD 20H,#0H
         INC 21H
         CP 21H,#6H
         JP LT,XS
         LD 21H,#0H
         INC 22H
         CP 22H,#0AH
         JP LT,XS
         LD 22H,#0H
         INC 23H
         CP 23H,#6H
         JP LT,XS
         LD 23H,#0H
      XS:RET   
      
      
   SIAO:LD R1,20H
        LDC R5,@RR0
        CALL SEND164
        SETBIT LED4
        CALL DELY
        CLRBIT LED4
        
        LD R1,21H
        LDC R5,@RR0
        CALL SEND164
        SETBIT LED3
        CALL DELY
        CLRBIT LED3
        
        LD R1,22H
        LDC R5,@RR0
        CALL SEND164
        SETBIT LED2
        CALL DELY
        CLRBIT LED2
        
       
        CP 23H,#0H;当时十位小等于0时,不显示 
        JP EQ,SAO1
        LD R1,23H
        LDC R5,@RR0
        CALL SEND164
        SETBIT LED1
        CALL DELY
        CLRBIT LED1
   SAO1:RET
   
           
    SW_S:AND 26H,#0FFH
         JR NZ,SW5
         LD 26H,#1 
         
         LD R5,#10000000B;A-OFF
         CALL SEND164
         TM P2,#01000000B;检测SW 
         JR Z,SW2
         COM 25H
         JR Z,SW1
         CALL OFF
         JR SW5
     SW1:CALL STAR_00
         JR SW5    
         
     SW2:LD R5,#01000000B
         CALL SEND164
         TM P2,#01000000B
         JR Z,SW3
         COM 27H
         AND 27H,#00000001B
         JR SW5    
         
     SW3:TM 27H,#00000001B
         JR Z,SW5
         LD R5,#00100000B;C-ADD
         CALL SEND164
         TM P2,#01000000B         
         JR Z,SW4
         INC 22H
         CP 22H,#0AH
         JP LT,SW5
         LD 22H,#0H
         INC 23H
         CP 23H,#6H
         JP LT,SW5
         LD 23H,#0H
         JR SW5
     SW4:TM 27H,#00000001B
         JR Z,SW5
         LD R5,#00010000B;D-DEC
         CALL SEND164
         TM P2,#01000000B
         JR Z,SW5
         DEC 22H
         CP 22H,#0H
         JP GE,SW5
         LD 22H,#9H
         DEC 23H
         CP 23H,#0H
         JP GE,SW5
         LD 23H,#5H
         
     SW5:RET    
                
SEND164:    LD R4,#08H;左移次数 
     S0:RRC R5;要发的数据存在R1 
        JR C,S1;如果C等于1跳 ,C=1表示左移过来的是高电频1 
        CLRBIT SDA_164;SDA清0 
        JR S2
     S1: 
        SETBIT SDA_164;SDA置1
     S2:NOP
        NOP
        SETBIT SCL_164;SCL置1 
        NOP
        NOP
        CLRBIT SCL_164;SCL清0 
        NOP
        NOP
        DEC R4
        JR NZ,S0
        RET
    
   OFF:DI
       SETBIT LED_ 
       LD 20H,#0BH
       LD 21H,#0BH
       LD 22H,#0AH
       LD 23H,#0H
     
       RET
      
STAR_00:EI
        LD 20H,#0H 
        LD 21H,#0H
        LD 22H,#0H
        LD 23H,#0H  
        RET  
 ;*********************************************       
 ;2402单片机写入2402
AT2402W:LD 60H,#4;写4个数到2402中 
        CALL R2STAR
        LD R5,#10100000B
        CALL R2SEND
        LD R5,#30H
        CALL R2SEND
        LD R15,#40H;40H-43H存要写入的数 
    LM1:LD R5,@R15 
        CALL R2SEND
        INC R15
        DEC 60H
        JR NZ,LM1
        CALL R2STOP
        NOP
        RET
;*******************************************
 R2SEND:LD R4,#8;发送一个字节子程序 
R2SLOP1:RLC R5 
        JR C,R2SLOP2
        CLRBIT SDA_2402
        JR R2SLOP3
R2SLOP2:
        SETBIT SDA_2402
R2SLOP3:NOP
        SETBIT SCL_2402
        NOP
        CLRBIT SCL_2402
        DEC R4
        JR NZ,R2SLOP1
        CLRBIT SDA_2402
        NOP
        SETBIT SCL_2402
        NOP
        CLRBIT SCL_2402 
        NOP
        RET
;******************************************
;读出数据程序 
AT2402R:LD 60H,#4;读出4个字节 
        LD R15,#50H;读出来的字节存入以50H为首址地址 
        CALL R2STAR
        LD R5,#10100000B;固定,表示对2402写 
        CALL R2SEND
        LD R5,#30H;2402中的地址,可自设,从这个地址写入就从这个地址读出 
        CALL R2SEND
        CALL R2STAR
        LD R5,#10100001B;固定,表示对2402读 
        CALL R2SEND 
AT2402R1:CALL R2READ 
         LD @R15,R5
         INC R15
         DEC 60H
         JR NZ,AT2402R1
         CALL R2STOP
         RET
;******************************************************        
 R2READ:LD R4,#8;读出一个字节子程序, 
        SETBIT SDA_2402
R2RLOP1:NOP
        SETBIT SCL_2402
        NOP
        LD P0CONH,#10001010B;P0.6为输出入 
        NOP
        TM P0,#01000000B ;P0.6为SDA 
        LD P0CONH,#10101010B;P0.6为输出口 
        JR Z,R2RLOP2
        OR R5,#10000000B
        JR R2RLOP3
R2RLOP2:AND R5,#01111111B  
R2RLOP3:RL R5
        CLRBIT SCL_2402
        DEC R4
        JR NZ,R2RLOP1 
        NOP
        CLRBIT SDA_2402
        NOP
        SETBIT SCL_2402
        NOP
        CLRBIT SCL_2402
        NOP 
        RET   
;***************************************************                 
R2STAR:;开始子程序,当SCL为高时.SDA从高到低为开始 
       SETBIT SDA_2402
       SETBIT SCL_2402
       NOP
       CLRBIT SDA_2402
       NOP
       CLRBIT SCL_2402
       NOP
       RET   
;*******************************************************          
R2STOP:NOP;结束子程序,当SCL为高时,SDA从低到高为结束 
       SETBIT SCL_2402
       NOP
       SETBIT SDA_2402
       NOP
       CLRBIT SCL_2402
       NOP
       RET                  
         
 ;*******************************************   
  ;1380读写程序
WRITE_ENABLE:LD COMMAND,#8EH;允许数据写入寄存器  
           LD BYTECNT,#1
           LD R15,#XMTDAT
           LD XMTDAT,#00H
           CALL SEND_BYTE
           RET
   ;*********************************        
OSC_ENABLE:LD COMMAND,#80H;起动时钟开始 
           LD BYTECNT,#1
           LD R15,#XMTDAT
           LD XMTDAT,#00
           CALL SEND_BYTE
           RET  
   ;***********************************                
WRITE_1380:LD COMMAND,#0BEH;写入8个数据到1380 
           LD BYTECNT,#8
           LD R15,#XMTDAT
           LD XMTDAT,#0
           LD XMTDAT+1,#14h
           LD XMTDAT+2,#08H
           CALL SEND_BYTE
           RET
    ;************************************       
 READ_1380:LD COMMAND,#0BFH;读出8个数据 
           LD BYTECNT,#8
           LD R15,#RCVDAT
           CALL RECEIVE_BYTE
           RET
 ;****************************************************          
SEND_BYTE:
          CLRBIT RST_1380;发送数据到1380
          NOP
          CLRBIT SCL_1380
          NOP
          SETBIT RST_1380
          NOP
          LD R5,COMMAND
          LD R4,#08H 
  S_BYTE0:RRC R5
          JR C,S_1
          CLRBIT SDA_1380
          JR S_2
      S_1:
          SETBIT SDA_1380            
      S_2:NOP
          SETBIT SCL_1380
          NOP
          CLRBIT SCL_1380
          NOP
          DEC R4                            
          JR NZ,S_BYTE0
          NOP
  S_BYTE1:LD R5,@R15 
          LD R4,#8H
  S_BYTE2:RRC R5
          JR C,S_3
          CLRBIT SDA_1380
          JR S_4
      S_3:
          SETBIT SDA_1380
      S_4:NOP
          SETBIT SCL_1380
          NOP
          CLRBIT SCL_1380
          NOP
          DEC R4
          JR NZ,S_BYTE2
          INC R15
          DEC BYTECNT
          JR NZ,S_BYTE1
          NOP
          CLRBIT RST_1380
          RET
;****************************************8          
RECEIVE_BYTE:
          CLRBIT RST_1380;从1380中读出数据
          NOP
          CLRBIT SCL_1380
          NOP
          SETBIT RST_1380
          LD R5,COMMAND
          LD R4,#8
  R_BYTE0:RRC R5
          JR C,R_1
          CLRBIT SDA_1380
          JR R_2
      R_1:
          SETBIT SDA_1380
      R_2:NOP
          SETBIT SCL_1380
          NOP
          CLRBIT SCL_1380
          DEC R4
          JR NZ,R_BYTE0
          NOP
  R_BYTE1:
          LD R4,#8
  R_BYTE2:
          SETBIT SDA_1380 
          SETBIT SCL_1380
          NOP
          LD P0CONH,#10101000B;P0.4为输出入 
          NOP
          TM P0,#00010000B ;P0.4为SDA 
          LD P0CONH,#10101010B;P0.4为输出口 
          JR Z,R_3
          SCF
          JR R_4
      R_3:RCF 
      R_4:NOP
          RRC R5
          CLRBIT SCL_1380
          DEC R4
          JR NZ,R_BYTE2
          LD @R15,R5
          INC R15
          DEC BYTECNT
          JR NZ,R_BYTE1
          NOP
          CLRBIT RST_1380
          RET
 ;**********************************************
          
               
                  
          
                                  
                                                                                                                
                                                                                                                            
                  
      
   DELY:LD R6,#0FFH;延时子程序 
     D2:LD R7,#02H
     D1:DEC R7
        JR NZ,D1
        DEC R6
        JR NZ,D2
        RET   
            
     ORG 0500H
      
  TAB:DB 03H,09FH,025H,0DH,099H,49H,41H,01FH,1H,9H,0C5H,71H 
         
   
        END                                    

⌨️ 快捷键说明

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