我这里有一个24C16的程序,但是不能运行阿,请各位帮我看看!!!!?
ORG 0000H
AJMP MAIN
ORG 0100H
MAIN:
SCL EQU P1.0 ;定义端口
SDA EQU P1.1
MOV SP,#40H
MOV DPTR,#DIS_CODE
MOV R2,#00H ;计算表格中调用的数
ACALL START
WRITE: MOV A,#0A0H
ACALL SEND
ACALL ACKC
MOV A,#01H
ACALL SEND
ACALL ACKC
WRT: MOV A,R2
MOVC A,@A+DPTR
ACALL SEND
ACALL ACKC
INC R2
CJNE R2,#08H,WRT
ACALL STOP
ACALL DELAY
READ: ACALL START
MOV A,#0A1H
ACALL SEND
ACALL ACKC
MOV A,#01H
ACALL SEND
ACALL ACKC
MOV R1,#70H
KAI: ACALL REV
CLR C
ACALL ACKS
MOV @R1,A
INC R1
CJNE R1,#78H,KAI
ACALL STOP
XIANSHI:MOV R1,#70H
JIA: MOV A,@R1
MOV P0,A
INC R1
ACALL DEL50MS
CJNE R1,#78H,JIA
SJMP XIANSHI
;-----------------------------------;
;开始信号的传递
START: CLR SCL
SETB SDA
ACALL DELAY
SETB SCL
ACALL DELAY
CLR SDA
ACALL DELAY
CLR SCL
RET
;停止信号的传递
STOP: CLR SCL
CLR SDA
ACALL DELAY
SETB SCL
ACALL DELAY
SETB SDA
ACALL DELAY
RET
;发送一个字节
SEND: MOV R0,#08H
SEND0: RLC A
MOV SDA,C
SETB SCL
ACALL DELAY
CLR SCL
DJNZ R0,SEND0
SETB SDA
RET
;接受一个字节
REV: MOV R0,#08H
REV0: SETB SCL
MOV C,SDA
RLC A
CLR SCL
DJNZ R0,REV0
RET
;接受一个应答位
ACKC: SETB SCL
ACALL DELAY
MOV C,SDA
CLR SCL
RET
;发送一个应答位
ACKS: SETB SCL
ACALL DELAY
MOV SDA,C
CLR SCL
RET
;延时程序
DELAY: NOP
NOP
NOP
RET
;------------------------------;
DEL50MS:MOV R5,#50
DEL2: MOV R6,#40
DEL1: MOV R7,#250
DEL: DJNZ R7,DEL
DJNZ R6,DEL1
DJNZ R5,DEL2
RET
DIS_CODE:
; 写入到AT24C01的数据串
DB 07EH
DB 0BDH
DB 0DBH
DB 0E7H
DB 0DBH
DB 0BDH
DB 07EH
DB 0FFH
END
发表时间:2006年10月19日11:56:11