PIC16F877 MCP23016 и I2C - ниид хелп

■ Послано в RU.EMBEDDED ■ Также послано в RU.RADIO.SAMOPAY ■ Также послано в TALKS.ASM ■ Также послано в RU.ASM.CHAINIK ■ Также послано в SU.HARDW.SCHEMES ■ Также послано в SU.HARDW.OTHER ■ Также послано в PC.CODING

Yo All!

Есть контроллер и 2 расширителя портов. Связаны по i2c. Резисторами линни подтянуты Пытаюсь реализовать запись/чтение, но ни чего не получается. Применяю схему из книги Майкла Предко, схожую с той, что в дукументации по контроллеру. Hе приходит бита подтверждения от адресуемого устройства. Что делать? Кда смотреть, что читать? Вот кусочек прошивки. Отладко на PICSTART (MPLAB IDE).

───────═════ Hачало файла iic.asm list p=16f877

include "p16f877.inc" errorlevel -302 ;suppress "not in bank 0" message #define BAUD D'100' ; Desired Baud Rate in kbps

#define FOSC D'4000' ; Oscillator Clock in kHz

;----------------------------------------------------------------------- ;Macros to select the register bank ;Many bank changes can be optimized when only one STATUS bit changes

Bank0 MACRO ;macro to select data RAM bank 0 bcf STATUS,RP0 bcf STATUS,RP1 ENDM

Bank1 MACRO ;macro to select data RAM bank 1 bsf STATUS,RP0 bcf STATUS,RP1 ENDM

Bank2 MACRO ;macro to select data RAM bank 2 bcf STATUS,RP0 bsf STATUS,RP1 ENDM

Bank3 MACRO ;macro to select data RAM bank 3 bsf STATUS,RP0 bsf STATUS,RP1 ENDM ;------------------------------------------------------------------------ Main ;1 Указываем направление линий SDA, SCL на вход Bank1 MOVLW B'00011000' MOVWF TRISC

;2 Разрешаем режим I2C модуля SSP Bank0 BSF SSPCON, SSPEN

BSF SSPCON, SSPM3 BCF SSPCON, SSPM2 BCF SSPCON, SSPM1 BCF SSPCON, SSPM0

; без номера добавляю RCEN Bank1 ; Configure Baud Rate ; BANKSEL SSPADD bsf SSPSTAT,7 movlw (FOSC / (4 * BAUD)) - 1 ; Calculates SSPADD Setting for movwf SSPADD ; desired Baud rate and sets up SSPADD

; BSF SSPCON2, RCEN

;3 Стартовые условия Bank1 BSF SSPCON2, SEN ; Этот бит должен перидически ;опрашиваться до сброса ;POS3 ; BTFSC SSPCON2, SEN ; GOTO POS3

; BANKSEL PIR1 ; BANK 0 Bank0 btfss PIR1,SSPIF ; Check if done with I2C operation goto $-1 ; I2C module is not ready yet bcf PIR1,SSPIF

;4 Загружаем адрес устройства, к которому нужен доступ Bank0 MOVLW b'0100000' MOVWF SSPBUF Bank1 BSF SSPSTAT, 2 ; бит R/-W -> 1 - задаётся операция чтения ; дальше он опрашивается до сброса - окончания чтения POS4 BTFSC SSPSTAT, 2 GOTO POS4

;5 Бит ACK принимающего усторойства должен контролироваться ; считыванием бита ACKDT (bit 5) в регистере SSPCON2 POS5 BTFSS SSPCON2, ACKDT GOTO POS5

HЕ ПРИХОДИТ ПОДТВЕРЖДАЮЩЕГО БИТА ОТ АДРЕСАТА

;6 адресс считываемого устройства -> SSPBUF Bank0 MOVLW B'00000000' MOVWF SSPBUF

;7 Если передаётся вторичный адрес, проверяем бит ACK ;Проверяем бит ACKDT в SSPCON2 Bank1 POS7 BTFSC SSPCON2, ACKDT GOTO POS7

;8 Можно инициировать новые стартовые условия bsf SSPCON2, SEN ;и дальше он обрабатывается до сброса POS8 BTFSC SSPCON2, SEN GOTO POS8

;9 для подтверждения или нет контроллером надо установить ;устанавливатся бит ACKEN Bank0 POS9 BSF SSPCON, ACKEN

;10 Бит RCEN регистра SSPCON2 должен инициировать операцию ;приёма байта данных Bank1 bsf SSPCON2, RCEN POS10 BTFSC SSPSTAT, BF ; опрашивается до приёма данных GOTO POS10

;11 (9) и (10) повторяются до приёма всех данных ;GOTO POS9

;12 условия остановки инициируются установкой бита PEN ;регистра SSPCON2 в дальнейшем этот бит опрашивается до сброса BSF SSPCON2, PEN POS12 BTFSC SSPCON2, PEN GOTO POS9

GOTO Main

END

───────═════ Конец файла iic.asm

ЗАРАHЕЕ БЛАГОДАРЕH.

WBR, Serg. ... WinNT Uptime: 1 day(s), 3 hour(s), 55 min.

Reply to
Sergey Smirnov
Loading thread data ...

В RU.HARDWARE.SEX забыл.

Использовать симулятор с целью убедиться в том, что выходные сигналы генерируются (не)правильно. Или в том, что входные сигналы воспринимаются (на)правильно.

Reply to
Kirill Frolov

Yo Kirill!

24 Мая 2006 года ты писал(а) к мне: "Re: PIC16F877 MCP23016 и I2C - ниид хелп"

KF> Использовать симулятор с целью убедиться в том, что выходные сигналы KF> генерируются (не)правильно. Или в том, что входные сигналы KF> воспринимаются (на)правильно.

В кратце не опишешь каким образом? Из меню IDE?

WBR, Serg. ... WinNT Uptime: 1 day(s), 0 hour(s), 8 min.

Reply to
Sergey Smirnov

Выбрать пункт меню "Отладка", в выпадающем подмюеню пункт "Найсти все ошибки". В открывшемся диалоговом окне будут отображены найденные в программе ошибки. Для исправления ошибок следует нажать кнопку "Исправить опшибки" и закрыть окно. После исправления оибок программа должна работать без ошшибок,.

Reply to
Kirill Frolov

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.