Главная страница
Навигация по странице:

  • Используемое оборудование и средства

  • Регистр данных порта – PORT x (PORTA, PORTB, PORTC, PORTD)  Регистр направления данных – DDR x (DDRA, DDRB

  • 2. Создание и отладка проекта на ассемблере Подготовка и отладка проекта осуществляется в среде пакета AVR Studio.

  • Использование отладчика

  • Порядок выполнения работы Задание 1

  • Assembly complete, 0 errors. 0 warnings»

  • абораторная работа № 6 Исследование основ программирования микроконтроллера ATmega16. 3) Лаб 6 ATmega_16. Лабораторная работа 6 Исследование основ программирования микроконтроллера atmega16 Цель работы


    Скачать 1.04 Mb.
    НазваниеЛабораторная работа 6 Исследование основ программирования микроконтроллера atmega16 Цель работы
    Анкорабораторная работа № 6 Исследование основ программирования микроконтроллера ATmega16
    Дата22.09.2022
    Размер1.04 Mb.
    Формат файлаpdf
    Имя файла3) Лаб 6 ATmega_16.pdf
    ТипЛабораторная работа
    #691174

    Лабораторная работа № 6
    Исследование основ программирования микроконтроллера ATmega16
    Цель работы: Изучение основ программирования и отладки программ на микроконтроллере ATmega16.
    Используемое оборудование и средства: персональный компьютер, пакет «AVR Studio 4.0»
    Краткие теоретические сведения
    1. Краткая характеристика микроконтроллера ATmega16
    2.
    Микроконтроллер – это микросхема (рис.1), объединяющая в себе
    АЛУ, постоянную память для хранения программы и данных, ОЗУ, а так же периферийные устройства.
    Рис. 1. Микросхема ATMEGA16 в разных корпусах
    К периферийным устройствам можно отнести устройства ввода/вывода, аналогово-цифровой преобразователь (АЦП), таймеры, встроенный генератор импульсов и др (см. рис. 2). Таким образом, микроконтроллер является полноценной ЭВМ, позволяющей решать широкий спектр задач.

    Рис. 2 – Структурная схема МК ATmega16
    Промышленностью выпускается множество различных МК, в данной работе будет использоваться МК ATmega16 фирмы Atmel. Это восьмиразрядный МК, изготовленный по малопотребляющей КМОП- технологии и имеющий усовершенствованную RISC-архитектуру. Благодаря этому он имеет высокое быстродействие и низкое энергопотребление.
    Некоторые характеристики МК приведены в таблице 1.
    Таблица 1. Основные параметры МК ATmega16.
    Память про- грамм,
    Кбайт.
    Память данных(EEPR
    OM), байт
    Память данных
    (ОЗУ), байт
    Количество линий ввода/ вывода
    Напряжение питания, В
    Тактовая частота,
    МГц
    16 512 1024 32 4.5…5.5 0…16
    Все команды МК кратны одному слову (16 бит), а большинство их имеет длину 2 байта – то есть занимают одну ячейку памяти программ, так как она имеет 16-разрядную организацию. Простейшие команды (ADD, SUB,
    INC, MOV, SER, LSL и др.) выполняются за 1 машинный такт, более сложные- за 2 и более тактов (MUL, JMP, CALL, RET и др.). Т.к. МК
    ATmega16 принадлежит к RISC-архитектуре его набор команд гораздо богаче, чем у процессоров Intel x86 (CISK-архитектуры). В системе команд

    МК предусмотрены команды безусловной и условной передачи управления, присутствуют команды типа «проверка/пропуск», которые очень удобно использовать для организации ветвления, широко представлены команды операций с битами – как их проверка/установка, так и различные варианты сдвига, существуют команды логических операций, существует команда аппаратного умножения (выполняемого за 1 такт).
    В МК имеется 32 8-разрядных регистра общего назначения R0-R31
    (намного больше, чем в ПК). Любой РОН можно использовать в большинстве команд и как операнд-приемник, и как операнд-источник. 6 последних регистров – r26-r31 – образуют три 16-разрядных РОН – 26 и 27 -
    X, 28 и 29 – Y, 30 и 31 – Z. Также можно обратиться к старшим и младшим частям этих регистров, используя их символические имена – XL, XH, YL,YH,
    ZL, ZH.
    Кроме того, в МК присутствуют и регистры ввода/вывода, которые делятся на две группы – служебные регистры, и регистры, относящиеся к конкретным устройствам в/в. Среди регистров в/в выделяется один регистр, используемый наиболее часто – это регистр SREG. Он содержит набор флагов, показывающих текущее состояние МК – разрешены ли прерывания, произошел ли перенос, отрицательный ли результат и т.д.
    Каждый порт МК состоит из определенного числа выводов, через которые МК может принимать и посылать данные. МК ATmega16 имеет четыре 8-разрядных порта ввода/вывода – A,B,C и D. Обращение к портам происходит через регистры в/в. Для каждого порта их существует три:

    Регистр данных порта –
    PORTx
    (PORTA, PORTB,
    PORTC, PORTD)

    Регистр направления данных –
    DDRx
    (DDRA, DDRB,
    DDRC, DDRD)

    Регистр выводов порта –
    PINx
    (PINA, PINB, PINC,
    PIND)
    Названия регистров получаются заменой x на имя порта – A,B,C или D.
    Каждый разряд регистра DDRx определяет направление передачи данных через контакт (pin) порта в/в. Если он установлен в 1, то вывод порта является выходом, если сброшен в 0 – входом.
    Разряды регистра PORTx, при конфигурировании соответствующего вывода на выход, определяют состояние вывода: если разряд устанавливается в 1, на выводе устанавливается напряжение высокого уровня, если 0 – низкого. Если порт сконфигурирован на ввод, то разряд
    PORTx определяет состояние внутреннего подтягивающего резистора – при установке разряда в 1 внутренний резистор подключается между выводом
    МК и проводом питания.

    Состояние выводов МК может быть получено путем чтения регистра
    PINx, при этом неважно, как сконфигурированы эти выводы – на вход или на выход.
    Необходимо помнить, что записать данные в порт в/в можно только
    из РОН
    .
    2. Создание и отладка проекта на ассемблере
    Подготовка и отладка проекта осуществляется в среде пакета AVR
    Studio.
    При запуске AVR Studio появляется окно Welcome to AVR Studio 4, где можно выбрать, открыть ли ранее сохраненный проект, или создать новый.
    Щелкнув по кнопке New Project, можно вызвать мастер создания проектов
    Следует задать имя проекта (Project name) и его расположение
    (Location). Щелкнув по кнопке Next, перейдём к следующему окну, где следует выбрать отладочную платформу и модель устройства

    Щелчок по кнопке Finish завершает мастер создания проекта и открывает главное окно программы, основные компоненты которого показаны на рисунке ниже.
    Набрав код программы, его можно скомпилировать по кнопке на панели инструментов или F7 на клавиатуре. Если компиляция прошла без ошибок, в окне Build появится надпись:
    Если же при компиляции были обнаружены ошибки, компилятор сообщит об этом:

    Использование отладчика
    Нажатие кнопки
    (или Ctrl+F7) не только скомпилирует код, но и запустит отладчик, при этом ранее недоступные кнопки панели инструментов Debug станут доступными:
    В режиме отладки становится доступным окно Processsor, в котором можно просмотреть содержимое регистров МК, а в окне I/O View можно просмотреть различную информацию о портах в/в.
    Окно Processor
    Окно I/O View
    Кроме того, в этих окнах можно не только просматривать информацию, но и редактировать её, например, щелкнув по квадратам, обозначающим состояние порта в/в, можно изменить его значение:

    Для программирования МК необходимо выполнить следующие действия:
    1.
    Подключить программатор к компьютеру и макетной плате (STK
    500). STK 500- универсальная отладочная система фирмы Atmel, облегчающая работу с AVR-микроконтроллерами и обеспечивающая поддержку программирования и отладку программ через параллельный и последовательный интерфейсы.
    2.
    Скомпилировать программу и убедится в отсутствии ошибок
    3.
    Нажать кнопку на панели инструментов
    4.
    В появившимся окне следует выбрать программатор
    (STK500 or AVRISP) и порт (Auto), после чего нажать кнопку
    Connect…

    5.
    Если все было сделано правильно, и программатор действительно подключен к ПК, появится окно, из которого можно загружать программы, настраивать МК и многое другое.
    В дальнейшем это окно можно будет вызвать клавишей
    Порядок выполнения работы
    Задание 1
    Создать папку и файл
    «имя.asm» для программирования микроконтроллера ATmega16 (
    имя файла проекта и папки не должны
    содержать кириллических символов
    ).
    В поле программы введите код: include "m16def.inc" ;подключение библиотеки для работы с ATmega16 clear r16 ; Очистка r16 ser r17 ; Установка r17 (запись числа 11111111 2
    в регистр) out r17, DDRB ; направление передачи данных- на выход порта B nop ; Delay (пауза) ldi r16; 113 ; Запись числа 113 10
    в r16 out PinB, r16 ; Запись данных из R16 (числа 113 10
    ) в порт B
    LOOP:
    // после выполнения всех команд jmp LOOP1 // запускается бесконечный цикл
    Выполнить проверку на ошибки. Устранить обнаруженные ошибки.
    При устранении ошибок рекомендуется использовать
    справочник по
    Ассемблеру для AVR
    .
    Запустить отладчик. Вывести также с помощью протяжки левой клавиши мыши значений интересующих регистров в окно WATCH.
    Выполнить программу по шагам (F10), контролируя на каждом шаге значения используемых регистров процессора и параллельных портов ввода-вывода. Объяснить полученный результат (данные в R16, R17, DDRB,
    PORTВ, PINB). Измерить время выполнения программы. Занести программу и результаты ее работы в протокол. Оптимизировать код программы в целях повышения ее быстродействия, готовый код и время его выполнения также поместить в отчет.
    Задание 2

    Написать и отладить программу по выполнию заданной арифметической (логической) операции. Результат поместить в регистр R18 и вывести в заданный параллельный порт (PortХ). Ввод константы b выполнить с заданного порта (PortY). Параметры индивидуального задания выбираются из табл. 2.
    Таблица 2- Индивидуальные задания по вариантам

    студента
    в
    журнале
    Констан
    та
    a
    Констан
    та
    b
    Констан
    та
    с
    Операция
    Тактовая
    частота
    МК (МГц)
    Порт
    вывода
    X
    Порт
    ввода
    Y
    1 100 50 23
    a+b-c*4 (арифм.)
    1
    A
    B
    2 17 64 105
    a+b/8+c (арифм.)
    4
    C
    A
    3 23 44 29
    а’+b+c’ (логич.)
    1
    C
    D
    4 112 37 25
    a-b*2-c (арифм.)
    2
    B
    A
    5 170 240
    (a+b)/4-1 (c учетом переноса)
    4
    C
    B
    6 67 14 61
    а’+b*c (логич.)
    2
    D
    A
    7 85 36 7
    a*(b/4-c) (арифм.)
    8
    D
    B
    8 240 13 111
    b+(a-2*c) (арифм.)
    2
    A
    C
    9 51 117
    a xor b’ (логич.)
    1
    A
    D
    10 156 110 19 a/2+b-c (арифм.)
    4
    C
    A
    11 11 25 111
    а+b-c/2 (арифм.)
    1
    B
    D
    12 18 9
    c*c+b*2 (c учетом переноса)
    2
    C
    A
    13 56 20 3
    (а+b)/4*c (арифм.)
    8
    B
    C
    14 14 7
    3
    a/2*b*c (арифм.)
    4
    D
    C
    15 53 47 17
    a+b*2+c (c учетом переноса)
    8
    A
    C
    16 130 210 167
    а xor (b+c’) (логич.)
    4
    B
    A
    17 204 240 104
    а+b*c’ (логич.)
    1
    A
    D
    18 240 207 201
    (а xor с)*b (логич.)
    8
    B
    A
    19 37 122 47
    a’+b’+c (логич.)
    1
    B
    C
    20 210 17 178
    а*b*c’ (логич.)
    4
    D
    C
    21 38 200 75 4*a-(b-c) (арифм.)
    8
    A
    B
    22 23 6
    45
    а*8+b-c (с учетом переноса)
    4
    B
    A
    23 84 61 15
    (а-b+c)*2 (арифм.)
    8
    A
    B
    24 144 44 44
    a’*b’+c (логич.)
    2
    C
    D
    25 14 11 118 a*b-c/8 (арифм.)
    1
    D
    B
    26 10 20 15
    a*b+c*2 (арифм.)
    2
    A
    B
    27 100 150 25
    a’*(b’+c) (логич.)
    4
    B
    C
    28 190 67 49
    (a+b)’+c (логич.)
    4
    A
    B
    29 220 190 6
    (а-b)/2*c (арифм.)
    8
    A
    D
    30 177 168 45
    (а xor b)*c’ (логич.)
    2
    C
    A
    31 47 55 51
    (a+b)/4+c*2 (арифм.)
    1
    B
    D
    32 202 34 5
    (а-b*c)/2 (арифм.)
    2
    D
    B
    33 241 37 97 а*(b’+c’) (логич.)
    4
    D
    C
    Рекомендуемые операторы для написания программы представлены в таблице 2

    Таблица 2
    Мнемоника команды
    Описание команды
    Операция
    AND Rd,Rr
    Логическое И
    Rd = Rd · Rr
    OR Rd,Rr
    Логическое ИЛИ
    Rd = Rd + Rr
    COM Rd
    Побитная Инверсия
    Rd = $FF - Rd
    EOR Rd,Rr
    Логическое исключающее ИЛИ
    Rd = Rd EOR Rr
    LSL Rd
    Логический сдвиг влево
    Rd(n+1)=Rd(n)
    LSR Rd
    Логический сдвиг вправо
    Rd(n)=Rd(n+1)
    LDI Rd, K
    Загрузка константы в регистр
    общего назначения (РОН)
    Rd

    K
    OUT P, Rr
    Пересылка из РОН в регистр
    Ввода-вывода (ВВ)
    P

    Rr
    .EQU A
    = К
    Директива присваивает метке А
    значение К
    А

    K
    IN Rr, P
    Запись данных из порта в
    регистр ВВ
    Rr

    P
    RJMP M
    Переход на метку М
    Для выполнения операции «Умножение без знака» использовать команду: MUL Rd,Rr. Результат будет помещен в регистровую пару
    (R1:R0). Для выполнения операций деления и умножения на числа 2,4,8 рекомендуется использовать операцию «Логический сдвиг».
    Сохраните синтезированную программу.
    После написания программы необходимо её скомпилировать. После компиляции если программа написана верно, в логе событий формируется сообщение:
    «Assembly complete, 0 errors. 0 warnings»
    При обнаружении ошибок необходимо их устранить и вновь скомпилировать программу.
    Запустить отладчик. Выполнить программу по шагам (F10), контролируя на каждом шаге значения используемых регистров процессора и параллельных портов ввода-вывода. Проверить корректность полученного результата (данные в PORT Х). Измерить время выполнения отдельных команд и всей программы.
    Результаты работы программы представить преподавателю и поместить в отчет.
    Контрольные вопросы
    1. Приведите основные характеристики микроконтроллера ATmega16.
    2. Охарактеризуйте назначение выводов микроконтроллера ATmega16.
    3. Поясните принципы управления портами МК.

    4. Укажите алгоритм подготовки и отладки программ в среде «AVR
    Studio»
    5. Приведите последовательность действий по загрузке программы в отладочную плату.


    написать администратору сайта