原创 rx8025

2007-6-6 12:54 1659 6 6 分类: MCU/ 嵌入式
BITCNT  DATA  2AH ; IIC数据位计数器
BYTECNT DATA  2BH ; IIC数据字节数器
SLVADR  DATA  2CH ; 被控器地址
SUBADR  DATA  2DH ; 被控器单元地址
XMTDAT  DATA  50H ; 发送数据缓冲区
RCVDAT  DATA  40H ; 接收数据缓冲区
SDA BIT P1.7  ; 摸拟IIC数据传送位
SCL BIT P1.6  ; 摸拟IIC时钟控制壮态标志 
ACK BIT 21H.3  ; 接收数据非应答标志

INITIALIZE: MOV 50H, #00100000B ;8025初始化
            MOV 51H, #00100000B
            MOV SLVADR, #64H
            MOV SUBADR, #0E0H
            MOV BYTECNT,#2
            LCALL SENDDATA
            MOV 50H,#00000000B
            MOV SLVADR, #64H
            MOV SUBADR,#70H
            MOV BYTECNT,#1
            LCALL SENDDATA
            MOV 50H,#00000000B
            MOV SLVADR, #64H
            MOV SUBADR,#50H
            MOV BYTECNT,#1
            LCALL SENDDATA
          RET

RCV8025: MOV SLVADR, #64H ;接收8025的CLOCK,CALENDAR
         MOV SUBADR, #00H
         MOV BYTECNT,#7
         LCALL RCVDATA
         MOV A,40H
         ANL A, #7FH
         MOV 40H, A
         ANL A,#0FH
         MOV 30H,A
         MOV A,40H
         ANL A,#0F0H
         RR A
         RR A
         RR A
         RR A
         MOV 31H,A
         MOV A, 41H
         ANL A, #7FH
         MOV 41H, A
         ANL A,#0FH
         MOV 32H,A
         MOV A,41H
         ANL A,#0F0H
         RR A
         RR A
         RR A
         RR A
         MOV 33H,A
         MOV A, 42H
         ANL A,#3FH
         MOV 42H,A
         ANL A,#0FH
         MOV 34H,A
         MOV A,42H
         ANL A,#0F0H
         RR A
         RR A
         RR A
         RR A
         MOV 35H,A
         MOV A,43H
         ANL A, #07H
         MOV 43H,A
         ANL A,#0FH
         MOV 36H,A
         MOV A,44H
         ANL A,#3FH
         MOV 44H,A
         ANL A,#0FH
         MOV 37H,A
         MOV A,44H
         ANL A,#0F0H
         RR A
         RR A
         RR A
         RR A
         MOV 38H,A
         MOV A,45H
         ANL A,#1FH
         MOV 45H,A
         ANL A,#0FH
         MOV 39H,A
         MOV A,45H
         ANL A,#0F0H
         RR A
         RR A
         RR A
         RR A
         MOV 3AH,A
         MOV A,46H
         ANL A,#0FH
         MOV 3BH,A
         MOV A,46H
         ANL A,#0F0H
         RR A
         RR A
         RR A
         RR A
         MOV 3CH,A
         RET

SEND8025: ACALL LOAD8025  ;发送CLOCK(00:00:00),CALENDAR(00:01:01),WEEKLY(0)
          MOV SLVADR, #64H
          MOV SUBADR, #00H
          MOV BYTECNT, #7
          LCALL SENDDATA
          RET
LOAD8025: MOV 50H, #00H
          MOV 51H, #00H
          MOV 52H, #00H
          MOV 53H, #00H
          MOV 54H, #01H
          MOV 55H, #01H
          MOV 56H, #00H
          RET

SENDDATA: LCALL START   ;发送数据子程序
          MOV A, SLVADR
          LCALL SENTBYTE
          JB F0, SENDDATA
          MOV A, SUBADR
          LCALL SENTBYTE
          JB F0, SENDDATA
          MOV R0, #XMTDAT
SENTNEXT: MOV A,@R0
          LCALL SENTBYTE
          JB F0, SENDDATA
          INC R0
          DJNZ BYTECNT, SENTNEXT
          LCALL STOP
          LCALL DELAY10
          RET

RCVDATA: LCALL START    ;接受数据子程序
         MOV A, SLVADR
         LCALL SENTBYTE
         JB F0, RCVDATA
         MOV A, SUBADR
         LCALL SENTBYTE
         JB F0, RCVDATA
         LCALL START
         MOV A, SLVADR
         SETB ACC.0
         LCALL SENTBYTE
         JB F0, RCVDATA
         CLR ACK
         MOV R0, #RCVDAT
         DJNZ BYTECNT, RCVNEXT
         SJMP RCVLAST
RCVNEXT: LCALL RCVBYTE
         MOV @R0,A
         INC R0
         DJNZ BYTECNT,RCVNEXT
RCVLAST: SETB ACK
         LCALL RCVBYTE
         MOV @R0,A
         LCALL STOP
   RET

START: SETB SDA     ;START子程序
       NOP
       SETB SCL
       NOP
       NOP
       NOP
       NOP
       NOP
       CLR SDA
       NOP
       NOP
       NOP
       NOP
       NOP
       CLR SCL
       RET

STOP: CLR SDA   ;STOP 子程序
      NOP
      SETB SCL
      NOP
      NOP
      NOP
      NOP
      NOP
      SETB SDA
      NOP
      NOP
      NOP
      NOP
      RET

SENTBYTE: MOV  BITCNT, #08H ;发送1字节子程序
SENTB: RLC A
       JC SENT1
       CLR SDA
       SJMP SENT
SENT1: SETB SDA
       NOP
SENT:  NOP
       SETB SCL
       NOP
       NOP
       NOP
       NOP
       NOP
       CLR SCL
       DJNZ BITCNT, SENTB
       NOP
       NOP
       SETB SDA
       NOP
       NOP
       SETB SCL
       NOP
       NOP
       CLR F0
       JNB SDA, ACKEND
       SETB F0
ACKEND: NOP
        CLR SCL
        RET

RCVBYTE: SETB SDA  ;接受1字节子程序
         MOV BITCNT, #08H
RCV: NOP
     CLR SCL
     NOP
     NOP
     NOP
     NOP
     NOP
     SETB SCL
     NOP
     NOP
     CLR C
     JNB SDA, RCV0
     SETB C
RCV0: RLC A
      NOP
      NOP
      DJNZ BITCNT, RCV
      CLR  SCL
      NOP
      NOP
      NOP
      CLR  SDA
      JNB ACK, SENTACKB
      SETB SDA
SENTACKB: NOP
          NOP
          SETB SCL
          NOP
          NOP
          NOP
          NOP
          NOP
          CLR SCL
          CLR ACK
          RET

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
我要评论
0
6
关闭 站长推荐上一条 /1 下一条