- •Конспект лекций оглавление
- •Общие с ведения о микроконтроллерах
- •Обобщенная структурная схема микроконтроллера
- •Система прерываний
- •Работа системы прерываний
- •Стек данных
- •Микроконтроллеры Intel, Motorola и Microchip
- •Краткое описание особенностей микроконтроллеров
- •Работа сср в режиме шим
- •Примеры контроллеров 18еххх, 16еххх. Характеристики 16 и 18 серии.
- •Периферийные модули
- •Основные характеристики микроконтроллеров
- •Рекомендации по схематическому решению для портов (16 серия)
- •Структура памяти
- •Банк памяти быстрого доступа
- •Регистр выбора банка памяти данных bsr (18 серия)
- •Косвенная адресация, регистра indf и fsr
- •Операция косвенной адресации
- •Механизм косвенной адресации
- •Работа с памятью рiс16fххх
- •Чтение из еерrом-памяти
- •Запись еерrом данных
- •Управление прерываниями Серия рiс16ххх
- •Система прерывании рiс18fхх2
- •Обработка прерываний
- •Контроллеры pic16f87x
- •Карта памяти микроконтроллеров:
- •Структурная схема микроконтроллеров pic16f87x:
- •Служебные регистр:
- •Контроллеры 18 серии
- •Карта памяти микроконтроллеров рiс18f242/442:
- •Регистры конфигурации контроллера:
- •Аппаратный умножитель 8х8
- •Модуль ацп
- •Конфигурация выводов модуля ацп (рiс16f873/76)
- •Источник опорного напряжения
- •Параллельные порты ввода/вывода
- •Последовательный синхронный порт (мssр)
- •Временные диаграммы работы mssp
- •Пример соединения двух мк через spi
- •Режим i2c последовательного порта mssp.
- •Асинхронно-синхронный последовательный порт (usart)
- •Временные диаграммы работы usart в асинхронном режиме
- •Ведомый параллельный порт (psp)
- •Временные диаграммы порта psp
- •Способы кодирования данных
- •Универсальная последовательная шина (usb) Краткий обзор шины
- •Протоколы передачи
- •Питание
- •Оконечные точки
- •Нумерация устройств
- •Описатели
- •Классы устройств / Драйверы класса
- •Микроконтроллеры с модулем usb
- •Приемопередатчик
- •Регистры управления и состояния модуля usb
- •Регистр флагов прерываний модуля usb (uir)
- •Регистр разрешения прерываний модуля usb (uie)
- •Регистр флагов ошибок модуля usb (ueir)
- •Регистр разрешения прерывания по ошибкам модуля usb (ueie)
- •Регистр состояния модуля usb (ustat)
- •Регистр управления модулем usb (uctrl)
- •Регистр адреса usb (uaddr)
- •Регистр состояния программного обеспечения usb
- •Регистры управления оконечными точками (uepn)
- •Буферы оконечных точек
- •Программирование модуля usb
- •Программное обеспечение usb
- •Основные функции и подпрограммы
- •Ресурсы процессора
- •Уровни стека
- •Память программ
- •Память данных
- •Буферные регистры
- •Выбор страниц/Выбор банков
- •Интегрирование подпрограмм usb в программу
Чтение из еерrом-памяти
1. Записать адрес в регистр ЕЕАDR. Проверить, что записанный адрес корректен для данного типа микроконтроллера.
2. Сбросить в '0' бит ЕЕРGD для обращения к ЕЕРRОМ памяти данных.
3. Инициализировать операцию чтения установкой бита RD в ‘1’.
4. Прочитать данные из регистра ЕЕDАТА.
Пример: Чтение из ЕЕРRОМ памяти данных
BSF STATUS.RP1 ;
BCF STATUS.RPO ; Выбрать банк 2
MOVF ADDR.W ; Записать адрес
MOVWF EEADR ; ячейки
BSF STATUS.RFO ; Выбрать банк 3
BCF EECON1.EEPGD ; Выбрать EEPROM память
BSF EECON1.RD ; Инициализировать чтения
BCF STATUS.RPO ; Выбрать банк 2
MOVF EEDATA.W ; W = EEDATA
Запись еерrом данных
1. Если шаг 10 не был выполнен, то необходимо проверить, что не происходит запись (WR=0).
2. Записать адрес в регистр ЕЕАDR. Проверьте, что записанный адрес корректен для данного типа микроконтроллера.
3. Записать 8-разрядное значение в регистр ЕЕDАТА.
4. Сбросить в '0' бит ЕЕРGD для обращения к ЕЕРRОМ памяти данных.
5. Установить бит WREN в ‘1’, разрешив запись в ЕЕРRОМ память.
6. Запретить прерывания, если они разрешены.
7. Выполнить обязательную последовательность из пяти команд:
- Запись значения 55h в регистр ЕЕСОN2 (две команды, сначала в W затем в ЕЕССЖ2):
- Запись значения ААh в регистр ЕЕСОN2 (две команды, сначала в W затем в ЕЕСON2);
- Установить бит WR в ‘1’.
8. Разрешить прерывания (если необходимо).
9. Сбросить бит WREN в ‘0’.
10. После завершения цикла записи сбрасывается в '0' бит WR, устанавливается в ‘1’ флаг прерывания ЕЕIF (сбрасывается программно). Если шаг 1 не выполняется, то необходимо проверить состояние битов ЕЕIF, WR перед началом записи.
Пример: Запись в ЕЕРRОМ память данных
BSF STATUS,RP1 ;
BCF STATU,RPO ; Выбрать банк 3
BTFSC EECON1,WR ; Проверить завершения
GOTO $-1 ; операции записи
BCF STATUS, RPO ; Выбрать банк 2
MOVF ADDR,W ; Указать адрес ячейки
MOVWF EEADR ;
MOVWF EEDATA ;
BSF STATUS,RFO ; Выбрать банк 3
BCF EECON1,EEPGD ; Выбрать EEPROM память данных
BSF EECON1,WREN ; Разрешить запись в EEPROM память данных
BСF INTCON,GIE ; Запретить прерывания
MOVLW 0x55 ; Записать 55h в регистр ЕЕСОN2
MOVWF EECON2 ;
MOVLW OxAA ; Записать ААh в регистр ЕЕСОN2
MOVWF EECON2 ;
BSF EECON1.WR ; Инициализировать запись
BSF INTCON, GIE ; Разрешить прерывания
BCF EECON1.WREN ; Выбрать банк 2
Управление прерываниями Серия рiс16ххх
Регистры SFR, связанные с прерываниями: INTCON, PIE1, PIR1, PIE2, PIR2.
Регистр управления прерываниями INTCON:
R/W - 0 |
R/W - 0 |
R/W - 0 |
R/W - 0 |
R/W - 0 |
R/W - 0 |
R/W - 0 |
R/W - x |
GIE |
PEIE |
T0IE |
INTE(2) |
RBIE(1.2) |
T0IF |
INTF(2) |
RBIF(1.2) |
Бит 7 |
|
|
|
|
|
|
Бит 0 |
GIE = 1/0 - глобальное разрешение/запрещение прерываний.
PEIE = 10 - разрешение/запрещение прерываний от периферии.
T0IE = 1/0 - разрешение/запрещение прерываний по переполнению от TMR0.
INTE = 1/0 - разрешение/запрещение внешнего прерывания.
RBIE = 1/0 - разрешение/запрещение прерываний по изменению уровня на выводах RВ7:RВ4 порта РОRТВ.
T0IF - флаг прерывания по переполнению от TMR0.
INTF - флаг внешнего прерывания.
RBIF - флаг прерывания по изменению уровня на выводах RВ7:RВ4 порта РОRТВ.
Примечания:
1) В некоторых МК вместо битов RBIE и RBIF могут быть GPIЕ и GРIF соответственно.
2) Отсутствует у некоторых МК.
3) В МК с одним периферийным модулем этот бит может быть ЕЕIЕ или АDIЕ.
Регистр РIЕ1:
PSPIE |
ADIE |
RCIE |
TXIE |
SSPIE |
CCP1IE |
TMR2IE |
TMR1IE |
Бит 7 |
|
|
|
|
|
|
Бит 0 |
PSPIE: для микроконтроллера РIС16F873 всегда должен быть сброшен
ADIE: 1/0 -разрешение/запрет прерывания от модуля АЦП
RCIE: 10 - разрешение/запрет прерывания от асинхронного последовательного порта при приеме данных
TXIE: 1/0 - разрешение/запрет прерывания от асинхронного последовательного порта при передаче данных
SSPIE: 1/0 - разрешение/запрет прерывания от синхронного последовательного порта
CCP1IE: 1/0 - разрешение/запрет прерывания от модуля ССР
TMR2IE: 1/0 - разрешение/запрет прерывания при совпадении значения Т/С2 со значением регистра РR2
TMR1IE: 1/0 - разрешение запрет прерывания при переполнении Т/С1
Регистр РIЕ2:
- |
0 |
- |
EEIE |
BCLIE |
- |
- |
CCP2IE |
Бит 7 |
|
|
|
|
|
|
Бит 0 |
EEIE: 1/0 - разрешение/запрет прерывания при записи ЕЕРRОМ
BCLIE: 1/0 - разрешение/запрет прерывания при коллизии шины синхронного последовательного порта
CCP2IE: 1/0 - разрешение/запрет прерывания от модуля ССР2
Регистр РIR1:
PSPIF |
ADIF |
RCIF |
TXIF |
SSPIF |
CCP1IF |
TMR2IF |
TMR1IF |
Бит 7 |
|
|
|
|
|
|
Бит 0 |
PSPIF: для микроконтроллера РIС16F873 всегда должен быть сброшен
ADIF: флаг прерывания от модуля АЦП (10 - преобразование выполнено/ не выполнено)
RCIF: флаг прерывания от асинхронного последовательного порта, 1/0 - буфер приема заполнен/пуст
TXIF: флаг прерывания от асинхронного последовательного порта, 1/0 - буфер передачи пуст/заполнен
SSPIF: флаг прерывания от синхронного последовательного порта
CCP1IF: флаг прерывания от модуля ССР1. Режим захвата: значение регистра Т/С1 запомнено. Режим сравнения: совпадение со значением регистра Т/С1 обнаружено. В режиме ШИМ: не используется.
TMR2IF: флаг прерывания при совпадении значения Т/С2 и регистра РR2
TMR1IF: флаг прерывания при переполнении Т/С1
Регистр РIR2:
- |
0 |
- |
EEIF |
BCLIF |
- |
- |
CCP2IF |
Бит 7 |
|
|
|
|
|
|
Бит 0 |
EEIF: флаг прерывания при успешном окончании операции записи в ЕЕРRОМ
BCLIF: флаг прерывания при коллизии шины SSР когда он работает в режиме ведущий I2С
CCP2IF: флаг прерывания от модуля ССР2. Режим захвата: значение регистра Т/С1 запомнено. Режим сравнения: совпадение со значением регистра Т/С1 обнаружено. В режиме ШИМ не используется.
Регистр РСОN содержит флаги для определения источника сброса:
• По включению питания (РОR).
• По сигналу на входе - МСLR
• По переполнению WDТ
• По обнаружению снижения напряжения питания (BOR).
- |
- |
- |
- |
- |
- |
POR |
BOR |
Бит 7 |
|
|
|
|
|
|
Бит 0 |
POR: статус сброса при включении, 1/0 сброс при включении произведен/не произведен
BOR: 1/0 - сброс при падении напряжения питания произведен не произведен
Примечание:
Бит -ВОR может быть любым при включении питания и при отключенном детекторе снижения питания (ВОDЕN=0 в регистре конфигурации), поэтому не должен учитываться. Бит -ВОR нужен для обнаружения последующих сбросов МК при снижении питания.
Аппаратно в стеке сохраняется только адрес возврата из обработчика прерывания. Сохранение и восстановление контекста (содержимого регистров W и STATUS) должен осуществлять сам программист.
За прерываниями закреплено 2 вектора прерываний: 0000h (сброса) и 0004h (один для всех прерывания).
При запросе прерывания (устанавливается флаг соответствующего периферийного модуля) в счетчик команд загружается адрес вектора прерывания 0004h. По этому адресу должна быть расположена команда перехода на начальный адрес подпрограммы обработчика прерываний. При этом бит GIЕ = 0.
Обработчик прерывания: должен сохранить контекст вызывающей программы или подпрограммы, определить требуемый источник прерывания и сбросить его установленный флаг, выполнить необходимые действия по обслуживанию прерывания, восстановить контекст и выполнить команду возврата из прерывания. При этом бит GIЕ = 1.
Время перехода на обработку прерывания - 3-4 машинных цикла.