- •Память данных
- •Регистры общего назначения
- •Регистры специальных функций микроконтроллеров рiс
- •Область ввода/вывода микроконтроллеров аvr
- •Регистр состояния srеg микроконтроллеров аvr
- •Внутренняя и внешняя память srам микроконтроллеров аvr
- •Память программ
- •Память еерrом микроконтроллеров аvr
- •Рекомендации
- •Задание
- •Порядок выполнения работы
- •Отчет по лабораторной работе должен содержать:
- •Контрольные вопросы
Рекомендации
Для настройки UART рекомендуется использовать встроенный в CodeVision генератор кода CodeWizard. Для этого необходимо запустить генератор кода (рис.3), выбрать закладку управления USART (рис.4), выполнить настройку UART на требуемую скорость и режим, а затем запустить предварительный просмотр кода (рис.5). В открывшемся окне отыскать и скопировать фрагмент программы инициализации UART.
Рисунок 4 – Значок генератора кода
Для корректного вывода по UART переменных типа float необходимо выбрать соответствующую опцию компилятора (рис.6). В случае недостатка памяти увеличить размер стека.
Рисунок 5 – Вид закладки USART
Рисунок 6 – Выбор предварительного просмотра кода
Рисунок 7 – Выбор типов выдаваемых по UART данных
Таблица 2 – Поддерживаемые символы типа преобразования для функций вывода. (Лебедев М.Б. CV пособие для начинающих. С. 256-260)
ВАЖНО! Для правильной работы необходимо изменить скорость обмена данными компонента «Виртуальный терминал» в соответствии с заданием.
Задание
Вывести Ф.И.О.
Вывести построчно:
X1=100; (Х1 переменная типа unsigned char)
Y1=1000; (Y1 переменная типа unsigned short)
Z1=100000; (Z1 переменная типа unsigned long)
F1=3,1416. (F1 переменная типа float)
X2= –100; (Х2 переменная типа signed char)
Y2= –1000; (Y2 переменная типа signed short)
Z2= –100000; (Z2 переменная типа signed long)
F2= –40,23 0С.
Задать массив целых байтовых чисел из пяти элементов MAS[5] и байтовую переменную Х. Массив разместить в памяти программ. Обработать массив MAS, результат обработки поместить в переменную Y. Выполнить заданную операцию между переменными X и Y, результат поместить в переменную Z. Выдать результаты по UART. Формат выдачи: X=__; Y=__; Z=__. Варианты заданий приведены в таблице 3.
Переслать текст Ф. И. О. студента выполняющего лабораторную работу из Flash-памяти (фамилия) из EEPROM (имя отчество) в оперативную память SRAM. Текст из SRAM выдать на UART оператором printf. В первой программе не должно быть указателей, во второй нужно использовать указатели.
Таблица 3 – Варианты заданий
Вариант |
Обработка MAS |
Операция X?Y |
Скорость UART, Бод |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
Min Max Sum Min Max Sum Min Max Sum Min Max Sum Min Max Sum Min Max Sum Min Max |
X + Y X & Y X | Y X ^ Y X – Y X + Y X & Y X | Y X ^ Y X – Y X + Y X & Y X | Y X ^ Y X – Y X + Y X & Y X | Y X ^ Y X – Y |
110 300 1200 2400 4800 9600 19200 38400 57600 300 1200 2400 4800 9600 19200 38400 110 300 1200 2400 |
Пример 1. Форматированный вывод по UART переменных различных типов.
#include <mega8515.h>
#include <stdio.h>
//Функция начальной инициализации ********************************************************
void setup()
{
// USART initialization
// Communication Parameters: 8 Data, 1 Stop, No Parity
// USART Receiver: Off
// USART Transmitter: On
// USART Mode: Asynchronous
// USART Baud Rate: 9600
UCSRA=0x00;
UCSRB=0x08;
UCSRC=0x86;
UBRRH=0x00;
UBRRL=0x2F;
}
//***************************************************************************************
void main(void)
{
char *W="Primer";
unsigned char ux=100;
signed char sx=-100;
unsigned short uy=1000;
signed short sy=-1000;
unsigned long uz=100000;
signed long sz=-100000;
float pi=3.1416;
setup();
printf("Start\r");
printf("%s\r",W);
printf("ux=%u\r",ux);
printf("sx=%d\r",sx);
printf("uy=%u\r",uy);
printf("sy=%d\r",sy);
printf("uz=%lu\r",uz);
printf("sz=%ld\r",sz);
printf("pi=%f\r",pi);
while (1);
}
Рисунок 8 – Результат работы программы
Пример 2. Работа с памятью различных типов
/* В программе нет указателей*/
#include<90s8515.h>
#include <stdio.h>
flash char char_const[] = "bcdef";//Массив "bcdef" расп. программ. пам. FLASH
unsigned char memr[5];
char k;
void main (void)
{
/* Включение передатчика UART*/
UCR=0x08;
/* скорость передачи 9600 бод */
UBRR=0x19;
for(k=0;k<=4;k++)//Цикл вывода массива MEMR на UART
{memr[k]=char_const[k];
printf(" %c",memr[k]);
}
printf("\r");//перевод строки
while(1);
}
/* Пример программы, выполняющей теже функции с использованием указателей*/
#include<90s8515.h>
#include <stdio.h>
flash unsigned char char_const[] = {'b','c','d','e','f','\0'};//Массив "bcdn
//flash char char_const[] ="bcdef";
unsigned char memr[6];
char k;
unsigned char z;
unsigned char *pam;// Указатель на переменную типа unsigned char, находящуюся
// в SRAM
flash unsigned char *pam1;//Указатель на переменную типа unsigned char,
находящуюся // во Flash-памяти
void main (void)
{
unsigned char *pam;// Указатель на переменную типа unsigned char, находящуюся
// в SRAM
flash unsigned char *pam1;//Указатель на переменную типа unsigned char,
находящуюся // во Flash-памяти
/* Включение передатчика UART*/
UCR=0x08;
/* скорость передачи 9600 бод */
UBRR=0x19;
for(k=0;k<=5;k++)//Цикл вывода массива MEMR на UART
{
z=*pam1++;
*pam=z;
printf("%c ",*pam++);//вывод содержимого memr по указателю на UART
}
printf("\r");//перевод строки
while(1);
}
