Dat zou heel goed kunnen. Ik doe dat niet zo (alleen voor ACK) maar in de sourcecode zie ik wel wat geklooi met TRISA register:
Code:
LADR_0x009F
BSF STATUS,RP0 ; !!Bank Register-Bank(0/1)-Select
BSF PORTA,2 ; !!Bank!! PORTA - TRISA - Unimplemented - Unimplemented
BCF STATUS,RP0 ; !!Bank Register-Bank(0/1)-Select
CALL LADR_0x00B5
RETURN
LADR_0x00A4
BCF PORTA,2 ; !!Bank!! PORTA - TRISA - Unimplemented - Unimplemented
BSF STATUS,RP0 ; !!Bank Register-Bank(0/1)-Select
BCF PORTA,2 ; !!Bank!! PORTA - TRISA - Unimplemented - Unimplemented
BCF STATUS,RP0 ; !!Bank Register-Bank(0/1)-Select
CALL LADR_0x00B5
RETURN
LADR_0x00AA
BSF STATUS,RP0 ; !!Bank Register-Bank(0/1)-Select
BSF PORTA,3 ; !!Bank!! PORTA - TRISA - Unimplemented - Unimplemented
BCF STATUS,RP0 ; !!Bank Register-Bank(0/1)-Select
CALL LADR_0x00B5
RETURN
LADR_0x00AF
BCF PORTA,3 ; !!Bank!! PORTA - TRISA - Unimplemented - Unimplemented
BSF STATUS,RP0 ; !!Bank Register-Bank(0/1)-Select
BCF PORTA,3 ; !!Bank!! PORTA - TRISA - Unimplemented - Unimplemented
BCF STATUS,RP0 ; !!Bank Register-Bank(0/1)-Select
CALL LADR_0x00B5
RETURN
De disassembler is niet zo slim dat-ie STATUS,RP0 meeneemt voor het juiste register (!!Bank!!).
Hoe dan ook, dit is wel een correcte implementatie van de open drain van het I2C protocol.
Tjerk, 9ZZ