X
Свернуть
-
Работа с EEPROM типа 24LCxx.
Компания Microchip выпускает широкий спектр недорогой энергонезависимой памяти с последовательным интерфейсом I2C. Емкость этих EEPROM начинается со 128 бит и может достигать 256 и более кбит, что позволяет применять ее в различных областях электроники. И хотя сейчас многие микроконтроллеры имеют EEPROM данных на своем кристалле, ее может оказаться недостаточно. Поэтому в некоторых случаях применение внешней памяти будет вполне оправданно (примеры применения данных микросхем имеются и на этом сайте).
Полное описание технических характеристик EEPROM можно найти на сайте производителя, а на этой странице приведены лишь тексты подпрограмм для работы с данными микросхемами. Подпрограммы написаны для PIC-контроллеров и позволяют производить запись или чтение одного байта по заданному адресу EEPROM. Эти подпрограммы применимы для работы с микросхемами емкостью до 16 кбит. Для больших емкостей необходимо приведенные ниже подпрограммы модифицировать таким образом, что бы адрес ячейки памяти передавался двумя байтами. Так же, если за один цикл необходимо считать/записать более одного байта, то нижеприведенные подпрограммы так же необходимо модифицировать.
Текст программы: 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
Метки: Нет
Возможность размещать комментарии к сообщениям отключена.
Категории
Свернуть
Метки статей
Свернуть
Меток пока нет.
Новые статьи
Свернуть
-
от adminДмитрий Панфилов«NO EXCUSES» — специальная программа компании MOTOROLA
Ни для кого не секрет, что микропроцессоры и микроконтроллеры находят самое широкое применение в различных областях науки и техники. Сегодня трудно указать область электроники, где не использовались бы микроконтроллеры. Количество...-
Канал: Микроконтроллеры
10.02.2017, 14:56 -
-
от adminalt="" />Частотомер на PIC16F873 с двух строчным ЖКИ способный измерять частоты от 10Гц до 45МГц. Чувствительность по входу около 50мВ, входное сопротивление 250 Ком, входная ёмкость 15пФ. Питание девятивольтная батарея 6F22.В память можно вносить значения, которые будут, прибавлены к входной частоте...
-
Канал: Микроконтроллеры
10.02.2017, 14:56 -
-
от adminДля плавного управления нагрузкой, например, лампой освещения, можно использовать симистор. Открывается симистор током при подачи на управляющий электрод импульса. Закрывается, когда ток, проходящий через него, становится равным нулю, когда переменное напряжение меняет знак....
-
Канал: Микроконтроллеры
10.02.2017, 14:56 -
-
от adminВсю прелесть программирования USB модуля Ke-USB24A можно оценить когда встает вопрос о необходимости написания программы на каком-либо не очень широко распространенном языке или для какой-либо среды, которая, казалось бы не предусматривает возможность работы с USB устройствами....
-
Канал: Микроконтроллеры
10.02.2017, 14:55 -
-
от adminМатрица управляется так же как и 7-сегментные индикаторы - динамически. Мега16 портом А управляет одной координатой (выбирает сторку для вывода инфы), порт С - выводит ту самую информацию. Информация берётся из массива.
/>
/>
Что бы пользоваться редактором, нужно переменную STROKA из примера переименовать в rows_arr.
Вложения: matrica8x8.fcf_avr (56 Кб) Любители ПИКов, вам не составит труда пореколбасить этот п...-
Канал: Микроконтроллеры
10.02.2017, 14:55 -
-
от adminЖурнал «Компоненты и технологии» №8 2001 г.
Ракович Н. Н.В последнее время при чтении профессиональных электронных журналов и статей, посвященных использованию электронных компонентов, у меня возникло и окрепло унылое ощущение, что вся гигантская...
"В человеке все должно быть прекрасно… и у него в доме тоже"
(Почти по А. П. Чехову)-
Канал: Микроконтроллеры
10.02.2017, 14:55 -