- •1.Программирование типовых функций управления: опрос двоичного датчика, ожидание события, дребезг, формирование временной задержки, вывод управляющих сигналов
- •Борьба с дребезгом контактов
- •2. Формирование временных задержек с помощью таймеров
- •3.Виды клавиатур
- •Кодирующие клавиатуры.
- •Табличный метод.
- •Метод сдвигов унитарного кода.
- •4.Подключение светодиодов и светод. Семисегментных индикаторов
- •5. Статический метод управления линейным дисплеем.
- •1. С использованием дешифраторов семисегментного кода.
- •2. С использованием программной перекодировки:
- •6. ДинамичесКий метод управления линейным дисплеем.
- •7. Виды ацп, схемы подключения и программы опроса ацп
- •Интерфейс быстрых ацп с мпс
- •Интерфейс медленных ацп с мпс
- •8) Микроконтроллеры pic18: общая характеристика, особенности архитектуры и системы команд.
- •9. Язык с18 для pic-микроконтроллеров: структура программы, директивы препроцессора, ключевые слова.
- •10. Представление информации в языке Си
- •11. Операции и выражения в Си
- •12.Операторы управления вычислительным процессом
- •13. Функции в языке с18: определение функции, прототип, библиотечные функции.
- •14. Функции формирования временных задержек в языке с18
- •15. Программирование на языке с18 типовых функций управления и контроля: вывод информации в порт, управление отдельными разрядами портов, опрос переключателя.
- •16. Подключение жк-дисплея к pic-микроконтроллеру: структура жк-дисплея, функции управления дисплеем.
- •2.2. Библиотека функций управления жк-дисплеем
- •17. Аналого-цифровое преобразование в pic-микроконтроллерах: структура внутреннего ацп, функции управления ацп на языке с18.
- •18. Реализация широтно-импульсной модуляции в pic-микроконтроллерах: параметры шим, функции управления шим на языке с18.
- •19. Прерывания в pic18: источники прерываний, управляющие биты, программирование прерываний на языке с18.
- •24) Интегрированная среда CodeVisionAvr: состав и назначение, структура программы на языке Си в cvavr, управление портами и отдельными битами.
- •25) Программирование в CodeVisionAvr типовых функций управления и контроля: вывод информации в порт, управление отдельными разрядами портов, опрос переключателя, реализация временных задержек.
- •26. Интерфейс can: общее описание и основные параметры, виды и форматы сообщений в can.
- •27. Интерфейс can: арбитраж, обнаружение и обработка ошибок, скорость передачи и длина сети.
- •28. Понятия: микроконтроллерная система (мкс) и микроконтроллерное устройство (мку). Основные этапы разработки мкс.
- •29. Разработка и автономная отладка аппаратных и программных средств микроконтроллерных систем.
- •30. Методы и средства совместной отладки аппаратных и программных средств микроконтроллерных систем.
14. Функции формирования временных задержек в языке с18
рассмотрим, как на Си получить временную задержку, которая позволит формировать управляющие сигналы с различными временными параметрами.
Допустим, что в схеме МКУ надо получить мигающий режим работы VD1. Чтобы мигание светодиода было хорошо видно, примем частоту смены данных на RC0 около 1 Гц. Задержку организуем с помощью программного цикла for, который будет выполняться определенное число раз. Время выполнения этого цикла и будет определять задержку. Программа может иметь следующий вид.
void delay(void) // функция временной задержки
{
unsigned int i; // переменная цикла – двухбайтное целое беззнаковое число
for(i = 0; i < 50000; i++)
;
}
void main(void)
{
PORTC = 0;
TRISC = 0;
while( 1 )
{
PORTCbits.RC0 = 1;
delay( );
PORTCbits.RC0 = 0;
delay( );
}
}
Определить величину временной задержки, реализуемой функцией delay можно лишь приблизительно следующим образом. Время выполнения команды в PIC18 занимает 1 машинный (командный) цикл TCY , который определяется частотой тактового генератора МК следующим образом:
TCY = 4/FOSC .
При частоте FOSC, равной 4 Мгц длительность машинного цикла будет TCY = 1 мкс.
При реализации цикла for выполняется 50000 раз инкремент переменной i и столько же раз ее проверка на равенство числу 50000. Так что примерное время задержки составит 100000 мкс или 0,1 с.
В компиляторе C18 имеются библиотечные функции задержки, которые позволяют реализовать временные задержки с большой точностью. Для нашего случая можно выбрать функцию Delay10KTCYx(n), которая позволяет получить задержку, кратную 10000 машинных циклов TCY.
Если надо получить задержку на 0,5 с, т.е. 500000 мкс, то при частоте 4 Мгц и TCY = 1 мкс надо в функцию записать число n, равное 500000 / 10000 = 50. Таким образом, окончательно функция задержки будет иметь вид:
Delay10KTCYx(50).
Так как функции задержки находятся в библиотеках С18, то необходимо их подключить с помощью заголовочного файла delays.h. Текст программы управления светодиодом с частотой мигания 1 Гц может иметь вид:
void main(void)
{
PORTC = 0;
TRISC = 0;
while ( 1 )
{
PORTCbits.RC0 = 1; // включить VD1
Delay10KTCYx(50); // задержка на 0,5 с
PORTCbits.RC0 = 0; // выключить VD1
Delay10KTCYx(50); // задержка на 0,с
}
}
15. Программирование на языке с18 типовых функций управления и контроля: вывод информации в порт, управление отдельными разрядами портов, опрос переключателя.
Для рассмотрения примеров программирования типовых функций управления будем использовать микроконтроллер PIC18F242, который имеет три порта ввода/вывода (PORTA, PORTB, PORTC). Принципиальная схема МКУ приведена на рисунке.
Рассмотрим пример программы, которая после включения питания выводит высокие уровни (логические 1) на линии RC0-RC3 и низкие уровни (логические 0) на линии RC4-RC7 порта С.
Вывод информации в порт
void main(void)
{
PORTC = 0; // очистить регистр данных порта С
TRISC = 0; // настроить все линии порта С на вывод
PORTC = 0b11110000; // вывести число 11110000 в порт С
while( 1 ) // зацикливание программы
;
}
Компилятор С18 позволяет управлять отдельными битами регистров специальных функций. Имена регистров и отдельных их разрядов определены в заголовочном файле p18f242.h.
Можно задать значение любого разряда порта МК, используя формат PORTxbits.Rxy,
где x обозначает порт (A, B, C); y – номер разряда этого порта.
Например:
PORTAbits.RA0 = 1; // установить разряд порта RA0 = 1
PORTBbits.RB1 = 0; // сбросить разряд порта RB1 = 0
Управление отдельными разрядами
void main(void)
{
PORTC = 0;
TRISC = 0;
while( 1 )
{
PORTCbits.RC0 = 1; // включить VD1
PORTCbits.RC0 = 0; // выключить VD1
}
}
Опрос переключателя
void main(void)
{
PORTB = 0; // очистить регистр данных порта В
PORTC = 0; // очистить регистр данных порта С
TRISB = 0b10000001; // настроить разряды RB0 и RB7 на ввод, остальные на вывод
TRISC = 0; // настроить все линии порта С на вывод
while( 1 )
{
if(PORTBbits.RB0 == 0)
PORTCbits.RC0 = 1;
else
PORTCbits.RC0 = 0;
}
}
