谢谢诸位,调通了,也发上来 ;---------------从24C02整组读数据------------------------ RD_INI: LCALL DELAY RD_AREA:LCALL DELAY LCALL aSTART LCALL DELAY LCALL WRITE ;24C02信息的读入 LCALL DELAY LCALL ACK LCALL DELAY JC RD_AREA MOV R2, #8 CLR SDA ;起始地址为00 ADDR_0: LCALL DELAY LCALL DELAY SETB SCL LCALL DELAY LCALL DELAY CLR SCL LCALL DELAY DJNZ R2, ADDR_0 LCALL ACK LCALL DELAY JC RD_AREA LCALL DELAY LCALL aSTART MOV R0, #40H ;存储首地址 MOV R3, #25 ;连续读8个字节25 LCALL DELAY LCALL READ LCALL DELAY LCALL ACK JC RD_AREA RD_R_0: LCALL DELAY LCALL DELAY LCALL RD_INFO LCALL DELAY INC R0 DJNZ R3, RD_R_1 LCALL ACK_2 LCALL DELAY LCALL STOP RET RD_R_1: LCALL ACK_1 SJMP RD_R_0 ;---------------24C02开始-------------------------------- aSTART: SETB SDA SETB SCL LCALL DELAY CLR SDA LCALL DELAY CLR SCL RET ;---------------24C02读命令字---------------------------- ;片选为"00" ;-------------------------------------------------------- READ: MOV A, #10100001B MOV R2, #8 RD1: RLC A MOV SDA, C SETB SCL LCALL DELAY CLR SCL LCALL DELAY DJNZ R2, RD1 RET
;---------------24C02写命令字---------------------------- ;片选为"00" ;-------------------------------------------------------- WRITE: MOV A, #10100000B MOV R2, #8 WR1: RLC A MOV SDA, C SETB SCL LCALL DELAY CLR SCL CLR SDA LCALL DELAY DJNZ R2, WR1 RET
;---------------24C02结束-------------------------------- STOP: CLR SDA SETB SCL LCALL DELAY SETB SDA LCALL DELAY RET
;---------------24C02的应答信息-------------------------- ACK: SETB SDA SETB SCL LCALL DELAY MOV C, SDA LCALL DELAY CLR SCL RET ACK_1: CLR SDA ;应答 SETB SCL LCALL DELAY CLR SCL LCALL DELAY SETB SDA LCALL DELAY RET ACK_2: SETB SDA ;非应答 SETB SCL LCALL DELAY CLR SCL CLR SDA LCALL DELAY RET
;---------------24C02的单字节读-------------------------- ;R0:数据的存储地址 ;-------------------------------------------------------- RD_INFO:SETB SDA LCALL DELAY MOV R2, #8 MOV A, #0 RD_I_0: SETB SCL LCALL DELAY MOV C, SDA LCALL DELAY CLR SCL RLC A LCALL DELAY DJNZ R2, RD_I_0 MOV @R0, A RET
;---------------24C02的单字节写-------------------------- ;R0:数据的读出地址 ;-------------------------------------------------------- WR_INFO:;MOV A, @R0 MOV R2, #8 WR_O_0: RLC A MOV SDA, C LCALL DELAY SETB SCL LCALL DELAY LCALL DELAY CLR SCL LCALL DELAY DJNZ R2, WR_O_0 RET
DELAY: NOP NOP NOP NOP RET
;**************************************************
write24: ;call WR_INI MOV R0, #40H mov r1, #00h mov r6, #25 WR_INI1: LCALL DELAY LCALL aSTART LCALL DELAY LCALL WRITE LCALL DELAY LCALL ACK LCALL DELAY JC WR_INI1 mov a, r1;#00h;ram addr LCALL WR_INFO LCALL DELAY LCALL ACK LCALL DELAY JC WR_INI1 ;MOV R0, #40H ;读出首地址 ;MOV R3, #1 ;连续写8个字节 xxxx: mov a, @r0 LCALL WR_INFO ;写一个字节 LCALL DELAY LCALL ACK LCALL DELAY JC WR_INI1 INC R0 ;DJNZ R3, xxxx inc r1 LCALL DELAY LCALL STOP LCALL DELAY LCALL DELAY LCALL DELAY lcall delay djnz r6, WR_INI1 nop ret
25个连写,原来程序是页写,我弄成字节写,可任意改字节数
再次感谢各位!!谢谢!!
|