Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
РГР.doc
Скачиваний:
1
Добавлен:
01.05.2025
Размер:
1.08 Mб
Скачать

1.3. Генерация начального кода программы в среде разработки CodeVisionAvr

В данной работе для генерации начального программного кода нам необходимо заполнить следующие закладки:

  1. Закладка Chip. На закладке Chip указываем использующийся МК (в нашем случае ATmega16) и задаем частоту, на которой он работает (в нашем случае 3.68 МГц, см. рис. 2(1)).

  2. Закладка USART. Выбираем режим работы в качестве передатчика. Задаем скорость 9600 бод, режим передачи данных (8 бит данных, 1 стоповый, без битов паритета), асинхронный режим передачи. Значение всех полей на данной закладке можно посмотреть по нажатию Help.

1 2

Рис. 2. Генерация начального программного кода в CodeVisionAVR.

1 – закладка Chip, 2 – закладка USART

Остальные закладки оставляем без изменения. При генерации начального кода программы все значения, которые не заполнены, заполнятся значениями по умолчанию.

Для того чтобы просмотреть начальный код программы, заходим в File / Program Preview. Открывшийся код копируем и вставляем в файл проекта AVR-Studio, далее работаем с ним как обычно.

1.4. Работа с терминалом

Для того чтобы увидеть, какие данные пересылаются через UART в процессе работы программы, необходимо произвести следующие действия:

  1. Откомпилировать программу и записать данные файла с расширением *.НЕХ в микроконтроллер.

  2. Выключить STK500.

Рис. 3. Описание STK500

  1. Переключить кабель с порта RS-232 для программирования (рис. 3, 16 – порт RS-232 для программирования.) на порт RS-232 для связи (рис. 3, 13 – порт RS-232 для связи).

  2. Соединить разъем RS232 интерфейса RXD, TXD (рис. 3, 3) с ножками PD0, PD1 порта D.

  3. На ПК открыть и настроить программу HyperTerminal (Пуск\ Программы\ Стандартные\ Связь\ HyperTerminal):

  • ввести название подключения и нажать ОК;

  • в поле «Подключаться через» выбрать COM1 и нажать ОК;

  • «Параметры порта» установить в соответствии с заданием.

  1. Включить STK500.

1.5. Описание и листинг программы

На панели светодиодов (панель светодиодов подключена к порту В) реализуется обратный счет с максимального значения (255). Уменьшение числа на 1 происходит при нажатии на кнопку SW0, расположенную на стенде (панель кнопок подключена к порту D). Каждое новое число выводится на панели светодиодов и пересылается через UART (в асинхронном режиме, 8 бит данных, 1 стоповый, без паритета) со скоростью 9600 бод.

#include <util/delay.h>

#include <avr/io.h>

//подключаем необходимые библиотеки

int main(void) {

char temp = 0xFF;

char i;

//Задаем скорость передачи

//UBRR = 3.68МГц / (16*9600бод) - 1 = 23

UBRRH=0x00; //0000 0000

UBRRL=0x17; //0001 0111

//задаем режим работы

UCSRA=0x00; //0000 0000 Без удвоения скорости передачи

UCSRB=0x08; //0000 1000 Разрешение работы передатчика

UCSRC=0x86; //1000 0110 Асинхронный режим, отключен режим паритета

// 1 стоповый бит, 8 бит данных в посылке

DDRB = 0xFF; //конфигурируем порт B на вывод

PORTB = 0xFF; //записываем в порт В начальное значение (255)

while (1) {

while (PIND & 0x01); //Ожидание нажатия кнопки (низкого уровня сигнала)

_delay_ms(100); // пауза 0,1 секунда

temp--;

PORTB = temp; //Уменьшение значения на светодиодах на 1

for (i = 0; i<8; i++) {

while (!( UCSRA & (1<<UDRE))); // Ожидание освобождения буфера передатчика

// Помещение данных в буфер, отправка данных в бинарном виде

UDR = 48 + (temp & (1<<(7-i))); //ascii код 48 - для 0, 49 – код для 1

}

while (!( UCSRA & (1<<UDRE))); // Ожидание освобождения буфера передатчика

UDR = 10; //Передача символа перевода строки

while (!( UCSRA & (1<<UDRE))); // Ожидание освобождения буфера передатчика

UDR = 13; //Передача символа возврата каретки

};

return 1;

}

Для работы вам понадобится подключить следующие библиотеки:

  • avr/io.h – содержит определения и подключает нужный заголовочный файл (для ATmega16 - avr/iom16.h);

  • util/delay.h – содержит функции формирования задержки. Например, функция _delay_ms(100) позволяет получить задержку в 100 мс.

Индивидуальные задания

Вариант

Текст задания

1

На панели светодиодов реализовать обратный счет с максимального значения 255. Уменьшение числа на 1 происходит по нажатии на кнопку SW0, расположенную на стенде. Каждое новое число выводится на панели светодиодов и пересылается через UART (в асинхронном режиме, 8 бит данных, 1 стоповый, без паритета) со скоростью 9600 бод.

2

На панели светодиодов реализовать прямой счет с минимального значения 0. Увеличение числа на 1 происходит по нажатии на кнопку SW0, расположенную на стенде. Каждое новое число выводится на панели светодиодов и пересылается через UART (в асинхронном режиме, 8 бит данных, 2 стоповых, без паритета) со скоростью 9600 бод, с удвоением.

3

Выбрать двоичное число, определить его в программе, отобразить на светодиодах. При нажатии кнопки SW0 побитно инвертировать его и вывести на панели светодиодов. Отправить его по UART (в асинхронном режиме, 7 бит данных, 2 стоповых, без паритета) со скоростью 4800 бод.

4

Реализовать «бегущий огонек» на светодиодах. Перемещение «огонька» вправо при нажатии кнопки SW0. Пересылать через UART двоичное число, отображаемое на светодиодах при каждом нажатии кнопки (в асинхронном режиме, 7 бит данных, 1 стоповый, режим паритета четный) со скоростью 9600 бод.

5

Реализовать «бегущий огонек» на светодиодах. Перемещение «огонька» вправо через 1 при нажатии кнопки SW0. Пересылать через UART двоичное число, отображаемое на светодиодах при каждом нажатии кнопки (в асинхронном режиме, 8 бит данных, 1 стоповый, режим паритета: нечетный) со скоростью 9600 бод.

6

Реализовать «бегущий огонек» на светодиодах. Перемещение «огонька» влево при нажатии кнопки SW0. Пересылать через UART двоичное число, отображаемое на светодиодах при каждом нажатии кнопки (в асинхронном режиме, 7 бит данных, 1 стоповый, без паритета) со скоростью 4800 бод, с удвоением.

7

Реализовать «бегущий огонек» на светодиодах. Перемещение «огонька» влево через 1 при нажатии кнопки SW0. Пересылать через UART двоичное число, отображаемое на светодиодах при каждом нажатии кнопки (в асинхронном режиме, 8 бит данных, 2 стоповых, без паритета) со скоростью 9600 бод.

8

Реализовать мигание на светодиодах. Переключение между вкл/выкл по нажатии кнопки SW0. Пересылать через UART двоичное число, отображаемое на светодиодах при каждом нажатии кнопки (в асинхронном режиме, 8 бит данных, 1 стоповый, режим паритета нечетный) со скоростью 2400 бод, с удвоением.

9

Реализовать «змейку» на светодиодах: три подряд включенных светодиода (0, 1 и 2) по нажатии на кнопку SW0 перемещаются влево. Пересылать через UART двоичное число, отображаемое на светодиодах при каждом нажатии кнопки (в асинхронном режиме, 8 бит данных, 1 стоповый, режим паритета: четный) со скоростью 2400 бод.

10

Реализовать «змейку» на светодиодах: три подряд включенных светодиода (7, 6 и 5) по нажатии на кнопку SW0 перемещаются вправо. Пересылать через UART двоичное число, отображаемое на светодиодах при каждом нажатии кнопки (в асинхронном режиме, 7 бит данных, 1 стоповый, режим паритета: четный) со скоростью 4800 бод.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]