Рис. 2. Расположение выводов в различном исполнении микроконтроллеров PIC16F628А
3.6 Особенности структурной организации PIC 16С84
Главным отличием данного МК от PIC 16С71 является наличие электрически перепрограммируемой памяти данных-констант EEPROM и отсутствие модуля АЦП. Эти и другие связанные с ними отличия приведены в следующем списке:
1. Память программ электрически перепрограммируема (EEPROM). Это позволяет пользователю достаточно просто многократно перепрограммировать микроконтроллер, что очень существенно на этапе отладки рабочих программ и при изменении функциональных возможностей МКУ в процессе создания и эксплуатации.
2. Наличие дополнительной электрически перепрограммируемой EEPROM памяти для данных-констант размером 64х8 байт.
3. Четыре источника прерывания. Три из которых точно такие же как и в PIC 16С71:
- внешнее прерывание с вывода RBO/INT,
- прерывание от счетчика/таймера TMRO(RTCC),
- прерывание от изменения сигналов на входах порта RB<7:4>,
а четвертый источник новый:
- по завершению записи данных в памяти EEPROM.
4. Рабочая частота – 0 Гц.....10 МГц (минимальный цикл выполнения команды – 400 нс).
5. Модуль АЦП отсутствует.
6. Управляющий регистр прерываний INTCON модифицирован.
Вместо бита разрешения/запрещения прерывания от аналого-цифрового преобразователя ADIE в 6-м разряде регистра INTCON находится бит разрешения/запрещения прерывания по завершению записи данных в памяти EEPROM (EEIE), причем:
EEIE=0 запрещает прерывание (флаг EEIF в регистре EECON1), EEIE = 1 запрещает прерывание.
Назначение всех остальных бит регистра INTCON точно такое же как и в PIC 16С71
7. В составе 15-ти специальных регистров вместо ненужных в данном микроконтроллере ADCON, ADCON1, ADRES и ADRES2 (в связи с отсутствием АЦП) появились новые регистры EEDATA, EECON1, EEADR и EECON, которые управляют EEPROM данных-констант и расположены в ОЗУ(RAM) соответственно по тем же адресам. Более подробно они будут рассмотрены далее.
Рис. 3. Структурная схема ОМК PIC16F84 (16C84)
3.7 Обозначение выводов и их функциональное назначение
Расположение и обозначение выводов ОМК PIC 16С84 полностью совпадает с PIC 16С71 за исключением того, что ножки RA0, RA1, RA2, RA3 в связи отсутствием АЦП представляют собой лишь двунаправленные линии ввода/вывода сигналов с ТТЛ уровнями.
3.8 Организация памяти данных (ОЗУ)
Область ОЗУ организована как 128х8, имеет также 2-е страницы с одинаковыми объемом (128 байт) и практически не отличается от памяти данных PIC 16С71 за исключением того, что на местах регистров ADCON, ADCON1, ADRES и ADRES2 в связи с отсутствием АЦП находятся соответственно регистры управления EEPROM данных-констант EEDATA (08h), EECON1 (88h), EEADR (09h), EECON2 (89h).
Все регистры PIC 16C84 (16F84), также как и во всех других ОМК семейства PIC, разделяются на две функциональные группы: специальные регистры и регистры общего назначения (РОН).
Регистры специального назначения используются для управления функциями микроконтроллера и могут быть разделены на два набора: регистры базовых функций и регистры периферийных устройств. Регистры базовых функций включают в себя регистр-переключатель косвенной адресации (INDF), программный счетчик (РС), представленный двумя регистрами PCL и PCLATH, регистр слова состояния (STATUS), регистр-указатель косвенной адресации (FSR), рабочий регистр (W), регистр прерываний (INTCON), а также регистр режимов работы или конфигурации предварительного делителя и таймера (OPTION). Регистры периферийных устройств включают в себя регистры ввода/вывода (RA-порт А и RB-порт В), регистры данных (EEDATA) и адреса (EEADR) памяти данных-констант, регистр таймера-счетчика (TMPO) и регистры управления конфигурацией портов ввода/вывода (TRISA и TRISB).
К ячейкам ОЗУ можно точно также как и в PIC 16С71 адресоваться прямо или косвенно, через регистр указатель FSR (04h). Это, кстати, относится и к EEPROM памяти данных-констант.
Долговременная память данных-констант EEPROM
Память данных-констант EEPROM позволяет прочитать и записать байт информации. При записи байта автоматически стирается предыдущее значение и записывается новое (стирание перед записью). Все эти операции производит встроенный автомат записи EEPROM. Содержимое ячеек этой памяти сохраняется при выключенном питании.
При считывании данных из памяти EEPROM необходимо записать требуемый адрес в EEADR регистр и затем установить бит RD EECON1<0> в единицу. Данные появятся в следующем командном цикле в регистре EEDATA и могут быть прочитаны. Данные в регистре EEDATA защелкиваются. Пример фрагмента программы считывания данных из памяти данных-констант EEPROM приведена ниже:
Считывание из памяти данных-констант
Bcf STATUS , RP0 ; Установка банка 0.
Movlw CONFIG_ADDR ;
Movwf EEADR ; Адрес чтения.
Bsf STATUS , RP0 ; Установка банка 1.
Bsf EECON1 , RD ; Чтение EEPROM.
Bcf STATUS , RP0 ; Установка банка 0.
Movf EEDATA , W ; Считанные данные W.
При записи в память EEPROM, необходимо сначала записать требуемый адрес в EEADR регистр и данные в EEDATA регистр. Затем выполнить специальную обязательную последовательность команд, производящую непосредственную запись:
Movlw 55h ;
Movwf EECON2 ; Запись 55 h.
Movlw AAh ;
Movwf EECON2 ; Запись AA h.
Bsf EECON1 , WR ; Установка бита WR,
; начало цикла записи.
Во время выполнения этого участка программы, все прерывания должны быть запрещены для точного выполнения временной диаграммы. Время записи - примерно 10мс. Фактическое время записи будет изменяться в зависимости от напряжения, температуры и индивидуальных свойств кристалла. В конце записи бит WR автоматически обнуляется, а флаг завершения записи EEIF, он же запрос на прерывание, устанавливается. Пример фрагмента программы записи в память данных-констант EEPROM приведена ниже:
; Запись в память данных-констант.
Bsf Status , RP0 ; Установка банка 1.
Bcf Intcon , GIE ; Запрет прерываний.
; Обязательая последовательность команд.
Movlw 55h ;
Movwf EECON2 ; Запись 55 h.
Movlw Aah ;
Movwf EECON2 ; Запись AA h.
Bsf EECON1, WR ; Установка бита WR,
; начало цикла записи.
;Bsf Intcon , GIE ; Разрешение прерываний.
Для предотвращения случайных записей в память данных предусмотрен специальный бит WREN в регистре EECON1. Рекомендуется держать бит WREN выключенным, кроме тех случаев, когда нужно обновить память данных. Более того, кодовые сегменты, которые устанавливают бит WREN и те, которые выполняют запись должны храниться на различных адресах, чтобы избежать случайного выполнения их обоих при сбое программы.
4. Разработка алгоритма работы устройства
Алгоритм работы устройства показан на рис. 4. После инициализации регистров микроконтроллера устанавливают пределы в текущих регистрах экстремальных значений. В регистры текущих максимальных температур записывается минимальная измеряемая термодатчиком температура (-55,0°С), а в регистры минимальных температур — максимальная измеряемая температура (+99,9°С). При таких установках любое значение температуры, измеренное первым, будет записано в регистр как максимальных, так и минимальных температур, поскольку оно окажется заведомо больше -55,0° и заведомо меньше +99,9 °. Дальнейшие измеренные значения будут сравниваться с первой записанной температурой и, при необходимости, корректировать значения регистров максимума и минимума. Такие же предельные установки регистров выполняются каждый день в полночь после записи в память значении экстремальных температур прошедшего дня.
Вообще, термодатчик может измерять максимальную температуру до +125°, но, во-первых, таких температур наружного воздуха просто не бывает, а во-вторых, автором были использованы все 96 регистров общего назначения основного банка. Поэтому оказалось разумным остановиться на максимальной измеряемой температуре +99,9°.
По завершении предельных установок выполняется инициализация ЖКИ. При инициализации ЖКИ без опроса освобождения от цикла записи зачастую возникают затруднения с включением индикатора.
Далее выполняется проверка кнопок. Обычно при проверке кнопок при установке режима индикации выполняется загрузка регистров индикации, но в данном случае из-за большого числа регистров индикации устанавливаются только флаги режимов. Если установлен флаг текущего режима индикации, то далее выполняется вывод на индикацию.
Рис. 3. Алгоритм работы термометров с памятью
Если выполнять вывод на индикацию обычным способом, т.е. последовательным заполнением всех знакомест, то потребуется 32 регистра индикации, поэтому вывод на индикацию выполняется построчно. Поскольку при разработке программы был испытан дефицит регистров общего назначения, все текущие и экстремальные значения температур сохраняются в двоичном коде, а перед выводом на индикацию перекодируются в двоично-десятичный код, который сразу записывается в регистры индикации. После вывода на индикацию первой (верхней) строки значения второй строки перекодируются и записываются в те же регистры индикации, а затем — выводятся на индикацию.
Для определения температуры с точностью 0,1 градуса термодатчиком DS18B20 необходимо время 0,75 с, поэтому каждое измерение одним термодатчиком выполняется один раз в две секунды. Измерение первым термодатчиком происходит каждую четную, а вторым — каждую нечетную секунду. На рис.3 измерение двух температур показано параллельно, хотя в действительности они выполняются последовательно. После каждого измерения температуры происходит проверка кнопок и вывод на индикацию.
После каждого принятого от термодатчика значения температуры выполняется сравнение текущей температуры с температурой, сохраненной в регистрах максимальной и минимальной температуры. Сравнение температур начинается со сравнения знаков измеренного и сохраненного значения. После сравнения знаков, при необходимости, сравниваются значения измеренных и сохраненных величин. Алгоритм сравнения знаков и выполняемые действия в зависимости от результата сравнения можно понять, рассмотрев табл. 1.