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

Загрузка программы в микроконтроллер

Hex-файл программы записывается в память МК через USARTна платеArduino. Соединение и запись со стороны ПК организованно с помощью консольной программыavrdude(AVRDownloader-Uploader). Её необходимо вызывать через консольWindows(cmd)cпередачей параметров, описывающих тип МК, скорость передачи, номерCOM-порта на ПК и т.д. Для использования программы необходимо поместить в одном каталоге исполняемый файлavrdude.exeи файл конфигурацииavrdude.conf(можно расположить в разных директориях, что придётся учесть в указании расположения файлов). Затем запустить из командной строкиavrdude.exeс требуемыми параметрами:

«Путь к файлу»avrdude-C«Путь к файлу»avrdude.conf-v-v-v-v-patmega2560 -cwiring-P\\.\COM«Номер порта»-b115200 -D-Uflash:w:«Путь к файлу»\«Имя файла».hex:i

Параметры передаваемые avrdude:

  • -C – размещение файла конфигурации.

  • -v – так называемый «многословный» (verbose) вывод – полезно для контроля и отладки.

  • -p – тип микроконтроллера для программирования

  • -P – коммуникационный порт, к которому подключён Arduino (в Windows его можно посмотреть в диспетчере устройств).

  • -b – скорость работы с последовательного порта.

  • -D – отключение очистки МК перед прошивкой

  • -U :r|w|v:[:format]: выполнение прошивки, тип памяти МК – flash или EEPROM,

  • r|w|v – флаги определяют необходимое действие:

r (read – считать)

w (write – записать)

v (verify – проверить).

  • [:format] флаг формата данных (используем «Intel Hex»).

Пример:

С:\avrdude –C:\ avrdude.conf -v -v -v -v -patmega2560 -cwiring -P\\.\COM4 -b115200 -D -Uflash:w:C:\led.hex:i

Если Arduino подключён к ПК и в параметрах не было допущено ошибок, то hex файл загрузится в МК.

Лабораторные работы Лабораторная работа №1. Алгоритмы арифметической обработки данных

Цель работыизучить основные приёмы, используемые при программировании арифметических операций над двоичными и двоично-десятичными числами.

Краткие теоретические сведения

Для выполнения арифметических операций в микроконтроллере ATmegaпредусмотрены следующие операции:

  • ADD– сложение двух РОН, результат сохраняется в первом операнде;

  • ADC– сложение двух РОН с учётом переноса (к результату добавляется значение флага C регистра SREG);

  • ADIW– сложение регистровой пары с константой;

  • SUB– вычитание двух РОН, результат сохраняется в первом операнде;

  • SUBI– вычитание константы из РОН;

  • SBC– вычитание двух РОН с заёмом (от результата отнимается значения флага C регистра SREG);

  • SBCI– вычитание константы из РОН с заёмом;

  • SBIW– вычитание константы из регистровой пары;

  • DEC– декремент РОН;

  • INC– инкремент РОН;

Эти команды выполняют арифметическую операцию между двумя операндами, результат формируется в первом операнде. Команды ADD,ADC,SUB,SUBI,SBC,SBCI– модифицируют значение флаговZ,C,N,V,H.ADIWиSBIWизменяют значения флаговZ,C,N,V,S.DECиINC–Z,N,V.

Арифметические операции выполняются над 8-разрядными двоичными числами. Однако программист может интерпретировать операнды и результат операций различными способами:

1) как восьмиразрядное двоичное число без знака (0...25510);

2) как семиразрядное двоичное число со знаком (-12710...+12710);

3) как двухразрядное десятичное число без знака (0...9910);

4) как двухразрядное десятичное число со знаком (-4910...+4910);

Например, двоичное число 10001000 можно интерпретировать как 13610, -12010, 8810, -1210. При этом для представления отрицательных чисел используется дополнительный код, вычисляемый по формуле:

ДопКод=n/(аПрКод),

где а– основание системы счисления,n– разрядность чисел.

Конкретный способ интерпретации определяется программистом и зависит от назначения программы.

При написании программ следует учитывать, что команды сложения и вычитания осуществляют обработку данных по законам двоичной арифметики. Поэтому арифметические операции над двоично-десятичными числами выполняются за несколько шагов. При сложении:

а) двоичное сложение (ADD);

б) десятичная коррекция.

При вычитании:

а) формирование дополнительного кода вычитаемого (9910ПрКод+1);

б) десятичная коррекция;

в) двоичное сложение (ADD);

г) десятичная коррекция.

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

1) если после сложения значение младшей тетрады больше 9 или установился флаг H, то к содержимому аккумулятора прибавляется 6;

2) если после сложения значение старшей тетрады больше 9 или установился флаг C, то к старшей тетраде прибавляется 6.

Например:

ADD

38H

54H

  +

8CH

  6

 

92D

Сложение и вычитание чисел большой длины (16, 24 и более разрядов) выполняются побайтно. При этом сначала обрабатываются младшие байты операндов, а затем последующие (с учётом переноса от предыдущей операции).

В микроконтроллерах ATmegaимеется команда умноженияMUL8-разрядных операндов, которая формирует 16-разрядный результат в регистровой пареR0-R1. Однако отсутствуют команды деления и обработки чисел с плавающей запятой. Эти операции выполняются программно – путём соответствующих комбинаций команд сложения, вычитания и сдвига.

При обработке данных используются также команды пересылок:

  • MOV– пересылка данных между РОН;

  • MOVW– пересылка данных между регистровыми парами;

  • STS– непосредственная запись в ОЗУ, первый операнд – адрес ОЗУ, второй – РОН;

  • LDS– непосредственное чтение из ОЗУ, первый операнд – РОН, второй – адрес ОЗУ;

  • LDI– загрузка константы в РОН, первый операнд – РОН, второй –константа;

а также команды пересылок с косвенной адресацией. Команды пересылок содержимое регистра признаков не изменяют.

Команды сравнения можно использовать для модификации флагов S, Z, C, N,V,Hперед командами условного перехода. При этом вычисляется разность содержимого операндов, модифицируются флаги, но результат не сохраняется. Список изменяемых флагов можно найти в справочнике команд вприложении.

  • CPсравнение содержимого двух РОН. Фактически производится вычитание без сохранения результата.

  • CPC– сравнение содержимого двух РОН с учётом флага переносаC. Удобна для сравнения нескольких байтов.

  • CPI– сравнение содержимого РОН с константой.

  • CPSE– сравнение двух РОН, с пропуском следующей команды при равенстве их содержимых.

Также существует группа команд условного и безусловного перехода. JMP– безусловный переход по указанному адресу;

Команды условного перехода осуществляют проверку битов регистра состояния SREGи осуществляют переход к указанному адресу.

  • BRCS/BRCC– переход по переносу (C = 1 / 0);

  • BREQ/BRNE– переход по нулевому результату (Z = 1 / 0);

  • BRLO/BRSH– переход по переносу (C = 1 / 0);

  • BRMI/BRPL– переход по условию «отрицательное значение» (N = 1 / 0);

  • BRGE/BRLT– переход по условию «больше или равно» (со знаком) (N и V= 0 / 1);

  • BRHS/BRHC– переход по половинному переносу (H = 1 / 0);

  • BRVS/BRVC– переход по переполнению дополнительного кода (V = 1 / 0).

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

main:

ldi r16, 0x00

ldi r17, 0x01

ldi r18, 0x02

mov r17, r16

rjmpmain

Из кода видно, что перед тем как начать выполнение циклической программы сначала, в цикле выполняются 4 команды. Следовательно, переход на метку mainв данном случае означает возврат счётчика командPCна 4 значения назад.

Если включить опцию Disassemblyво время отладки, то это можно увидеть явно:

ldi r16, 0x00

00000000 ldi R16,0x00 Load immediate

ldi r17, 0x01

00000001 ldi R17,0x01 Load immediate

ldi r18, 0x02

00000002 ldi R18,0x02 Load immediate

mov r17, r16

00000003 mov R17,R16 Copy register

rjmp main

00000004 rjmp PC-0x0004 Relative jump

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