1.2 Разработка структурной схемы устройства
Ссылаясь на рассмотренные методы и структуры аналогичных устройств, можно сказать, что основой прибора должен быть микроконтроллер, как ядро, где происходит обработка входной информации, а также индикация, на которой отображается информация в удобном для оператора виде.
Так как устройство стационарное, работающее в лабораторных условиях, то есть необходимость разработать источник питания.
Для достаточной чувствительности устройства необходимо применить усилитель–формирователь. Тогда устройство имеет вид (рисунок 1.3).
рисунок 1.3
Принцип работы структуры заключается в следующем. На вход устройства поступает сигнал с внешнего источника. Благодаря усилителю–формирователю происходит усиление сигнала и преобразование в удобную для счета форму. Преобразованный сигнал поступает в PIC через порт и благодаря ПО происходит обработка входного сигнала в виде временной величины, что в свою очередь выводится через порт на индикацию.
1.3 Описание базового микроконтроллера
1.3.1 Регистры
Память данных разбита на два банка, которые содержат регистры общего назначения РОН и регистры специального назначения РСН. Выбор банка определяется состоянием бита RРО в регистре STATUS. Когда RPO установлен в "1", выбран банк 1, иначе — 0. Первые 12 байт каждого банка отведены под РСН. Некоторые РСН отображаются одновременно на оба банка. РОН доступны из любого банка.
Регистры общего назначения могут быть адресованы прямо или косвенно с использованием регистра косвенной адресации FSR. Регистры специального назначения используются для управления ЦПУ и функциями ввода-вывода и представленны в таблице 1.1.
Регистр STATUS содержит флаги АЛУ, параметры сброса (RESET) и биты выбора банка памяти данных. Регистр STATUS так же, как и любой другой регистр, может быть операндом для любой команды. Если регистр STATUS используется в качестве операнда для команды, которая воздействует на биты Z, DC или С, то непосредственная запись в эти биты запрещена. Более того, запись в биты -ТО и -PD запрещена. Поэтому результат команды, использующей STATUS в качестве регистра назначения, может отличаться от ожидаемого.
Регистр OPTION доступен для чтения и записи и содержит различные управляющие биты для конфигурации предделителя TMRO/WDT, самого TMR0 и подтягивающих резисторов GPIO.
Регистр INTCON доступен для чтения и записи и содержит биты разрешения прерываний: общего, периферийных устройств и TMR0, а также флаг переполнения TMR0.
Таблица 1.1 — Регистры специального назначения
Обозначение | Описание | |||||||
Бит7 | Бит6 | Бит5 | Бит4 | Бит3 | Бит2 | Бит1 | Бит0 | |
Банк 0 | ||||||||
INDF | При обращении производится доступ к ОЗУ по адресу в FSR | |||||||
TMR0 | Регистр TMR0 | |||||||
PCL | Младший байт счетчика команд PC | |||||||
STATUS | IRP | RP1 | RP0 | -TO | -PD | Z | DC | C |
FSR | Индексный регистр косвенной адресации | |||||||
PORTA | — | — | — | RA4/T0CKI | RA3 | RA2 | RA1 | RA0 |
PORTB | RB7 | RB6 | RB5 | RB4 | RB3 | RB2 | RB1 | RB0/INT |
EEDATA | Регистр данных Flash–ПЗУ | |||||||
EEADR | Регистр адреса Flash–ПЗУ | |||||||
PCLATH | — | — | — | Буфер для записи старших 5 бит РС | ||||
INTCON | GIE | EEIE | T0IE | INTE | RBIE | T0IF | INTF | RBIF |
Банк 1 | ||||||||
INDF | При обращении производится доступ к ОЗУ по адресу в FSR | |||||||
OPTION | GPPU | INTEDG | T0CS | T0SE | PSA | PS2 | PS1 | PS0 |
PCL | Младший байт счетчика команд PC | |||||||
STATUS | IRP | RP1 | RP0 | -TO | -PD | Z | DC | C |
FSR | Индексный регистр косвенной адресации | |||||||
TRISA | — | — | — | Регистр направления данных PORTA | ||||
TRISB | Регистр направления данных PORTB | |||||||
EECON1 | — | — | — | EEIF | WRERR | WREN | WR | RD |
EECON2 | Регистр 2 управления Flash–ПЗУ (физически не реализован) | |||||||
PCLATH | — | — | — | Буфер для записи старших 5 бит РС | ||||
INTCON | GIE | EEIE | T0IE | INTE | RBIE | T0IF | INTF | RBIF |
Таблица 1.2 — Состояние регистров после сброса POR
Регистр | Состояние |
W | xxxx xxxx |
INDF | ---- ---- |
TMR0 | xxxx xxxx |
PCL | 0000 0000 |
STATUS | 0001 1xxx |
FSR | xxxx xxxx |
PORTA | ---x xxxx |
PORTB | xxxx xxxx |
EEDATA | xxxx xxxx |
EEADR | xxxx xxxx |
PCLATH | ---0 0000 |
INTCON | 0000 000x |
OPTION | 1111 1111 |
TRISA | ---1 1111 |
TRISB | 1111 1111 |
EECON1 | ---0 x000 |
EECON2 | ---- ---- |
Регистр INDF не является физическим регистром. При обращении к регистру INDF на самом деле происходит косвенная адресация памяти данных.
Косвенная адресация реализована через регистр INDF. Любая команда, использующая регистр INDF, фактически обращается к данным, на которые указывает регистр адреса в файле (FSR). Чтение самого INDF с помощью косвенной адресации дает в результате 00h. Результатом косвенной записи в регистр INDF будет NOP.
1.3.2 Стек
PIC16F84 имеет аппаратный стек глубиной 8 13-битных слов. Стек не является частью памяти программ или данных, а указатель стека не может быть явно прочитан или модифицирован. При выполнении команды CALL или возникновении прерывания PC сохраняется в стеке. При выполнении команд RETURN, RETLW или RETFIE значение PC восстанавливается из стека. Содержимое PCLATH при этом не изменяется.
Стек работает как циклический буфер. Это означает, что после того, как в стек было помещено восемь записей, девятая помещается на место первой, десятая - на место второй, и т.д.
1.3.3 Порты ввода/вывода
PIC16F84 имеет два порта, а именно PORTA, PORTB. Некоторые каналы портов совмещают функции выводов других периферийных устройств.
PORTA — это 5-разрядный порт. RA4 имеет триггер Шмитта на входе и открытый сток на выходе. Остальные каналы порта имеют входные уровни ТТЛ и выходные буферы КМОП. Порт имеет регистр направления TRISA, с помощью которого каналы порта могут быть индивидуально настроены на ввод или на вывод.
Установка в "1" бита регистра TRISA определяет соответствующий канал PORTA как вход, т.е. выходные буферы переводятся в третье состояние. Установка в "0" бита регистра TRISA определяет соответствующий канал PORTA как выход, т.е. содержимое защелки порта выводится на соответствующий вывод микросхемы.
Чтение регистра PORTA возвращает состояние на выводах порта, тогда как запись производится в защелку PORTA. Все операции записи в порт производятся как чтение-модификация-запись, т.е. сначала производится чтение состояния выводов, затем модификация и запись в защелку. Канал RA4 также работает как вход тактового сигнала TMR0.
PORTВ — это 8-разрядный порт, который имеет регистр направления TRISB, с помощью которого каналы порта могут быть индивидуально настроены на ввод или на вывод.
Установление в "1" бита регистра TRISB определяет соответствующий какал PORTB как вход, т.е. выходные буферы переводятся в третье состояние. Установление а "0" бита регистра TRISB определяет соответствующий канал PORTB как выход, т.е. содержимое защелки порта выводится на соответствующий вывод микросхемы.
Все контакты PORTВ имеют встроенные подтягивающие резисторы. Их включением управляет один бит -RCPU, он должен быть установлен в "0". Подтягивающие резисторы автоматически выключаются, когда каналы порта настраиваются на вывод и после POR.
Все операции вывода в порт осуществляются как чтение-модификация-запись. Команды BCF и BSF, например, считывают значение порта в ЦПУ, выполняют операцию с битом и записывают результат обратно. Требуется осторожность при применении этих команд к порту, содержащему как входы, так и выходы. Например, операция BSF надбитом 5 PORTB считывает все восемь битов PORTB в ЦПУ выполняется и записывает результат в выходные защелки. Если другой канал PORTВ используется как двунаправленный и настроен в данный момент на ввод, то входной сигнал будет считан с вывода в ЦПУ и записан а защелку данных этого канала поверх предыдущего значения.
1.3.4 Таймер
Возможности TMR0:
-8-разрядный таймер доступен для чтения и записи,
-8-разрядный программируемый предделитель,
-выбор источника тактового сигнала (внутренний или внешний),
-выбор активного фронта внешнего тактового сигнала,
-прерывание по переполнению таймера.
Режим работы от внутреннего тактового сигнала выбирается установлением в "0" бита Т0CS. Приращение значения TMR0 производится в каждом машинном цикле (без предделителя). После записи в TMR0 нового значения инкремент счетчика запрещен два последующих цикла.
Режим работы от внешнего тактового сигнала выбирается установлением в "1" бита T0СS. Приращение значения TMR0 производится по нарастанию или по спаду, а зависимости от состояния бита T0SЕ, сигнала со входа T0CKI.
TMR0 имеет программируемый предделитель. Предделитель может быть подключен либо к TMRO, либо к WDT. Бит PSA управляет подключением предделителя.
Прерывание от TMR0 возникает при переполнении TMR0, при этом флаг T0IF устанавливается в "1" и TMR0 продолжает работу. Запретить это прерывание можно установкой в "0" бита T0IE. Процедура обработки прерывания должна установить флаг T0IF в "0" перед тем, как вновь разрешить прерывание. Прерывание от TMRO не может вывести процессор из режима SLEEP, поскольку таймер в этом режиме выключен.
1.3.5 Предделитель
8-разрядный счетчик может использоваться как предделитель для TMR0 или как постделитель для WDT. Имеется только один преддепитель, который может быть использован либо для TMR0, либо для WDT. Подключение предделителя к TMR0 означает, что WDT не может его использовать, и наоборот.