wat512.asm

来自「单片机混合编程 嵌入式/单片机编程单片机混合编程 嵌入式/单片机编程」· 汇编 代码 · 共 167 行

ASM
167
字号
   ; 这是被CALLW512.C调用的AT24C512汇编程序,
   ; 文件名为WAT512.ASM
   ; 功能: 将地址为80H、81H、...、87H的连续8个字节值写入C51传来的双字节为
   ;       首址的AT24C512 EEPROM中去。

 NAME AT512
   ?PR?_a_func8?AT512     SEGMENT CODE
   ?DT?_a_func8?AT512     SEGMENT DATA OVERLAYABLE
   ?DT?AT512              SEGMENT DATA
   PUBLIC   chai8
   PUBLIC   ?_a_func8?BYTE
   PUBLIC    _a_func8
   RSEG  ?DT?_a_func8?AT512
	 ?_a_func8?BYTE:
	 aa:DS 2
   RSEG  ?DT?AT512
	 chai8:DS 1
   RSEG  ?PR?_a_func8?AT512
	 _a_func8:

SDA   BIT INT1
SCL   BIT INT0

FADDR EQU 0A0H
PADDR EQU 0
PSIZE EQU 8

ADDRLO EQU  7EH
ADDRHI EQU  7FH
BUFFER EQU  080H

      MOV aa,R7
      MOV aa+1,R6
      SETB SDA
      SETB SCL
BYTE_FILL:
      MOV R0,#BUFFER
      MOV DPL,aa
      MOV DPH,aa+1
X62:  MOV ADDRLO,DPL
      MOV ADDRHI,DPH
      MOV R1 ,#PSIZE
      MOV B,#120
X63:  MOV A,#PADDR
      LCALL WRITE_BLOCK
      JNC X64
      DJNZ B,X63
      SETB C
X64:  RET

WRITE_BLOCK:       ;块写入
      LCALL START
      JC X38
      RL A
      ORL A,#FADDR
      CLR ACC.0
      LCALL SHOUT
      JC X37
      MOV A,ADDRHI
      LCALL SHOUT
      JC X37
      MOV A,ADDRLO
      LCALL SHOUT
      JC X37
      MOV R0 ,#BUFFER
  X36:MOV A, @R0
      LCALL SHOUT
      JC X37
      INC R0
      DJNZ R1 ,X36
      CLR C
  X37:LCALL STOP
  X38:RET

 START:SETB SDA
      SETB SCL
      JNB SDA,X40
      JNB SCL,X40
      NOP
      CLR SDA
      NOP
      NOP
      NOP
      NOP
      NOP
      CLR SCL
      CLR C
      LJMP X41
X40:  SETB C
X41:  RET

STOP: CLR SDA
      NOP
      NOP
      SETB SCL
      NOP
      NOP
      NOP
      NOP
      NOP
      SETB SDA
      RET

SHOUT:PUSH B
      MOV B,#8
X42:  RLC A
      MOV SDA,C
      NOP
      SETB SCL
      NOP
      NOP
      NOP
      NOP
      CLR SCL
      DJNZ B,X42
      SETB SDA
      NOP
      NOP
      SETB SCL
      NOP
      NOP
      NOP
      NOP
      MOV C,SDA
      CLR SCL
      POP B
      RET

SHIN: SETB SDA
      PUSH B
      MOV B,#8
X43:  NOP
      NOP
      NOP
      SETB SCL
      NOP
      NOP
      MOV C,SDA
      RLC A
      CLR SCL
      DJNZ B,X43
      POP B
      RET

ACK:  CLR SDA
      NOP
      NOP
      SETB SCL
      NOP
      NOP
      NOP
      NOP
      CLR SCL
      RET
NAK:  SETB SDA
      NOP
      NOP
      SETB SCL
      NOP
      NOP
      NOP
      NOP
      CLR SCL
      RET
      END

⌨️ 快捷键说明

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