Вот моя программа где после Стоп микруха не откликается на Старт может кто подскажет: list p=16F84 #include <p16F84.inc>
SDA equ 0 SCL equ 1 Byte equ 0x0C n equ 0x0D Err equ 0x0E
ReadEEPROM equ 0xAE WriteEEPROM equ 0xAF
org 0x00
Start clrf PORTB bsf STATUS, RP0 clrw movwf TRISB bcf STATUS, RP0
call SetupI2C ; Установки для I2C шины SDA - RA0, SCL - RA1 call StartI2C ; Установка ЕЕПРОМ в режим Старт movlw WriteEEPROM ; Насроить ЕЕПРОМ для записи в нее данных movwf Byte
call SendByte call ACKTest ; Байт принят? btfsc Err, 0 ; Если не принят то обработка ошибки call OnError
clrf Byte ; Устанавливаем адрес на 0 call SendByte call ACKTest ; Байт принят? btfsc Err, 0 ; Если не принят то обработка ошибки call OnError
movlw 0xAA ; Записываем b'10101010' по заданному адресу movwf Byte call SendByte call ACKTest ; Байт принят? btfsc Err, 0 ; Если не принят то обработка ошибки call OnError
call StopI2C ; Установка ЕЕПРОМ в режим Стоп
;ПОСЛЕ ЭТОЙ ЛЕБУДЫ МИКРОСХЕМА НЕ ПРИНИМАЕТ START
movlw 0xAA movwf PORTB goto $
SetupI2C clrf PORTA bsf STATUS, RP0 movlw b'00011100' movwf TRISA bcf STATUS, RP0
bsf PORTA, SDA bsf PORTA, SCL return
StartI2C bsf PORTA, SDA bsf PORTA, SCL nop nop nop nop bcf PORTA, SDA nop nop nop nop bcf PORTA, SCL return
StopI2C bcf PORTA, SCL bcf PORTA, SDA bsf PORTA, SCL nop nop nop nop bsf PORTA, SDA return
SendByte movlw 8 movwf n SBL btfsc Byte, 7 bsf PORTA, SDA btfss Byte, 7 bcf PORTA, SDA bsf PORTA, SCL nop nop nop nop bcf PORTA, SCL rlf Byte, f decfsz n, f goto SBL bcf PORTA, SDA return
ACKTest clrf Err
clrf PORTA bsf STATUS, RP0 movlw b'00011101' movwf TRISA bcf STATUS, RP0
bsf PORTA, SCL nop nop nop nop btfsc PORTA, SDA bsf Err, 0 bcf PORTA, SCL
clrf PORTA bsf STATUS, RP0 movlw b'00011100' movwf TRISA bcf STATUS, RP0 return
OnError movlw 0xFF movwf PORTB goto $ return
end
|