📄 rat512.asm
字号:
; 这是被CALLR512.C调用的AT24C512汇编程序,
; 文件名为RAT512.ASM
; 功能: 把C51传来的双字节值作为首址,从AT24C512 EEPROM中将连续8个字节值读出,
; 放在地址为80H、81H、...、87H的连续8个字节中去。
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 1EH
ADDRHI EQU 1FH
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
X71: MOV ADDRLO,DPL
MOV ADDRHI,DPH
MOV R1 ,#PSIZE
MOV B,#120
X72: MOV A,#PADDR
LCALL READ_BLOCK
JNC X74
DJNZ B,X72
X73: SETB C
X74: RET
READ_BLOCK:
LCALL START
JC X35
RL A
ORL A,#FADDR
MOV R0 ,A
CLR ACC.0
LCALL SHOUT
JC X34
MOV A,ADDRHI
LCALL SHOUT
JC X34
MOV A,ADDRLO
LCALL SHOUT
JC X34
LCALL START
JC X34
MOV A,R0
SETB ACC.0
LCALL SHOUT
JC X34
MOV R0 ,#BUFFER
X31: LCALL SHIN
MOV @R0 ,A
CJNE R1 ,#1,X32
LCALL NAK
LJMP X33
X32: LCALL ACK
INC R0
DJNZ R1 ,X31
X33: CLR C
X34: LCALL STOP
X35: 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 + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -