i2с c помощью библиотечных функций
Добавлено: Чт июл 17, 2014 02:39:25
Здравствуйте! В примере из книги Шпака интерфейс (протокол) i2c реализуется с помощью библиотечных функций. На первый взгляд показалось всё легко и понятно, но при попытке реализовать управляющую программу на этих функциях ничего не получилось. Чтение из ячейки памяти, куда только что было записано число 4, дает число 0хFF.
А вот, что получается на экране осциллографа:
Код: Выделить всё
#include <16f628a.h>
#use delay(clock=1000000)
#fuses INTRC,NOWDT
#use i2c(Master,Slow,sda=PIN_A1,scl=PIN_A0,force_hw)
#byte TRISA = 0x85
#byte PORTB = 0x06
#byte TRISB = 0x86
#byte PORTA = 0x05
void main()
{
int8 c1=4;
int8 c2=0;
PORTA=0b00000000;
TRISB=0b00000000;
PORTB=0b00000000;
TRISA=0b00011;
i2c_start();
//Инициализация передачи
i2c_write(0b10100000);
//Адрес Slave с запросом на запись
i2c_write(0b00000000);
i2c_write(0b00000000);
//Старший и младший байт памяти
i2c_write(c1);
//Запись в память
i2c_stop();
//Прекращение передачи
delay_ms(1000);
i2c_start();
//Инициализация передачи
i2c_write(0b10100001);
//Адрес Slave с запросом на чтение
i2c_write(0b00000000);
i2c_write(0b00000000);
//Старший и младший байт памяти
c2=i2c_read(0);
//Чтение из памяти без бита подтверждения
i2c_stop();
//Прекращение передачи
if (c2==4)
PORTB=0b1000000;
delay_ms(3000);
}
А вот, что получается на экране осциллографа: