Rambler's Top100
Stolica.ru
Реклама на сайте | Реклама в Интернет | "Все Кулички"


Главная страница
Все о компьютерном "железе"
Вся полезная информация
Эрудиту
Гарантированная продажа рекламных мест
Цены магазинов Москвы на ноутбуки и мобильные компьютеры
Мои разработки и переводы
Микроконтроллеры >>
Мои разработки
Полезные конструкции
Программаторы
FAQ по ПИКам
"Глюки" ПИКов
Ссылки
Железо и драйвера >>
Статьи и FAQ
Ссылки на статьи
Определение конфигурации
Настройка компонентов ПК
Утилиты для накопителей информации
Ремонт "железа"
Восстановление информации
Полезный софт
Операционные системы
Безопасность и защита информации
Радиоэлектроника
Программирование >>
Техдокументация
Разработчику программ
Мобильники
Вебмастеру
Поиск информации
On-Line перевод
Обмен ссылками, сотрудничество
Немного о себе
Контакты
Гостевая книга
Форум

Поиск на сайте
Поиск на Куличках:

Сделать стартовой страницей

Реклама:

(!) MP3 плееры всех видов. Возьми с собой 6 обычных Audio-CD на одном(!!!) MP3-CD
Телевизоры, DVD-плееры, видеомагнитофоны, видео-плееры. Аппаратура Hi-End класса


rax.ru: показано число посетителей за сегодня

Рейтинг@Mail.ru

RadioTOP-рейтинг радиотехнических сайтов
PROext: Top 1000
ENGLISH version
Здравствуйте! Воскресенье, 20 августа 2017

статьи и документация | программаторы | "глюки" | FAQ | полезные конструкции | мои разработки | ссылки

Работа с EEPROM типа 24LCxx

Автор: Кулаков В.В.


      Компания Microchip выпускает широкий спектр недорогой энергонезависимой памяти с последовательным интерфейсом I2C. Емкость этих EEPROM начинается со 128 бит и может достигать 256 и более кбит, что позволяет применять ее в различных областях электроники. И хотя сейчас многие микроконтроллеры имеют EEPROM данных на своем кристалле, ее может оказаться недостаточно. Поэтому в некоторых случаях применение внешней памяти будет вполне оправданно (примеры применения данных микросхем имеются и на этом сайте).
      Полное описание технических характеристик EEPROM можно найти на сайте производителя, а на этой странице приведены лишь тексты подпрограмм для работы с данными микросхемами. Подпрограммы написаны для PIC-контроллеров и позволяют производить запись или чтение одного байта по заданному адресу EEPROM. Эти подпрограммы применимы для работы с микросхемами емкостью до 16 кбит. Для больших емкостей необходимо приведенные ниже подпрограммы модифицировать таким образом, что бы адрес ячейки памяти передавался двумя байтами. Так же, если за один цикл необходимо считать/записать более одного байта, то нижеприведенные подпрограммы так же необходимо модифицировать.
      В том случае, если в микроконтроллере имеется аппаратная поддержка I2C, то можно воспользоваться подпрограммами, приведенными здесь.
Текст программы:

       LIST p=16c505, r=hex
       include P16C505.INC

       cblock 0x08 ;Регистры

             AddrLo ;Младший байт адреса в EEPROM
             AddrHi ;Старший байт адреса в EEPROM

             Cnt ;Счетчик

             Temp ;Регистры для хранения переменных разного назначения
              TempTr ;

       endc

;Константы для инициализации
InitOption equ b'00000000'
InitPortC equ b'00000000'
InitPortB equ b'00000000'

SDARecPortC equ b'00010000' ;Константа для переключения линии SDA на вход

#define SCL PORTC,3
#define SDA PORTC,4

       goto Begin

Init ;Общая инициализация
       movlw InitPortB ;
       tris PORTB ;
       movlw InitPortC ;
       tris PORTC ;
       movlw InitOption ;
       option ;
       return ;

SwReceive ;Переключение SDA на вход
       movlw SDARecPortC
       tris PORTB
       return

Transmitt
       movwf TempTr ;
       bsf SDA ;
       call Init ;Переключить линию для передачи

       bcf SDA ;Start
       bcf SCL ;

       bcf STATUS,C ;Передача байта управления
       rlf AddrHi,0 ;и трех старших бит адреса
       iorlw b'10100000' ;
       call SendByte ;

       call SwReceive ;Переключить линию для приема подтверждения

       bsf SCL ;Прием подтверждения
       btfsc SDA ;
       goto Transmitt ;Подтверждение отсутствует
       bcf SCL ;

       call Init ;Переключить на передачу

       movf AddrLo,0 ;Передать младший байт адреса
       call SendByte ;
       call SwReceive ;Переключить линию для приема подтверждения

       bsf SCL ;прием подтверждения
       btfsc SDA ;
       goto Transmitt ;Подтверждение отсутствует
       bcf SCL ;

       call Init ;Переключить на передачу

       movf TempTr,0 ;Передача байта
       call SendByte ;
       call SwReceive ;Переключить линию для приема подтверждения

       bsf SCL ;Прием подтверждения
       btfsc SDA ;
       goto Transmitt ;Подтверждение отсутствует
       bcf SCL ;

       call Init ;Переключить на передачу

       bcf SDA ;Stop
       bsf SCL ;
       bsf SDA ;

       return

SendByte ;Подпрограмма передачи одного байта
       movwf Temp
       movlw 0x8
       movwf Cnt
SendBt
       clrwdt
       bcf SDA
       rlf Temp,1
       btfsc STATUS,C
       bsf SDA
       bsf SCL
       bcf SCL
       decfsz Cnt,1
       goto SendBt
       return

Receive
       bsf SDA ;
       call Init ;Переключить на передачу
       bcf SDA ;Start
       bcf SCL ;

       bcf STATUS,C ;Передача байта управления
       rlf AddrHi,0 ;и трех старших бит адреса
       iorlw b'10100000' ;
       call SendByte ;

       call SwReceive ;Переключить на прием

       bsf SCL ;Прием подтверждения
       btfsc SDA ;
       goto Receive ;Подтверждение отсутствует
       bcf SCL ;

       call Init ;Переключить на передачу

       movf AddrLo,0 ;Передать младший байт адреса
       call SendByte ;
       call SwReceive ;Переключить на прием

       bsf SCL ;Прием подтвержедния
       btfsc SDA ;
       goto Receive ;Подтверждение отсутствует
       bcf SCL ;

       call Init ;Переключить на передачу

       bsf SDA ;Повторный Start
       bsf SCL ;
       bcf SDA ;
       bcf SCL ;

       bsf STATUS,C ;Передача байта управления
       rlf AddrHi,0 ;и трех старших бит адреса
       iorlw b'10100000' ;
       call SendByte ;
       call SwReceive ;Переключить на прием

       bsf SCL ;прием подтверждения
       btfsc SDA ;
       goto Receive ;Подтверждение отсутствует
       bcf SCL ;

       call ReceiveByte ;Прием байта

       bcf SDA ;
       call Init ;Переключить на передачу
       bsf SCL ;Передача подтверждения
       bsf SDA ;Stop
       return

ReceiveByte ;Подпрограмма приема одного байта
       movlw 0x8
       movwf Cnt
ReceiveBt
       clrwdt
       bsf SCL
       bcf STATUS,C
       btfsc SDA
       bsf STATUS,C
       rlf Temp,1
       bcf SCL
       decfsz Cnt,1
       goto ReceiveBt
       movf Temp,0
       movwf TempTr
       return

Begin
;Пример использования подпрограмм:

       movlw 0xbc ;Запись значения 0x55 по адресу 0x2bc
       movwf AddrLo ;
       movlw 0x02 ;
       movwf AddrHi ;
       movlw 0x55 ;
       call Transmitt ;

       movlw 0xbc ;Чтение байта по адресу 0x2bc
       movwf AddrLo ;
       movlw 0x02 ;
       movwf AddrHi ;
       call Receive ;Полученное значение будет в регистре w

       goto $

       end





Полное или частичное воспроизведение любых материалов, содержащихся на этом сайте, допускается только с письменного разрешения администрации. Авторские права на опубликованные на сайте материалы принадлежат их владельцам.
Замечания? Предложения? "Мертвые" ссылки? Проблемы с загрузкой страниц? Пишите вебмастеру или в гостевую книгу
Designed by Эfir studio | © 2002-03 Yuri Lysenkov