quinta-feira, 8 de março de 2007

I2C: Progressos

Consegui finalmente encontrar o erro nas minhas rotinas de I2C. Consegui agora há pouco que o relógio de tempo real e uma E2PROM serial me respondessem um "acknowledge", quando interrogados em seus endereços corretos.

Eis o trecho do código que não estava funcionando, e a pequena correção, destacada em vermelho.

10750 I2CPB: ; PUT BYTE
10760 PUSH BC
10770 LD D,A
10780 LD B,8
10790 I2PB1: XOR A
10800 SLA D
10810 ADC A,SDALO
10820 OUT(C),A
10830 LD A,SCLHI
10840 OUT(C),A
10850 DEC A ; A=SCLLO
10860 OUT (C),A
10870 DJNZ I2PB1

Se eu não inicializar o valor de A com Zero, a soma com SDALO+CY vai dar um valor indefinido.

Eu tive que corrigir este mesmo erro em outro trecho do código, mas depois consegui fazer a leitura sequencial de vários bytes na E2PROM.

11150 I2CAK:;GIVE ACK CY=VALOR ACK
11155 XOR A
11160 ADC A,SDALO
11170 OUT (C),A
11180 LD A,SCLHI
11190 OUT (C),A
11200 DEC A
11210 OUT (C),A
11220 LD A,SDAHI
11230 OUT (C),A
11240 RET
Segue abaixo a captura da tela, lendo um trecho já conhecido da E2PROM

Nenhum comentário: