- •1.1 Цель работы
- •1.2 Общие сведения
- •1.3 Области применения
- •1.4 Номенклатура микроконтроллеров семейства pic16f8хх
- •1.5 Технические характеристики микроконтроллера pic16f877
- •1.6 Архитектура микроконтроллера pic16f877
- •1.7 Основные регистры специального назначения
- •1.7.1 Регистр status
- •1.7.2 Регистр option_reg
- •1.7.3 Регистр intcon
- •1.7.4 Регистр pie1
- •1.7.5 Регистр pir1
- •1.7.6 Регистр pie2
- •1.7.7 Регистр pir2
- •1.7.8 Регистр pcon
- •1.7.9 Регистры pclath и pcl
- •1.7.10 Вычисляемый переход
- •1.7.11 Стек
- •1.7.12 Страницы памяти программ
- •1.7.13 Косвенная адресация, регистры indf и fsr
- •1.8 Порты ввода/вывода
- •1.8.1 Регистры portа и trisa
- •1.8.2 Регистры portb и trisb
- •1.8.3 Регистры portc и trisc
- •1.8.4 Регистры portd и trisd
- •1.8.5 Регистры porte и trise
- •1.9 Eeprom память данных и flash память программ
- •1.9.1 Регистры eecon1, eecon2
- •1.9.2 Чтение из eeprom памяти данных
- •1.9.3 Запись в eeprom память данных
- •1.10 Модуль таймера tmr0
- •1.10.1 Прерывания от tmr0
- •1.10.2 Использование внешнего источника тактового сигнала для tmr0
- •1.10.3 Предделитель
- •1.11 Модуль таймера tmr1
- •1.11.1 Работа tmr1 в режиме таймера
- •1.11.2 Работа tmr1 в режиме счетчика
- •1.11.3 Работа tmr1 в режиме синхронного счетчика
- •1.11.4 Работа tmr1 в режиме асинхронного счетчика
- •1.11.5 Чтение/запись tmr1 в асинхронном режиме
- •1.11.6 Генератор tmr1
- •1.11.7 Сброс tmr1 триггером модуля сср
- •1.11.8 Сброс регистров tmr1 (tmr1h, tmr1l)
- •1.11.9 Предделитель tmr1
- •1.12 Прерывания
- •1.12.1 Внешнее прерывание с входа rb0/int
- •1.12.2 Прерывание по переполнению tmr0
- •1.12.3 Прерывание по изменению уровня сигнала на входах rb7:rb4
- •1.13 Система команд
1.9.2 Чтение из eeprom памяти данных
Для чтения из EEPROM памяти необходимо только записать адрес в регистр EEADR и сбросить бит EEPGD в '0'. После установки в '1' бита RD данные будут доступны в регистре EEDATA на следующем машинном цикле. Данные в регистре EEDATA сохраняются до выполнения следующей операции чтения или записи в EEDATA.
Рекомендованная последовательность действий при чтении из EEPROM памяти данных:
Записать адрес в регистр EEADR. Проверьте, что записанный адрес корректен для данного типа микроконтроллера.
Сбросить в '0' бит EEPGD для обращения к EEPROM памяти данных.
Инициализировать операцию чтения установкой бита RD в '1'.
Прочитать данные из регистра EEDATA.
Пример работы с EEPROM памяти приведён ниже в листинге п/п «RD_EEPROM».
;========================== RD_EEPROM ============================
; П/П считывания измерений EEPROM
; Входные параметры: ADRES – значение адреса считываемой ячейки EEPROM
; Выходные параметры: RESUL - считанное значение из EEPROM
; ==================================================================
RD_EEPROM:
bcf INTCON,GIE ;ЗАПРЕТ ВСЕХ ПРЕРЫВАНИЙ
movf ADRES,W ;ч/з ADRES из вне передаётся значение ячейке EEADR
bcf STATUS,RP0 ;2-банк
bsf STATUS,RP1
movf ADRES,W ; W = ADRES
movwf EEADR ;загрузить EEADR значением ADRES
bsf STATUS,RP0 ;3-банк
bcf EECON1,7 ;EEPGD=0(бит выбора между EEPROM и FLASH-
;памяти программ)
bsf EECON1,RD ;разрешить чтение
bcf STATUS,RP0 ;2-банк
movf EEDATA,W ;чтение из EEPROM(W=EEDATA)
bcf STATUS,RP1 ;0-банк
movwf RESUL ;результат в RESUL
bsf INTCON,GIE ;РАЗРЕШЕНИЕ ВСЕХ ПРЕРЫВАНИЙ
return
1.9.3 Запись в eeprom память данных
Запись данных в EEPROM память несколько сложнее чтения. Адрес ячейки EEPROM памяти и записываемые данные должны быть помешены в соответствующие регистры специального назначения, бит EEPGD сбрасывается в '0'. Бит WREN должен всегда равняться нулю, кроме непосредственной записи в EEPROM память. Бит WR может быть установлен в '1' только, если бит WREN был установлен в предыдущих командах, т.е. биты WR, WREN не могут устанавливаться в '1' одной командой. Бит WREN должен быть сброшен в '0' после инициализации записи (на процесс записи он не влияет).
Перед записью в EEPROM память должна быть выполнена обязательная последовательность команд, предотвращающая случайную запись. Обязательная последовательность выполняется при выключенных прерываниях.
Рекомендованная последовательность действий при записи в EEPROM память:
Если шаг 10 не был выполнен, то необходимо проверить, что не происходит запись (WR=0).
Записать адрес в регистр EEADR. Проверьте, что записанный адрес корректен для данного типа микроконтроллера.
Записать 8-разрядное значение в регистр EEDATA.
Сбросить в '0' бит EEPGD для обращения к EEPROM памяти данных.
Установить бит WREN в '1', разрешив запись в EEPROM память.
Запретить прерывания, если они разрешены.
Выполнить обязательную последовательность из пяти команд:
Запись значения 55h в регистр EECON2 (две команды, сначала в W затем в EECON2);
Запись значения ААh в регистр EECON2 (две команды, сначала в W затем в EECON2);
Установить бит WR в '1'.
Разрешить прерывания (если необходимо).
Сбросить бит WREN в '0'.
После завершения цикла записи сбрасывается в '0' бит WR, устанавливается в '1' флаг прерывания EEIF (сбрасывается программно). Если шаг 1 не выполняется, то необходимо проверить состояние битов EEIF, WR перед началом записи.
Пример работы с EEPROM памяти приведён на рисунке 1.3 в листинге п/п «WR_EEPROM».
