[an error occurred while processing this directive]
PIC16F877<-->I2C(24LC256) Помогите разобраться !!!
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено slsh 07 сентября 2002 г. 20:59

Доброе время суток, коллеги, я только начал работать с шиной i2c
нашел в 'инет' вот такие процедурки для работы с i2c
но, к сожалению, результат нулевой (хотя SDA SCL все красиво смотрел осцил.)
PIC16F877
i2c 24LC256
Пожалуйста, помогите разобраться !!!

Делаю так : пишу H'55'-->H'0001'

call SEND_START

movlw b'10100000' ;control byte
call SEND_BYTE

movlw b'00000000' ;address high
call SEND_BYTE

movlw b'00000001' ;address low
call SEND_BYTE


movlw b'10101010' ;Data Byte
call SEND_BYTE

call SEND_STOP

;--------------- читаю ----------------------

call SEND_START

movlw b'10100001' ;control byte
call SEND_BYTE

movlw b'00000000' ;address high
call SEND_BYTE

movlw b'00000001' ;address low
call SEND_BYTE


call READ_BYTE
W ---> 00 ????????????
call SEND_STOP

;-----------------------------------------------------------------------------
SEND_START BCF PIR1,SSPIF
BSF STATUS,RP0 ; P gina 1
BSF SSPCON2,SEN ; Secuencia de inicio
BCF STATUS,RP0 ; P gina 0
START_WAIT BTFSS PIR1,SSPIF ; ?Fin de inicio?
GOTO START_WAIT ; No, esperar
RETURN
;-----------------------------------------------------------------------------
SEND_STOP BCF PIR1,SSPIF
BSF STATUS,RP0 ; P gina 1
BSF SSPCON2,PEN ; Secuencia de parada
BCF STATUS,RP0 ; P gina 0
STOP_WAIT BTFSS PIR1,SSPIF ; ?Fin de parada?
GOTO STOP_WAIT ; No, esperar
RETURN
;-----------------------------------------------------------------------------
SEND_BYTE BCF PIR1,SSPIF
MOVWF SSPBUF ; Pasa a SSPBUF el byte a enviar
SEND_BYTE_ACK BTFSS PIR1,SSPIF ; Esperar ACK
GOTO SEND_BYTE_ACK ; No ha llegado, esperar.
RETURN
;-----------------------------------------------------------------------------
READ_BYTE BCF STATUS,RP0 ; P gina 1
BCF PIR1,SSPIF
BSF STATUS,RP0 ; P gina 1
BSF SSPCON2,RCEN ; Modo recepci?n
BCF STATUS,RP0 ; P gina 0
READ_WAIT BTFSS PIR1,SSPIF ; ?Recibidos los 8 bits?
GOTO READ_WAIT ; No, esperar
BCF PIR1,SSPIF
BSF STATUS,RP0 ; P gina 1
BCF SSPCON2,ACKDT ; ACK a 0
BSF SSPCON2,ACKEN ; Secuencia de ACK
BCF STATUS,RP0 ; P gina 0
ACK_WAIT BTFSS PIR1,SSPIF ; ?Fin de ACK?
GOTO ACK_WAIT ; No, esperar
MOVF SSPBUF,W
RETURN

NO_ACK BSF STATUS,RP0 ; P gina 1
BSF SSPCON2,ACKDT
BSF SSPCON2,ACKEN
BCF STATUS,RP0 ; P gina 0
NACK_WAIT BTFSS PIR1,SSPIF ; ?Fin de NACK?
GOTO NACK_WAIT ; No, esperar
MOVF SSPBUF,W
RETURN
init_i2c
Bank1
movlw ClockValue ; read selected baud rate
movwf SSPADD ; initialize I2C baud rate
bcf SSPSTAT,6 ; select I2C input levels
bsf SSPSTAT,7 ; enable slew rate

movlw b'00011000' ;
iorwf TRISC,f

bcf STATUS,RP0 ; select SFR bank
movlw b'00111000' ;
movwf SSPCON ; Master mode, SSP enable
return ; return from subroutine



Составить ответ  |||  Конференция  |||  Архив

Ответы



Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru