- •1. Операторы выбора языка c51: if и switch.
- •2. Операторы цикла языка с51: while, do…while, for.
- •3. Операторы перехода языка с51: break, continue, goto.
- •4. Программирование параллельным вводом/выводом в с51: операторы управления портами и отдельными разрядами портов. Примеры программ управления светодиодами и опроса контактов переключателей.
- •/* Программа управления светодиодом vd1 от кнопки sb1 */
- •5. Программирование таймеров микроконтроллеров mcs-51 на языке с51.
- •6. Программирование системы прерываний микроконтроллеров mcs-51 на языке с51.
- •7. Программирование последовательного ввода/вывода микроконтроллеров mcs-51 на языке с51.
- •8. Микроконтроллеры pic18: общая характеристика, особенности архитектуры и системы команд.
- •9. Язык с18 для pic-микроконтроллеров: структура программы, директивы препроцессора, ключевые слова.
- •10. Представление информации в языке с18: типы данных, переменные и константы.
- •11. Операции арифметические, поразрядные логические, логические и отношения в языке с18.
- •12. Операторы управления вычислительным процессом в языке с18.
- •13. Функции в языке с18: определение функции, прототип, библиотечные функции.
- •14. Функции формирования временных задержек в языке с18.
- •15. Программирование на языке с18 типовых функций управления и контроля: вывод информации в порт, управление отдельными разрядами портов, опрос переключателя.
- •16. Подключение жк-дисплея к pic-микроконтроллеру: структура жк-дисплея, функции управления дисплеем.
- •17. Аналого-цифровое преобразование в pic-микроконтроллерах: структура внутреннего ацп, функции управления ацп на языке с18.
- •18. Реализация широтно-импульсной модуляции в pic-микроконтроллерах: параметры шим, функции управления шим на языке с18.
- •Void ClosePwm1(void);
- •Void OpenPwm1(char period);
- •Void SetDcpwm1(unsigned int dutycycle);
- •19. Прерывания в pic18: источники прерываний, управляющие биты, программирование прерываний на языке с18.
- •20. Динамическое управление линейным дисплеем на семисегментных индикаторах в pic-микроконтроллерах.
- •21. Интерфейсы мпс: понятие и характеристики. Стандартные интерфейсы мпс.
- •22. Внешние интерфейсы мпс: основные параметры, последовательные и параллельные, синхронные и асинхронные, способы соединения устройств.
- •23. Интерфейс rs-232: назначение, основные технические характеристики, принципы передачи данных.
- •24. Интерфейс ирпс: назначение, основные технические характеристики, принципы передачи данных.
- •25. Интерфейсы rs-422 и rs-485: назначение, основные технические характеристики, принципы передачи данных.
- •26. Интерфейс spi: назначение, основные технические характеристики, принципы передачи данных.
- •27. Интерфейс i2c: назначение, основные технические характеристики, принципы передачи
- •28. Интерфейс can: общее описание и основные параметры, виды и форматы сообщений в can.
- •29. Интерфейс can: арбитраж, обнаружение и обработка ошибок, скорость передачи и длина сети.
18. Реализация широтно-импульсной модуляции в pic-микроконтроллерах: параметры шим, функции управления шим на языке с18.
Скважностью импульсной последовательности называется отношение периода следования импульсов Т к их длительности tИ и обозначается буквой Q:
Q = T / tИ
Скважность – величина безразмерная и не имеет единиц измерения.
Часто вместо скважности используется термин коэффициент заполнения γ, который является величиной, обратной скважности:
γ = 1 / Q = tИ / T
Коэффициент заполнения обычно выражается в процентах:
γ = (tИ / T) 100%
Все микроконтроллеры семейства PIC18 имеют внутренние модули, которые могут вырабатывать импульсные последовательности с широтно-импульсной модуляцией (ШИМ). Количество этих модулей или по-другому каналов ШИМ может быть от 1 до 5.
Для облегчения разработки программ управления каналами ШИМ в библиотеке пакета МСС18 имеются несколько функций. В таблице приведены некоторые наиболее часто используемые функции. Полное описание их дано в заголовочном файле pwm.h.
Функции ШИМ
Функция |
Описание |
ClosePWMx |
Дезактивирует ШИМ канала х |
OpenPWMx |
Конфигурирует ШИМ канала х |
SetDCPWMx |
Записывает значение нового рабочего цикла в ШИМ канала х |
Рассмотрим вкратце библиотечные функции ШИМ на примере канала 1.
ClosePWM1( ) – дезактивирует ШИМ канала 1.
Прототип функции:
Void ClosePwm1(void);
OpenPWM1()–конфигурирует ШИМ канала 1, задавая период и длительность импульсов. Для работы ШИМ используется только таймер 2.
Прототип функции:
Void OpenPwm1(char period);
Аргумент функции period – может быть любым числом в пределах от 0х00 до 0xFF.
SetDCPWM1( ) – записывает новое значение рабочего цикла в регистр ШИМ канала 1.
Прототип функции:
Void SetDcpwm1(unsigned int dutycycle);
Аргумент функции dutycycle – может быть любым 10-битным числом. Только младшие 10 бит числа dutycycle записываются в регистры канала ШИМ.
unsigned int i=512;
19. Прерывания в pic18: источники прерываний, управляющие биты, программирование прерываний на языке с18.
Микроконтроллеры PIC18 имеют несколько источников прерываний и функцию приоритетной системы прерываний, которая позволяет для каждого источника прерываний назначить высокий или низкий приоритет. При возникновении прерывания с высоким приоритетом происходит переход по вектору 000008h, а при возникновении прерывания с низким приоритетом – по вектору 000018h.
Каждому источнику прерываний соответствует три управляющих бита:
флаг прерываний, указывает на то, что выполнено условие возникновения прерывания;
бит разрешения прерывания, разрешает переход по вектору прерывания при установке соответствующего флага;
бит приоритета, выбор низкого или высокого приоритета прерывания.
Обработка прерывания заключается в следующем. Приостанавливается выполнение текущей программы, сохраняется текущий контекст и передается управление подпрограмме обработки прерывания ISR. После выполнения ISR восстанавливается информация о предыдущем контексте и возобновляется нормальная работа программы.
Рассмотрим основные особенности программирования прерываний при использовании компилятора С18.
Как и любая функция языка Си, подпрограмма обработки прерывания ISR может иметь локальные и глобальные переменные. Однако ISR не может иметь входных параметров и не может возвращать какого-либо значения, то есть объявляется как: void isr(void)
{
……..
}
ISR может быть вызвана только реакцией на работу аппаратуры, но не из другой Си-функции.
В языке С18 не производится автоматическое размещение начала ISR по адресу вектора прерывания. Это объясняется тем, что источников прерывания, а, следовательно, и ISR может быть несколько. Векторов прерывания, то есть адресов только два: 000008h для высокого приоритета и 000018h для низкого приоритета.
Обычно по адресу вектора прерывания размещается ассемблерная команда GOTO для перехода на нужную ISR. Используется in-line ассемблер, при этом блок команд ассемблерного кода должен начинаться с директивы _asm и кончаться директивой _endasm:
_asm
………… // команды Ассемблера
_endasm
Для размещения вектора прерывания в программном коде используется директива
#pragma code section_name = address
Здесь section_name – идентификатор языка Си, address – целая константа.
Для возврата в исходную секцию кода используется директива
#pragma code
В языке С18 для задания приоритета функции обработки прерывания имеются две директивы:
#pragma interrupt fname
#pragma interruptlow fname
Директива #pragma interrupt объявляет функцию обработки прерывания как имеющую высокий приоритет, а директива #pragma interruptlow – как имеющую низкий приоритет.
Пример программирования прерываний в языке С18.
#include <p18fxxx.h>
void low_isr(void); // прототип ISR с низким приоритетом
#pragma interruptlow low_isr // функция low_isr объявляется с низким приоритетом
#pragma code low_vector = 0x18 // дальнейший программный код будет начинаться с адреса 000018h
void low_iterrupt(void)
{
_asm
goto low_isr // переход на функцию с именем low_isr
_endasm
}
#pragma code // возврат в исходную программную секцию кода
………………………………..
void main(void) // главная функция программы
{
……………………..
}
void low_isr(void) // функция обработки прерывания с низким приоритетом
{
…….
}
Управление приоритетной системой прерываний в микроконтроллерах семейства PIC18 выполняется с помощью бита с именем IPEN, который находится в регистре специальных функций RCON.
Если IPEN = 0, то приоритетная система прерываний выключена, и все прерывания имеют одинаковые приоритеты. По умолчанию предполагается, все прерывания будут иметь высокий приоритет, т.е. при возникновении любого прерывания происходит переход по вектору 000008h. Для общего (глобального) разрешения прерываний надо установить бит GIE = 1, который находится в регистре INTCON.
Если IPEN = 1, то приоритетная система прерываний включена. Для общего (глобального) разрешения прерываний с высоким приоритетом надо установить бит GIEH = 1. Для общего разрешения прерываний с низким приоритетом надо установить бит GIEL = 1. Эти биты находятся в регистре INTCON.