Програма на языке Си

При создании программы на языке С мы используем компилятор 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).