
- •Введение.
- •1.1. Основные характеристики.
- •1.2. Структурная схема микроконтроллера.
- •1.3. Блоки памяти.
- •1.4. Регистры состояния и управления.
- •1.5. Порты ввода-вывода.
- •2.0.Функциональные модули микроконтроллера pic16f873.
- •2.1. Таймеры.
- •2.1.2. Модуль таймера tmr1.
- •2.1.3. Модуль таймера tmr2.
- •2.2. Модуль сср.
- •2.2.2. Режим сравнения.
- •2.2.3. Режим широтно-импульсного преобразователя (шим).
- •2.3. Модуль ацп.
- •2.3.1.Работа модуля осуществляется в следующей последовательности:
- •2.3.2.Временные требования к работе модуля ацп.
- •2.3.4. Последовательность преобразования аналогового сигнала.
- •2.3.5. Выравнивание результата преобразования.
- •2.3.6. Работа модуля ацп в sleep режиме.
- •2.3.7. Пример программирования модуля ацп.
- •2.4.Универсальный синхронно – асинхронный приемопередатчик (usart).
- •2.4.1.Режим асинхронного полного дуплекса.
- •2.4.1.1. Асинхронный передатчик usart.
- •2.4.1.2. Асинхронный приемник модуля usart.
- •2.5.Модуль ведущего синхронного последовательного порта (mssp).
- •2.5.1. Режим ведомого i2c.
- •2.5.1.1.Прием данных.
- •2.5.1.2. Передача данных.
- •2.5.1.3.Поддержка общего вызова.
- •2.5.1.4.Работа в sleep режиме.
- •2.5.2. Режим ведущего i2c.
- •2.5.3. Подключение абонентов к шине i2c.
- •2.6. Прерывания.
- •2.7. Сторожевой таймер.
- •2.8. Система команд микроконтроллера.
- •Incf Прибавить 1 к содержимому регистра f.
- •Incfsz Прибавить 1 к регистру f, пропустить, если 0.
- •Iorlw Побитное «или» регистра w и константы k.
- •Iorwf Побитное “или» регистров w, f.
- •Xorlw Побитное «Исключающее или» константы и регистра w.
- •Xorwf Побитное «исключающее или» регистров w,f.
1.5. Порты ввода-вывода.
Для связи микроконтроллера с внешними устройствами и системами служат порты ввода-вывода. Микроконтроллер PIC16F873 имеет три порта, именуемые PORTA, PORTB, PORTC. Другие микроконтроллеры имеют другой состав, например, микроконтроллер PIC16F874 кроме перечисленных портов, имеет еще два порта: PORTD, PORTE. Порты ввода-вывода предназначены либо для ввода сигналов от каких либо внешних источников, либо для вывода сигналов на другие устройства. Все выводы всех портов представляют собой универсальные двунаправленные каналы, которые могут быть настроены как на ввод, так и на вывод информации. Некоторые выводы мультиплицированы с каналами функциональных блоков микроконтроллера и в случае их использования в этих блоках каналы портов не являются универсальными каналами ввода вывода. Назначение мультиплицированных выводов будет рассматриваться при изучении конкретных функциональных блоков. Однако порядок настройки портов на вход или выход не зависит от места использования канала. Рассмотрим их подробнее.
PORTA представляет собой шестиразрядный порт на регистре специального назначения PORTA по адресу 05h.(в микроконтроллере PIC16F874 – восьмиразрядный). Обозначения разрядов приведены в таблице 12. Направление передачи информации задается установкой соответствующих разрядов регистра TRISA (адрес 85h): при записи в разряды регистра TRISA «1» соответствующий вывод порта А настраивается на ввод информации, при этом выходной буфер переводится в третье состояние, при записи «0» - на вывод – уровень сигнала - TTL. При использовании порта на вывод информации операции производятся по циклу «чтение – модификация – запись», т.е. сначала производится чтение с выходного буфера, затем изменение содержимого и запись в защелку порта.
Таблица 12
-
Номера битов
7
6
5
4
3
2
1
0
Обозначения выводов
-
-
RA5
RA4
RA3
RA2
RA1
RA0
Один из выводов - RA4 - имеет на входе триггер Шмитта, а на выходе открытый сток. Все остальные выводы имеют на входе TTL-буфер, а на выходе полнофункциональные КМОП - буферы.
Примечание. В микроконтроллере PIC16F887 PORTA может работать как в аналоговом режиме, так и в цифровом. Для перевода порта в цифровой режим необходимо с регистр специального назначения ANSEL записать 0.
PORTB представляет собой 8 - ми разрядный внешний порт на регистре специального назначения PORTB (адрес 06h). Выводы порта также могут быть настроены как на вход, так и на выход путем записи в соответствующие разряды регистра TRISB (адрес 86h): лог. «1» при настройке выводов на вход и лог. «0» при настройке вывода на выход. Обозначения разрядов порта приведены в таблице 13 .
Таблица 13.
-
Номера битов
7
6
5
4
3
2
1
0
Обозначения выводов
RB7
RB6
RB5
RB4
RB3
RB2
RB1
RB0
Отличительной особенностью порта В является наличие на всех выводах
подтягивающих резисторов, которые могут быть подключены к выводам в случае необходимости путем записи лог. «1» в разряд –RBPU (7бит) регистра OPTION_REG. Подтягивающие резисторы автоматически отключаются, если соответствующие выводы переводятся в режим выхода.
Примечание. PORTB также может работать в аналоговом и цифровом режиме, и для переключения порта в цифровой режим необходимо записать «0» в регистр специального назначения ANSELH.
PORTC представляет собой 8 – разрядный внешний порт на регистре специального назначения PORTC (адрес 7h). Как и порты А, В, порт С может быть настроен как на вход, так и на выход путем записи в соответствующие разряды регистра TRISC ( адрес 87h). Обозначения разрядов PORTC приведены в таблице 14 .
Таблица 14.
-
Номера битов
7
6
5
4
3
2
1
0
Обозначения выводов
RC7
RC6
RC5
RC4
RC3
RC2
RC1
RC0
Примечания:
В микроконтроллерах типа PIC16F874, PIC16F887 имеются также внешние порты PORTD и PORTE, которые могут быть настроены на вход или на выход с помощью записи в регистры TRISD и TRISE аналогично портам А , В, С.
Большинство выводов всех портов мультиплицированы с выходами различных функциональных блоков, о чем будет идти речь при рассмотрении конкретных функциональных блоков.
Использование и программирование портов можно рассмотреть на примере решения булева уравнения, описывающего фрагмент электроавтоматики станка.
Пример использования внешних портов микроконтроллера.
Принципиальная схема фрагмента в виде «жесткой схемы» показана на рис.1.7.
Рис.1.7. Принципиальная схема фрагмента электроавтоматики.
Р1…Р5, К5 – контакты реле и концевых выключателей фрагмента – входные сигналы электроавтоматики – аргументы булева уравнения.,
Кп – катушка электромагнитного пускателя – выходной сигнал электроавтоматики – функция булева уравнения.
Краткое описание фрагмента: выходной сигнал Кп, например, включение электромагнитного пускателя, формируется в одном из двух вариантов: либо при срабатывании контактов Р1, Р2, Р3 и К5, либо при включенном контакте Р3 и выключенном контакте Р4.
Общий вид булева уравнения, описывающего этот фрагмент, имеет вид:
__
К
п
= Р1*Р2*Р3*Р5 + Р1*Р3*Р4*Р5
Для привязки сигналов электроавтоматики к выводам микроконтроллера составим таблицу соответствия – таблица 15:
Программу работы фрагмента пишем на языке СИ, адаптированном к компилятору
PICC v 9.60, поставляемому вместе с программным обеспечением для программирования микроконтроллеров фирмы Microchip Technology
Таблица 15
Обозначение сигнала |
Р1 |
Р2 |
Р3 |
Р4 |
Р5 |
Кп |
Наименование вывода МК |
RB0 |
RB1 |
RB2 |
RB3 |
RB4 |
RC0 |
Программа имеет вид:
#define XTAL_FREQ 4MHZ //Частота тактового генератора 4мггц.
#define byte unsigned char
#define word unsigned int
#include <pic.h>
#include <stdio.h>
__CONFIG(HS & WDTDIS & PWRTEN & LVPDIS & DUNPROT & WRTEN);
void main() {
TRISB = 0xff; // настройка порта В вход
TRISC = 0xFE; //настройка вывода RC0 порта С на выход
OPTION = 0x00; // подключение подтягивающих резисторов,
for(;;) { // цикл рабочей программы
RC0 = (RB0&&RB1&&RB2&&RB4) || (RB0&&RB2&&!RB3&&RB4);
}
} // конец main
Краткое описание работы программы: при выполнении любого из двух условий булева уравнения формируется единичный выходной сигнал на выходе RC0 микроконтроллера, при отсутствии условий - на выходе нулевой сигнал.