Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
МП МПС Лабораторная работа 1 память UART.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
262.82 Кб
Скачать

Рекомендации

Для настройки UART рекомендуется использовать встроенный в CodeVision генератор кода CodeWizard. Для этого необходимо запустить генератор кода (рис.3), выбрать закладку управления USART (рис.4), выполнить настройку UART на требуемую скорость и режим, а затем запустить предварительный просмотр кода (рис.5). В открывшемся окне отыскать и скопировать фрагмент программы инициализации UART.

Рисунок 4 – Значок генератора кода

Для корректного вывода по UART переменных типа float необходимо выбрать соответствующую опцию компилятора (рис.6). В случае недостатка памяти увеличить размер стека.

Рисунок 5 – Вид закладки USART

Рисунок 6 – Выбор предварительного просмотра кода

Рисунок 7 – Выбор типов выдаваемых по UART данных

Таблица 2 – Поддерживаемые символы типа преобразования для функций вывода. (Лебедев М.Б. CV пособие для начинающих. С. 256-260)

ВАЖНО! Для правильной работы необходимо изменить скорость обмена данными компонента «Виртуальный терминал» в соответствии с заданием.

Задание

  1. Вывести Ф.И.О.

  2. Вывести построчно:

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С.

  1. Задать массив целых байтовых чисел из пяти элементов MAS[5] и байтовую переменную Х. Массив разместить в памяти программ. Обработать массив MAS, результат обработки поместить в переменную Y. Выполнить заданную операцию между переменными X и Y, результат поместить в переменную Z. Выдать результаты по UART. Формат выдачи: X=__; Y=__; Z=__. Варианты заданий приведены в таблице 3.

  2. Переслать текст Ф. И. О. студента выполняющего лабораторную работу из 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);

}