В микроконтроллерах AVR и PIC управление сторожевым таймером несколько отличается. Так, в микроконтроллерах AVR для этого используется регистр управления WDTCR (адрес в области ввода/вывода – 0x21, адрес SRAM – 0x41) (рис. 5.2).
Рис. 5.1. Структурная схема сторожевого таймера
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
– | – | – | WDTOE | WDE | WDP2 | WDP1 | WDP0 |
Рис. 5.2. Регистр WDTCR микроконтроллеров AVR
Назначение отдельных разрядов регистра WDTCR:
-WDP0-WDP2 – выбор коэффициента деления частоты следования сигналов сброса (при этом период до наступления сброса зависит от рабочего напряжения процессора – табл. 5.1);
-WDE – включение/отключение сторожевого таймера (1 – включен);
-WDTOE – если сторожевой таймер должен быть отключен, следует установить этот разряд в лог. 1. После установки этого разряда он в течение четырех периодов такта системной синхронизации остается в состоянии лог. 1, а затем аппаратно сбрасывается в лог. 0. Программа пользователя имеет возможность отключить сторожевой таймер посредством записи лог. 0 в разряд WDE только во время этих четырех тактов системной синхронизации.
Таблица 5.1 Назначение разрядов WDP0 - WDP2 регистра WDTCR
WDP2 | WDP1 | WDPP | Коэффициент деления | Период до сброса (при Vcc в 5 В) | Период до сброса (при Vcc = 3 В) |
0 | 0 | 0 | 1 | 16 мс | 47 мс |
0 | 0 | 1 | 2 | 32 мс | 94 мс |
0 | 1 | 0 | 4 | 64 мс | 190 мс |
0 | 1 | 1 | 8 | 128 мс | 380 мс |
1 | 0 | 0 | 16 | 256 мс | 750 мс |
1 | 0 | 1 | 32 | 512 мс | 1,5с |
1 | 1 | 0 | 64 | 1 с | Зс |
1 | 1 | 1 | 128 | 2,1 с | 6с |
В системе команд AVR сторожевой таймер сбрасывается в исходное состояние по команде wdr. В микроконтроллерах PIC для управления сторожевым таймером предназначен рассмотренный выше регистр OPTION. Для этого разряд PSA должен быть установлен в лог. 1, чтобы предварительный делитель частоты был переключен на использование совместно со сторожевым таймером, а не с TMR0. Коэффициент деления выбирается с помощью разрядов PS2-PS0 (табл. 5.2). В отличие от микроконтроллеров AVR, в микроконтроллерах PIC отсутствует возможность включать/отключать сторожевой таймер с помощью регистра управления. Единственный способ предотвратить сброс от сторожевого таймера – периодически выполнять ассемблерную команду clrwdt.
Таблица 5.2. Выбор коэффициента деления частоты следования сигналов сброса от сторожевого таймера в микроконтроллерах PIC
PS2 | PS1 | PS0 | Коэффициент деления | Период до сброса |
0 | 0 | 0 | 1 | 18 мс |
0 | 0 | 1 | 2 | 36 мс |
0 | 1 | 0 | 4 | 72 мс |
0 | 1 | 1 | 8 | 144 мс |
1 | 0 | 0 | 16 | 288 мс |
1 | 0 | 1 | 32 | 576 мс |
1 | 1 | 0 | 64 | 1,2 с |
1 | 1 | 1 | 128 | 2,3 с |
Параллельные порты – это особые устройства ввода/вывода, позволяющие передавать во внешний мир или принимать одновременно восемь разрядов данных. Для обозначения портов используются латинские буквы А, В, С и т.д. Количество портов ввода/вывода варьируется в зависимости от модели микроконтроллера.
В микроконтроллерах AVR каждому параллельному порту ввода/вывода поставлены в соответствие три регистра (букве х соответствует имя порта А, В и т.д.):
-DDRx – регистр направления передачи данных – определяет, является тот или иной вывод порта входом или выходом; если некоторый разряд регистра DDRx содержит лог. 0, то соответствующий вывод порта сконфигурирован как вход, в противном случае – как выход;
-PORTx – регистр порта – если вывод выполняет роль выхода, то в соответствующий разряд записывается значение, предназначенное для вывода; если вывод выполняет роль входа, то лог. 0 в некотором разряде регистра PORTx соответствует высокоомный вход, а лог. 1 – вход, нагруженный подтягивающим сопротивлением;
-PINx – регистр выводов порта – в отличие от регистров DDRx и PORTx доступен только для чтения и позволяет считать входные данные порта на внутреннюю шину микроконтроллера.
Выводы портов зачастую выполняют различные альтернативные функции при работе с внутренними и периферийными модулями микроконтроллеров AVR. Так, к примеру, в некоторых моделях в качестве внешних тактовых входов таймеров/счетчиков Т/С0 и Т/С1 используются разряды 0 и 1 порта В или 4 и 5 порта D. Точное назначение выводов портов следует сверять по спецификации микроконтроллера.
В микроконтроллерах PIC каждому параллельному порту ввода/вывода поставлены в соответствие два регистра:
-PORTx – регистр данных порта;
-TRISx – регистр направления передачи данных через выводы порта (лог. 1 в некотором разряде этого регистра соответствует режим ввода, а лог. 0 – режим вывода).
В микроконтроллерах PIC серии 18Сх порт D может работать в режиме управляемого параллельного порта PSP (Parallel Slave Port). Это означает, что он действует как регистр, который может быть подключен к шине другого микроконтроллера, обмениваясь с ним данными. В режиме PSP, как и в случае обмена данными с любым периферийным устройством, используются сигналы RD (чтение), WR (запись) и CS (выбор кристалла) – разряды 0-2 порта Е (пример – рис. 6.1).
Рис. 6.1. Пример подключения внешнего микроконтроллера PIC в режиме PSP
Для управления режимом PSP используется регистр TRISE (рис. 6.2).
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
IBF | OBF | IBOV | PSPMODE | – | TRISE2 | TRISE1 | TRISE0 |
Рис. 6.2. Регистр TRISE микроконтроллеров PIC
Режим PSP активизируется путем установки в лог. 1 разряда PSPMODE. Прерывания разрешаются установкой в лог. 1 разряда PSPIE (разряд 7) регистра PIE1, а запросы формируются в разряде PSPIF (разряд 7) регистра PIR1. С помощью разрядов 0-2 регистра TRISE осуществляется выбор режима для соответствующих разрядов порта Е.
Когда на линиях CS и RD (выводы RE2 и RE0) одновременно появляется низкий уровень сигнала, содержимое регистра OUTREG выводится через порт D. При записи в регистр OUTREG устанавливается в лог, 1 разряд OBF регистра TRISE – это означает, что выходной буфер заполнен данными. После передачи данных разряд OBF автоматически сбрасывается в лог. 0.
Когда на линиях CS и WR (выводы RE2 и RE1) одновременно появляется низкий уровень сигнала, осуществляется прием данных через порт D. Принятая величина сохраняется в регистре INREG, при этом автоматически устанавливается в лог. 1 разряд IBF регистра TRISE. После программного считывания содержимого регистра INREG этот разряд автоматически сбрасывается в лог. 0.
Если ранее принятый байт не считывается до поступления следующего байта в регистр INREG, устанавливается в лог. 1 разряд IBOV регистра TRISE, указывающий на переполнение входного буфера.
Последовательный ввод/вывод
В отличие от параллельного обмена данными, в случае последовательного ввода/вывода используется только одна информационная линия. При этом передача данных бывает асинхронной и синхронной.
При синхронном последовательном вводе/выводе синхронизируется передача отдельных битов данных с помощью одновременно передаваемого тактового сигнала. Синхронная последовательная передача данных применяется, на уровне печатных плат, в том числе – для обмена данными между различными интегрированными блоками в составе схемы микроконтроллера и различными периферийными схемами (например, для обработки видеосигнала).
В противоположность этому, при асинхронной передаче данных передается не тактовый сигнал, а старт-бит и стоп-бит, определяющие начало и завершение передачи слова данных (рис. 7.1).
Рис. 7.1. Типичный формат асинхронной передачи данных (в данном примере – байта 10000010)
Главной областью применения асинхронной передачи данных, является не обмен данными в составе схемы, а коммуникация между блоками, разделенными пространственно и обладающими признаками собственного интеллекта. В качестве примера можно назвать связь между персональным компьютером и принтером, модемом, программирующим устройством или регистратором данных.
В микроконтроллерах AVR асинхронная передача данных осуществляется с помощью приемопередатчика UART, а в микроконтроллерах PIC – приемопередатчика USART или по шине CAN. Для синхронного ввода/вывода используется особый режим приемопередатчика USART, а также интерфейсы SPI и I2С (в микроконтроллерах PIC – с помощью порта MSSP).
Для работы UART выделены в общей сложности четыре регистра:
-регистр управления UCR (адрес в области ввода/вывода – 0х0А, адрес SRAM – 0х2А) – предназначен для управления функциями приемопередатчика и для разрешения/запрета прерываний от UART (рис. 7.2);
-регистр состояния USR (адрес в области ввода/вывода – 0x0В, адрес SRAM –0x2В) (рис. 7.3);
-регистр данных UDR (адрес в области ввода/вывода – 0х0С, адрес SRAM – 0x2С) – физически состоит из двух регистров, обращение к которым осуществляется по одному и тому же адресу; один из них используется для передачи, а другой – для приема данных;
-регистр UBRR (адрес в области ввода/вывода – 0x09, адрес SRAM – 0x29) – применяется для настройки требуемой скорости передачи данных с помощью встроенного контроллера, позволяющего устанавливать наиболее распространенные скорости передачи по стандарту RS232C.
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
RXCIE | TXCIE | UDRIE | RXEN | TXEN | CHR9 | RXB8 | TXB8 |
Рис. 7.2. Регистр управления UCR микроконтроллеров AVR