Програма на языке Си
При создании программы на языке С мы используем компилятор C PRO for AVR. Это програмная среда специально предназначена для разработки программ на языке С для микроконтроллеров AVR.
Любая современная среда программирования работает не просто с текстом программы, а с так называемым проектом.
Задача программиста лишь написать текст программы, для которого в проекте отводится отдельный файл с расширением “с”. Компилятор переводит исходную программу в шестнадцатеричную систему ( создает Hex - файл) для занесения (прошивки) ее в память микроконтроллера.
В дальнейшем мы еще рассмотрим подробно процесс установки и работу с программной средой C PRO for AVR. Сейчас же считаем, что она установлена и запущена.
Сразу после запуска компилятора все параметры принимают значения по умолчанию (все внутренние устройства выключены, внутренние порты ввода- вывода настроены на ввод, используется внутренний генератор с частотой тактирования 4МГц ).Это соответствует начальному состоянию микропроцессора после системного сброса. Те параметры, которые нам не нужны трогать пока не будем ( оставим по умолчанию).
Программа на языке Си выглядит следующим образом:
1 #Include < Atmega 128.h >
2 Bit oldstate ; //флаг старого состояния
3 Void main () {
4 DDB0 bit=0 ; // установка вывода РВ0 как вход
5 DDRC = 0xFF; // конфигурирование РС как вывод
6 PORTC=0xAA; // в порт С записывается исходный код
7 Oldstate =0;
8 Do {
9 If (Button (& PINB,0,1,1)) { // обнаружение логической единицы
10 Oldstate =1; // обновление флага
}
11 if (oldstate && Button (& PINB, 0,1,0)) { // обнаружение перехода из 1в 0
12 PORTB= ~ PORTB; //инвертирование PORTC
13 oldstate=0; // обновление флага
14 } While (1); // бесконечный цикл
}
В представленной программе заголовок и ряд назначений, которые выполняет компилятор опущены, так как они принимаются по умолчанию. В строке 1 находится команда Includeприсоединяющая фаил описаний. В стандартном пакете mikroC PRO имеется целый набор подобных файлов описаний. Для каждого микроконтроллера семейства AVR свой пакет. Програмисту следует лишь выбрать нужный файл и включить соответствующую строку в программу. Без присоединения файла программа работать не будет. Для Atmega 128 имеет название Atmega 128.h.
В строке 2 определяется переменная oldstate как битовая, которая будет укуказывать состояние клавиши.
С пункта 3 начинается главная программа main.
В начале программы выполняются установки выводов портов: РВ.0 -на вход (вункт 4) ; выводы РС определяются как выходы (пункт 5); в порт С заносится исходный код 0хАА (пункт 6). флаг oldstate устанавливается в нуль (пункт 7)
С пункта 8 начинается выполнение бесконечного цикла. Оператором if проверяется значение функции Button (& PINB,0,1,1). Эта функция является специальной функцией, параметрами которой являются: проверяемый порт &PORT; проверяемый номер вывода порта ( в программе это бит 0); время задержки, которое учитывает дребезг контакта при нажатии клавиши (в программе 1мс); проверяемое значение бита ( в программе 1). Функция возвращае логическую 1 при удовлетворительном ответе или логический ноль при неудовлетворительном ответе.
Таким образом, в пункте 9 проверяется наличие 1 в бите 0 порта РВ. Если обнаружена единица (кнопка не нажата), то флаг oldstar устанавливается в 1 (пункт 10), а за тем следует проверка того же бита порта В на 0 (пункт 11). Если в проверяемом бите обнаружен 0 , а предидущее состаяние была единица (значение флага oldstar была 1) т.е. кнопка изменила состояние от отжатого к нажатому , то состояние выводов РС инвертируется (пункт 12) (следовательно свечение светодиодов измениться). Если же состояние РВ.0 не изменилось, то при проверке , в каждом операторе if значение выражения в скопках даст неудовлитворительный результат, и следовательно состояние выводов РС не измениться. Программа переходит к началу бесконечного цикла While (пункт 12).
Дата добавления: 2016-12-27; просмотров: 2023;