- •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.1 Регистры eecon1, eecon2
Регистр EECON1 содержит биты управления косвенной записи/чтения EEPROM памяти данных и FLASH памяти программ. Регистр EECON2 физически не реализован, он используется только при операциях записи с целью предотвращения случайной записи.
Значение бита EEPGD в регистре EECON1 определяет тип памяти, к которой будет выполнено обращение. Если EEPGD = 0, то операции относятся к EEPROM памяти данных. Когда EEPGD=1, обращение происходит к FLASH памяти программ.
В операции чтения используется только один дополнительный бит RD, инициализирующий операцию чтения из указанной памяти. Установив бит RD в '1', значение ячейки памяти будет доступно в регистре данных. Бит RD не может быть сброшен программно в '0', он сбрасывается автоматически по окончании операции чтения. При чтении из EEPROM памяти данные будут доступны в регистре EEDATA в следующем машинном цикле, после установки бита RD. При чтении из FLASH памяти программ, данные будут доступны в регистре EEDATA:EEDATH на втором машинном цикле, после установки бита RD.
В операции записи используется два служебных бита WR, WREN и два бита статуса WRERR, EEIF. Бит WREN применяется для разрешения/запрещения операции записи (WREN = 0 - операция записи запрещена). Перед выполнением записи бит WREN необходимо установить в '1'. Бит WR предназначен для инициализации записи, он аппаратно сбрасывается в '0' по завершении операции записи. Флаг прерывания EEIF устанавливается в '1' по завершении записи. Этот флаг должен быть сброшен программно в '0' перед установкой бита WR.
Для EEPROM памяти данных:
После установки битов WREN, WR в '1' стирается, указанная в регистре EEADR, ячейка EEPROM памяти, а затем происходит запись данных из регистра EEDATA. Операция записи сопровождается выполнением кода программы. По завершении записи устанавливается флаг прерывания EEIF в '1'.
Для FLASH памяти программ:
После установки битов WREN, WR в '1' микроконтроллер приостанавливает выполнение программы. Стирается ячейка памяти программ, указанная в регистре EEADRH:EEADR, затем происходит запись данных из регистра EEDATH:EEDATA. По завершении записи устанавливается флаг прерывания EEIF в '1', а микроконтроллер продолжит выполнять код программы.
Бит WRERR указывает, что произошел сброс микроконтроллера PIC16F877 во время выполнения операции записи. Бит WRERR устанавливается в '1', если во время выполнения записи данных произошел сброс по сигналу -MCLR или по переполнению сторожевого таймера WDT в нормальном режиме. Проверив состояние бита WREER, пользователь может повторить запись (регистры EEDATA и EEADR не изменяют своего значения). Содержимое регистров данных, адреса и бит EEPGD не изменяется после сброса по сигналу -MCLR, по переполнению сторожевого таймера WDT в нормальном режиме.
Ниже приводится назначение каждого из 8 битов регистра. Здесь и далее используются следующие обозначения:
R – чтение бита;
W – запись бита;
U – не реализовано, читается как «0»;
-n – значение после POR;
-x – неизвестное значение после POR.
Регистр EECON1 (адрес 18Ch)
R/W–x |
U–0 |
U–0 |
U–0 |
R/W–x |
R/W–0 |
R/S–0 |
R/S–0 |
EEPGD |
– |
– |
– |
WRERR |
WREN |
WR |
RD |
Бит 7 |
Бит 6 |
Бит 5 |
Бит 4 |
Бит З |
Бит 2 |
Бит 1 |
Бит 0 |
Бит 7: |
EEPGD: Бит выбора EEPROM память данных/FLASH память программ 0 = EEPROM память данных (бит не должен изменяться во время выполнения операции чтения/записи) 1 = FLASH память программ |
Бит 6: Бит 5: Бит 4: |
Не используются: читаются как '0' |
Бит 3: |
WRERR: Флаг ошибки записи данных 0 = запись завершена 1 = запись прервана (произошел один из сбросов: по сигналу -MCLR, по переполнению WDT в нормальном режиме) |
Бит 2: |
WREN: Разрешение записи данных 0 = запись запрещена 1 = запись разрешена |
Бит 1: |
WR: Инициализировать запись данных (программно может быть только установлен в '1') 0 = запись завершена 1 = инициализировать запись (сбрасывается в '0' аппаратно) |
Бит 0: |
RD: Инициализировать чтение данных (программно может быть только установлен в '1') 0 = запись завершена 1 = инициализировать чтение (сбрасывается в '0' аппаратно) |
