Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Программа ввода вывода через UART

Поиск

Лабораторная работа № 1

ЗНАКОМСТВО С ПРОГРАММОЙ Visual Micro Lab

ПРОГРАММа ввода выода через UART.......................... 5

Лабораторная работа № 2

ПРОГРАММа ввода с UART и вывода

в LCD модуль......................................................................... 22

Лабораторная работа № 3

ПРОГРАММа управлениЯ таймер–счетчиком

в режиме широтно–импульсной модуляции....... 37

Лабораторная работа № 4

ПРОГРАММа ввода с клавиатуры и вывода

в LCD модуль......................................................................... 52

Лабораторная работа № 5

ПРОГРАММирование в среде Visual Micro Lab

в мультипроцессорном режиме................................ 62

Лабораторная работа № 6

ПРОГРАММирование аналогоцифрового

преобразователя микроконтроллеров................... 67

Лабораторная работа №7

ПРОГРАММирование аналогового

компаратора микроконтроллеров........................... 74

Лабораторная работа № 8

ПРОГРАММирование микроконтроллеров

на языке СИ............................................................................ 82

Лабораторная работа № 9

РАЗРАБОТКА ПРОГРАММЫ ввода, вычисления и

вывода результата............................................................ 86

БИБЛИОГРАФИЧЕСКИЙ СПИСОК.................................................. 88

Приложение 1. Структурная схема

микроконтроллера ATmega16....................................... 89

Приложение 2. Типы корпусов и наименование

выводов микроконтроллера ATmega16................. 90

Приложение 3. Регистры ввода–вывода

микроконтроллера ATmega16....................................... 91

Приложение 4. Система команд микроконтроллера

АТmеgа16 и директивы языка Assembler............... 93


Введение

 

Микроконтроллеры семейства AVR отличаются высоким быстродействием и низким энергопотреблением. В лабораторных работах рассматриваются структура, система команд, периферийные устройства и работа микроконтроллеров, выпускаемых фирмой Atmel.

Корпорация Atmel (США) хорошо известна как на мировом, так и на российском рынке электронных компонентов и является одним из признанных мировых лидеров в разработке и производстве сложных изделий современной микроэлектроники — устройств энергонезависимой памяти высокого быстродействия и минимального удельного энергопотребления, микроконтроллеров общего назначения и микросхем программируемой логики.

Лабораторные работы познакомят Вас с одним из интересных и активно развиваемых Atmel Corp. направлений современной микроэлектроники – линией 8–разрядных высокопроизводительных RISC (Reduced Instruction Set Computers) микроконтроллеров общего назначения, объединенных общей маркой AVR.

Можно считать, что AVR постепенно становится еще одним индустриальным стандартом среди 8–ми разрядных микроконтроллеров общего назначения. В настоящее время в производстве у Atmel Corp. находятся три семейства AVR: «tiny», «classic» и «mega».

Visual Micro Lab (VMLab) представляет собой программный продукт, позволяющий производить моделирование, тестирование, разработку и отладку программных и технических средств микропроцессорных систем, содержащих микроконтроллеры AVR фирмы ATmel и различные компоненты, в том числе резисторы, конденсаторы, ключи, светодиоды, аналоговые, импульсные и другие генераторы, источники напряжения, операционные усилители и компараторы, логические элементы, 8–ми разрядные цифроаналоговые преобразователи, интерфейс RS232, LCD модули, I2C интерфейсы и другие устройства. С помощью пакета можно проектировать простейшую мультипроцессорную сеть, состоящую из двух микроконтроллеров (микропроцессорных систем) и проводить их совместное моделирование и тестирование.

Для работы программного комплекса необходим IBM – совместимый компьютер с процессором Pentium 4 и выше. Операционная система Windows XP и выше.

Эффективность использования пакета VMLab определяется:

- достаточно простым интерфейсом пользователя;

- большим количеством моделей микроконтроллеров и компонентов микропроцессорной системы;

- возможностью разрабатывать программы на языке высокого уровня СИ;

- свободным распространением пакета VMlab (версия 3.12) и транслятора с языка СИ WinAVR.


Лабораторная работа №1

 

ЗНАКОМСТВО С ПРОГРАММОЙ Visual Micro Lab

ПРОГРАММа ввода выВода через UART

Цель работы: Освоение основных правил разработки и отладки прикладного программного обеспечения на языке AVR Ассемблере для микропроцессорных систем на базе AVR микроконтроллеров фирмы Atmel.

 

Программно–аппаратные средства

Порты ввода/вывода

Порт B – 8–разрядный двунаправленный порт. Для обслуживания порта отведено три регистра: регистр данных – PORTB ($18, $38), регистр направления данных – DDRB ($17, $37) и выводы порта B – PINB ($16, $36). Адрес выводов порта B предназначен только для чтения, в то время как регистр данных и регистр направления данных – для чтения/записи.

Все выводы порта имеют отдельно подключаемые подтягивающие резисторы. Дополнительные функции выводов порта B приведены в таблице 1.

Таблица 1. Альтернативные функции выводов порта B

Вывод Альтернативная функция
PB0 XCS/T0 (внешний вход таймера счетчика 0)
PB1 T1 (внешний вход таймера счетчика 1)
PB2 INT2/AIN0 (Вход прерывания 2/ Положительный вход аналогового компаратора)
PB3 OC0/AIN1 (Выход совпадения TC0/Отр. вход аналогового компаратора)
PB4 SS
PB5 MOSI (Вход данных для загрузки памяти)
PB6 MISO (Выход данных для чтения памяти)
PB7 SCK (Вход тактовых импульсов последовательного обмена для зап./чт. памяти)

Для порта D зарезервированы 3 ячейки памяти – регистр PORTD ($12, $32), регистр направления данных – DDRD ($11, $31) и выводы порта D – PIND ($10, $30). Регистры данных и направления данных могут читаться/записывать­ся, ячейка PIND – только для чтения.

Порт D – 7-разрядный двунаправленный порт со встроенными подтягивающими регистрами. Некоторые из выводов порта имеют альтернативные функции, как показано в таблице 2.

Таблица 2. Альтернативные функции порта D

Вывод порта Альтернативная функция
PD0 RXD (вход данных UART)
PD1 TXD (выход данных UART)
PD2 INT0 (вход внешнего прерывания 0)
PD3 INT1 (вход внешнего прерывания 1)
PD4 OC1B
PD5 OC1A
PD6 ICP (вход захвата таймера счетчика 1)

Порт A (PA0 – PA7) имеет альтернативные функции входов аналого–циф­рового преобразователя ADC – ADC7. Для порта зарезервированы 3 ячейки па­мяти – регистр PORTA ($1B, $3B), регистр направления данных – DDRA ($1A, $3A) и выводы порта A – PIND ($19, $39).

Порт C (PC0 – PC7) также имеет альтернативные функции, представлен­ные в приложении 2. Для порта зарезервированы 3 ячейки памяти: регистр PORTC ($15, $35), регистр направления данных – DDRC ($14, $34) и выводы порта C – PINC ($13, $33).

 

Последовательный иньерфейс ввода/вывода UART

 

Порт UART содержит передатчик, приемник, тактовый генератор и аппаратуру управления передачей и приемом. В состав порта входят регистр данных передатчика UDR (Т), регистр данных приемника UDR (R), регистр управления UCR или UCSRB (№ $0А), регистр состояния USR или UCSRA (№ $0В), регистр задания скорости передачи/приема UBRR (№ $09) и другие элементы.

Передатчик готов к работе при установке в единичное состояние разряда TXEN регистра управления UCR. Передача кадра начинается при загрузке байта в регистр UDR (Т). Загрузку можно выполнять при единичном состоянии разряда UDRE регистра состояния USR. При сбросе микроконтроллера в исходное состояние устанавливается UDRE = 1.

Загруженный байт передается в сдвигающий регистр передатчика TSR и происходит выдача кадра на выход микроконтроллера TXD.

При нулевом состоянии разряда CHR9 регистра UCR формируется кадр из десяти битов. При CHR9 = 1 кадр содержит одиннадцать битов. Значение дополнительного бита в этом случае должно быть указано в разряде ТХВ8 регистра UCR.

Первый байт при загрузке немедленно передается в регистр TSR и разряд UDRE регистра USR сохраняет единичное состояние, что позволяет сразу после загрузки первого байта загружать в регистр UDR (Т) второй байт. Второй и последующие байты сохраняются в регистре UDR(Т) до завершения выдачи из регистра TSR предыдущего кадра. При этом разряд UDRE регистра USR находится в нулевом состоянии и загрузка очередного байта в регистр UDR (T) запрещена.

При завершении выдачи кадра из регистра TSR и отсутствии очередного байта в регистре UDR (Т) устанавливается в единичное состояние разряд ТХС регистра USR и при единичном состоянии разряда TXCIE регистра UCR в блок прерываний поступает запрос прерывания UART ТХС.

Разряд ТХС регистра USR сбрасывается в нулевое состояние аппаратно при переходе микроконтроллера к выполнению соответствующей прерывающей программы или программно при выполнении команды установка бита в единичное состояние.

При единичном состоянии разряда UDRE регистра USR и единичном состоянии разряда UDRIE регистра UCR в блок прерываний поступает запрос прерывания UART DRE. Разряд UDRE сбрасывается в нулевое состояние при записи байта в регистр UDR (Т). Прерывающая программа, выполняемая по запросу прерывания UART DRE, должна содержать команду записи в регистр UDR (Т) для прекращения действия этого запроса прерывания.

Приемник готов к работе при установке в единичное состояние разряда RXEN регистра UCR. При этом вход приемника RXD подключается к выводу определенного порта микроконтроллера. Получаемая последовательность значений вводится в сдвигающий регистр приемника RSR. Если принимается кадр из одиннадцати битов (CHR9 = 1), дополнительный бит принимается в разряд RXB8 регистра UCR. Если на месте ожидаемого стопового бита сигнал имеет нулевое значение, устанавливается в единичное состояние разряд FE регистра USR (ошибка формата). Разряд FE сбрасывается в нулевое состояние при появлении единичного значения стопового бита.

Принятый байт из регистра RSR переписывается в регистр UDR (R). При этом устанавливается в единичное состояние разряд RXC регистра USR и при единичном состоянии разряда RXCIE регистра UCR в блок прерываний поступает запрос прерывания UART RXC.

Разряд RXC регистра USR сбрасывается в нулевое состояние при чтении регистра UDR (R). Прерывающая программа, выполняемая по запросу прерывания UART RXC, должна содержать команду чтения из регистра UDR для прекращения действия этого запроса.

Если при завершении приема кадра принятый ранее байт не считан из регистра UDR (R), устанавливается в единичное состояние разряд OR регистра USR (состояние переполнения). Разряд OR сбрасывается в нулевое состояние при передаче байта из регистра RSR в регистр UDR (R).

Скорость передачи и приема BR, бит/с, зависит от частоты тактового сигнала микроконтроллера fCK и числа (UBRR), записаного в регистре UBRR.

В порте UART микроконтроллеров типа m16 регистр управления вместо имени UCR имеет имя UCSRB, а регистр состояния вместо имени USR — имя UCSRA. Регистр UCSRA имеет дополнительный разряд МРСМ. Наличие разряда МРСМ позволяет организовать простейшую локальную сеть (мультипроцессорную систему).

В микроконтроллере типа m16, кроме того, регистр UCSRA имеет дополнительный разряд U2X, а для задания скорости передачи используются два регистра — регистр UBRR (№$09) для задания младших восьми разрядов кода числа и регистр UBRRHI (№$20) для задания старших четырех разрядов кода числа.

Выводы PD0 и PD0 микроконтроллера ATmega16 используются альтернативно как сигналы RXD и TXD соответственно порта UART (USART).

Управление USART осуществляется через регистры ввода/вывода. В контроллере ATmega16 для управления используется 5 регистров:

0 Регистр UDR (UART Data Register) – регистр данных UART;

0 Регистр UCSRA (UART Control and Status Register A) –регистр А управления и статуса UART;

0 Регистр UCSRB (UART Control and Status Register B) – регистр В управления и статуса UART;

0 Регистры UBRRH1 и UBRR (UART Baud Rate registers) – регистры скорости передачи.

Регистр данных UDR физически является двумя регистрами: регистром передачи данных и регистром приема данных по одному адресу $0C ($2C).

Скорость обмена данными в UART задается с помощью 12–битного регистра UBRR, который размещается в двух 8–битных регистрах UBRR, UBRRH1.

Установленный в состояние 1 бит TXEN регистра UCSRB разрешает передачу данных UART. Передача инициируется записью передаваемых данных в регистр данных UDR. Данные пересылаются из UDR в сдвиговый регистр передачи в следующих случаях:

0 Новый символ записан в UDR после того как был выведен из регистра столовый бит предшествовавшего символа. Сдвиговый регистр загружается немедленно.

0 Новый символ записан в UDR прежде, чем был выведен столовый бит предшествовавшего символа. Сдвиговый регистр загружается после выхода стопового бита передаваемого символа, находившегося в сдвиговом регистре.

Если из 10(11)–разрядного сдвигового регистра передачи выведена вся информация, устанавливается бит UDRE. При установленном в состояние 1 бите UDRE приемопередатчик готов принять следующий символ. Запись в UDR очищает бит UDRE. В то самое время, когда данные пересылаются из UDR в 10(11)–разрядный сдвиговый регистр, бит 0 сдвигового регистра сбрасывается в состояние 0 (состояние 0 – стартовый бит) а бит 9 или 10 устанавливается в состояние 1 (состояние 1 – стоповый бит). Если в регистре управления UCSRB установлен бит CHR9 (т.е. выбран режим 9–разрядного слова данных), то бит TXB8 регистра UCSRB пересылается в бит 9 сдвигового регистра передачи. Сразу после пересылки данных в сдвиговый регистр тактом бод–генератора стартовый бит сдвигается на вывод TxD. За ним следует LSB данных. Когда будет выдан стоповый бит, сдвиговый регистр загружается новой порцией данных, если она была записана в UDR во время передачи. В процессе загрузки бит UDRE находится в установленном состоянии. Если же новые данные не будут загружены в UDR до выдачи стопового бита, флаг UDRE остается установленным. В этом случае, после того как столовый бит будет присутствовать на выводе TxD в течение одного такта, в регистре управления и статуса UCSRA устанавливается флаг завершения передачи TxC.

Логика восстановления данных производит выборку состояний вывода RxD с частотой в 16 раз большей, чем частота передачи. При нахождении линии в пассивном состоянии одиночная выборка нулевого логического уровня будет интерпретироваться как падающий фронт стартового бита и будет запущена последовательность детектирования стартового бита. Считается, что первая выборка обнаружила первый нулевой логический уровень вероятного стартового бита. На выборках 8, 9 и 10 приемник вновь тестирует вывод RxD на изменение логических состояний. Если две или более из этих трех выборок обнаружат логические 1, то данный вероятный стартовый бит отвергается как шумовой всплеск и приемник начнет выявлять и анализировать следующие переходы из 1 в 0.

Если же был обнаружен действительный стартовый бит, то начинает производиться выборка следующих за стартовым битом информационных битов. Эти биты также тестируются на выборках 8,9 и 10. Логическое состояние бита принимается по двум и более (из трех) одинаковым состояниям выборок. Все биты вводятся в сдвиговый регистр приемника с тем значением, которое было определено тестированием выборок.

При поступлении стопового бита необходимо, чтобы не менее двух выборок из трех подтвердили прием стопового бита (показали высокий уровень). Если же две или более выборок покажут состояния 0, то при пересылке принятого байта в UDR в регистре управления и статуса UCSRA устанавливается бит ошибки кадра FE (Framing Error). Для обнаружения ошибки кадра пользователь перед чтением регистра UDR должен проверять состояние бита FE. Флаг FE очищается при считывании содержимого регистра данных UART (UDR).

Вне зависимости от того принят правильный столовый бит или нет, данные пересылаются в регистр UDR и устанавливается флаг RXC в регистре управления UCSRA. Регистр UDR фактически является двумя физически отдельными регистрами, один из которых служит для передачи данных и другой для приема. При считывании UDR обращение ведется к регистру приема данных, при записи обращение ведется к регистру передачи. Если выбран режим обмена 9–разрядными словами данных (установлен бит CHR9 регистра UCR), при пересылке данных в UDR бит RXB8 регистра UCR загружается из девятого бита сдвигового регистра передачи. Если после получения символа к регистру UDR не было обращения, начиная с последнего приема, в регистре UCSRA устанавливается флаг переполнения OR. Это означает, что новые данные, пересылаемые в сдвиговый регистр, не могут быть переданы в UDR и потеряны. Бит OR буферирован и доступен тогда, когда в UDR читается байт достоверных данных. Пользователю, для обнаружения переполнения, необходимо всегда проверять флаг OR после считывания содержимого регистра UDR.

При очищенном (сброшенном в логическое состояние 0) бите RXEN регистра UCR прием запрещен.

Регистр UCSRA имеет биты следующего назначения:

- Бит 7 - RXC - прием завершен.

- Бит 6 - TXC - передача завершена.

- Бит 5 - UDRE - регистр данных пуст.

- Бит 4 - FE -ошибка кадра.

- Бит 3 - OR -переполнение данных.

- Бит 1 - U2X -удвоение скорости передачи.

- Бит 0 - MPCM -режим мультипроцессорного обмена.

 

Регистр UCSRB имеет биты следующего назначения:

- Бит 7 - RXCIE -разрешение прерывания по завершению приема.

- Бит 6 - TXCIE -разрешение прерывания по завершению передачи.

- Бит 5 - UDRIE -Разрешение прерывания по пустому регистру данных.

- Бит 4 - RXEN -разрешение приемника.

- Бит 3 - TXEN - разрешение передатчика.

- Бит 2 -CHR9 - режим 9–разрядных символов.

- Бит 1 -RXB8 - прием 8–разрядных данных.

- Бит 0 -TXB8-передача 8–разрядных данных.

Задание к лабораторной работе

 

Студент самостоятельно осваивает все основные этапы разработки и отладки программ в среде VMLab, рассмотренные ранее.

В качестве примера используются файлы Lab1.asm и Lab_1.prj.

 

Файл Lab_1.prj

.MICRO "ATmega16"

.PROGRAM "lab1.asm"

.TARGET "lab_1.hex"

.TRACE; Activate micro trace

; Following lines are optional; if not included

X1 TTY(4800 8) PD0 PD1

.plot V(PD0) v(PD1)

.POWER VDD=5 VSS=0; Power nodes

.CLOCK 1meg; Micro clock

.STORE 250m; Trace (micro+signals) storage time

 

Файл Lab1.asm

 

.include "C:\VMLAB\include\m16def.inc"

.def tmp = r16

.def X = r17

.def Y = r18

.def flag = r20; рег. флагов, значения битов будут определять ветвления в: программе 0 бит– завершение программы

; 1 бит – получено число X

.def result = r21

.cseg; начало сегмента программы

.org $0; установка счетчика адреса на 0

; обработка прерываний

rjmp start

.org URXCaddr

rjmp uart_rx

.org UDREaddr

reti

.org UTXCaddr

reti

; начало программы

uart_rx:; ПП обработки прерывания –

;получение символа в UART

in tmp, UDR; чтение значения из регистра данных

subi tmp, $30; UART настроен на работу по умолчанию, поэтому

; преобразовываем поступающий символ

sbrc flag, 0; проп. возврат, если нет флага завершения (еще не все

; символы приняты)

reti

 

sbrc flag, 1; решаем, какое число принимается X или Y

rjmp setY

rjmp setX

reti

start:; инициализация программы

ldi flag, 0; обнуление флагов

ldi tmp, high(RAMEND); инициализация памяти стека

out SPH, tmp

ldi tmp, low(RAMEND)

out SPL, tmp; завершение инициализации памяти стека

ldi tmp, 12

out UBRR, tmp; установка скорости UART 4800 бод

ldi tmp, 0xF8

out UCR, tmp; инициализация UART

sei; глобальное включение прерываний

forever:; бесконечный цикл, все действия по прерываниям

nop

nop

rjmp forever;

setX:; получаем число X и сообщаем об этом установкой флага

mov X, tmp

sbr flag, $02

reti

setY:; получаем число Y и после этого переходим к вычислениям

mov Y,tmp

sbr flag, $01

rjmp main

main:; вычисление значения

ldi tmp, 9

mul tmp, X

mov result, R0

ldi tmp, 2

mul tmp, Y

add result, R0

subi result, 28

brmi negativ; если получ. отр. число, осуществляем переход

rjmp bcd_result

 

negativ:; выделяем модуль числа и выводим символ «–»

ldi tmp, $2D; вывод ACII символа «–»

out UDR, tmp; получаем модуль числа

com result

inc result

rjmp bcd_result

bcd_result:; преобр. число: десятки будут храниться в X, а единицы в –Y

ldi X, 0

mov Y, result

subi Y, 10

brmi bcd_done

inc X

subi Y, 10

brmi bcd_done

inc X

subi Y, 10

brmi bcd_done

inc X

subi Y, 10

brmi bcd_done

inc X

subi Y, 10

brmi bcd_done

inc X

subi Y, 10

brmi bcd_done

inc X

subi Y, 10

brmi bcd_done

inc X

 

subi Y, 10

brmi bcd_done

inc X

subi Y, 10

brmi bcd_done

inc X

subi Y, 10

brmi bcd_done

inc X

bcd_done:

com Y

inc Y

subi Y, 10

com Y

inc Y

ldi tmp, $30

add X, tmp

add Y, tmp

out UDR, X

wait:; ждем, пока завершится вывод числа X

in tmp, UCSRA

sbrs tmp, 5

rjmp wait

out UDR, Y

rjmp forever

 

Программа «Lab1.asm» осуществляет ввод символов (двух чисел от 0 до 9 каждый) через COM порт (UART, S232), результат вычисления также выводится через этот же интерфейс.

 

 

Содержание отчета

 

Отчет по проделанной лабораторной работе должен содержать:

- структурную схему алгоритма программы на лабораторную работу;

- схему электрическую принципиальную разработанного устройства;

- текст программы на языке AVR Ассемблере (распечатка файла *asm);

- распечатка файла проекта (*.prj);

- результаты моделирования (окно VMLab с запущенной программой и результатами вычислений).

 

 

Контрольные вопросы

 

1. Перечислите основные этапы работы в программе VMLab?

2. Какие типы файлов создаются в программе VMLab?

3. Какие компоненты используются совместно с микроконтроллером?

4. Какие дополнительные окна используются для просмотра и управления системой на основе выбранного микроконтроллера?

5. Каким образом можно просмотреть напряжения в зависимости от времени (временные диаграммы)?


Лабораторная работа № 2

 

ПРОГРАММа ввода с UART

и вывода в LCD модуль

 

Цель работы: Изучение и освоение управления периферийным устройством ввода/вывода – LCD модулем, подключенным к AVR микроконтроллеру фирмы Atmel, а также дальнейшее изучение системы команд и системы прерываний.

 

Внешние прерывания

Внешние прерывания управляются выводами INT0, INT1 и INT2. Эти прерывания обрабатываются даже тогда, когда выводы сконфигурированы как выходы.

Регистр состояния SREG аппаратно не обрабатывается процессором, если программа требует сохранения SREG, то это должно произво­диться программой пользователя.

 

Задание к лабораторной работе

 

Изучить программу Lab2.asm и файл проекта Lab_2.prj. Отладить программу в среде VMLab, подключив необходимую периферию к микроконтроллеру AVR – интерфейс UART и LCD модуль (дисплей). На рис.18 представлены результаты моделирования программы в среде VMLab.

Рис. 18. Результаты моделирования программы Lab2.asm в среде VMLab.

 

Файл Lab_2.prj

.MICRO "ATmega16"; ATmega16 with 16 of external RAM

.PROGRAM "Lab2.asm"

.TARGET "Lab2.hex"

.TRACE; Activate micro trace

.POWER VDD=5 VSS=0; Power nodes

.CLOCK 1meg; Micro clock

.STORE 250m; Trace (micro+signals) storage time

Xterm TTY(4800 8) PD0 PD1; place terminal

Xdisp LCD(24 2 250K) PD2 PB0 PD3 PD7 PD6 PD5 PD4 nc3 nc2 nc1 nc0

.plot v(pd0) v(pd1)

 

 

Файл Lab2.asm

.include "m16def.inc"

.EQU OE = 0b001000; bit 3 Port D

.EQU RS = 0b0001004; bit 2 Port D

.DEF TEMP = R16; temporary working register

.DEF PARAM = R17; Parameter transfer register

.DEF DELAY = R10;

.DEF DELAY1 = R11; To generate long delays

.DEF DELAY2 = R12;

; Reset and interrupt vectors

CSEG

ORG 0x00

START:

Rjmp RESET; Reset vector

Org URXCaddr

rjmp uart_rx

Org UDREaddr

Reti

Org UTXCaddr

Reti

; Device initialization

RESET:

Ldi temp, high(RAMEND); инициализация памяти стека

Out SPH, temp

Ldi temp, low(RAMEND)

Out PORTB, TEMP

Sei

Nop; will do the job

nop;

rjmp FOREVER;;

UART_RX:; Read UART chararter and

Reti

; LCD Driving Library example

; Display setup for 4 bits interface

LCD_SETUP:

Nop

nop; Data write cycle must be > 1 ms

Ret

; 2.3 ms delay with 1 MHz clock.

WAIT_2M:

Push TEMP

Ldi TEMP, 3

Mov DELAY1, TEMP

W2_1:

Clr DELAY2

Dec DELAY2; Start at 0xFF

W2_2:

Dec DELAY2

brne W2_2

Dec DELAY1

brne W2_1

Pop TEMP

Ret

; Display a welcome message. Mesage comes at the end

LCD_HELLO:

ldi ZH, HIGH(2*TXT)

ldi ZL, LOW(2*TXT)

L3A:

Lpm; From prog mem into R0

Mov PARAM, R0

Tst PARAM

Brne L3B

Rjmp L4

L3B:

Brne L3C

Rjmp L3D

L3C:

rcall LCD_DATA

L3D:

Ret; Done

TXT:

.DB "Type in TTY cell (tx) ",0x0D; Must contain an even

.DB ">",0x00; number of bytes per line

; Sends a control function to the display (comes in PARAM)

LCD_CMD:

Push PARAM

Mov TEMP, PARAM

Nop; pulse width

Mov PARAM, TEMP; Data back

Swap PARAM; Lower 4 bits

Andi PARAM, 0xF0

Sbr PARAM, 8; OE high (bit 3, port D)

Nop

Nop

Cbi PORTD,3; OE clock low

Dec PARAM

Brne DEL0

Pop PARAM

Ret

; Sends an ASCII character to the display (comes in PARAM)

LCD_DATA:

Push PARAM

Push TEMP

Mov TEMP, PARAM

Sbr PARAM, OE; OE bit high

Nop; Brief delay

Nop

Swap TEMP; Lower 4 bits

Sbr TEMP, OE; OE high

Sbr TEMP, RS

Nop

Nop

Ldi TEMP, 100

Mov DELAY, TEMP; 50 usec

DEL1:

Dec DELAY

Brne DEL1

Pop TEMP

Pop PARAM

Ret

; Moves the LCD display cursor to address specified in PARAM

LCD_CURSOR:

Ret

Содержание отчета

 

Отчет по проделанной лабораторной работе должен содержать:

- структурную схему алгоритма программы на лабораторную работу;

- схему электрическую принципиальную разработанного устройства;

- текст программы на языке AVR Ассемблере (распечатка файла *asm);

- распечатка файла проекта (*.prj);

- результаты моделирования (окно VMLab с запущенной программой и результатами вычислений).

 

Контрольные вопросы

 

1. Структура микроконтроллера ATmega16.

2. Состав файла m16def.inc.

3. Регистры управления UART микроконтроллера ATmega16.

4. Порты ввода/вывода микроконтроллера ATmega16.

5. Порты ввода/вывода микроконтроллера ATmega16.

6. Подключение LCD модуля к микроконтроллеру AVR ATmega16.

7. Управление процессом вывода информации из AVR микроконтроллера ATmega16 в LCD модуль (дисплей).

8. Назначение и состав файла m16def.inc.

 

 


Лабораторная работа № 3

ПРОГРАММа управлениЯ таймер–счетчиком

в режиме широтно–импульсной модуляции

 

Цель работы: Изучение проектирования таймера/счетчика в контроллере AVR на примере программы генерации синусоидального сигнала в режиме широтно–импульсной модуляции.

Таймер/счетчик 0

 

Таймер-счетчик 0 – модуль многофункционального одноканального 8–разряд­ного таймера–счетчика. Функциональная схема таймера–счетчика представлена на рис. 19.


Рис. 19. Функциональная схема 8–разр. таймера–счетчика 0

 

Описание регистров 8–разрядного таймера–счетчика 0

 

Регистр управления таймером–счетчиком 0 – TCCR0

В таблице 10 представлена структура регистра, режимы управления и начальные значения разрядов регистра TCCR0.

Табл. 10. Регистр TCCR0

 

Разряд                
  FOC0 WGM00 COM01 COM00 WGM01 CS02 CS01 CS00
Чт./зап. Чт. Чт./Зп. Чт./Зп. Чт./Зп. Чт./Зп. Чт./Зп. Чт./Зп. Чт./Зп.
Исх.зн.                

 

Разряд 7 – FOC0: Принудительная установка результата сравнения

Строб FOC0 не генерирует каких–либо прерываний, а также не вызывает сброс таймера в режиме СТС, где регистр OCR0 задает верхний предел счета. Бит FOC0 всегда считывается как 0.

 

Разряд 6, 3 – WGM01:0: Режим работы таймера–счетчика 0

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

 

 

Таблица 11. Описание бит, задающих режим работы таймера–счетчика 0

 

Номер реж. WGM01 WGM00 Режим работы тайм/сч. 0 Верхний предел счета Условие обновления регистра OCR0 Условие уст. флага TOV0
      Нормальный 0xFF Сразу после записи в регистр Дост–ние макс–го зн. (0xFF)
      ШИМ с фаз. кор–й 0xFF Достижение верхнего предела счета Дост–ние мин. зн. (0x00)
      Сброс при совп–нии OCR0 Сразу после записи в регистр Дост–ние макс. зн. (0xFF)
      Быстрый ШИМ 0xFF Достижение верхнего предела счета Дост–ние макс. зн. (0xFF)

 

Разряд 5:4 – COM01, COM00: Режим формирования выходного сигнала

 

Данные биты представлены в таблице 12, определяют алгоритм изменения сигнала на выводе OC0.

 

Таблица 12. Режимы формирования выходного сигнала

в режимах работы таймера 0 без ШИМ

 

COM01 COM00 Описание
    Функция обычного порта ввода–вывода. OC0 отключен.
    Переключение (инвертирование) OC0 при каждом совпадении
    Сброс OC0 при каждом совпадении
    Установка OC0 при каждом совпадении

 

 

В таблице 13 приведено назначение бит COM01, COM00 для режима работы таймера–счетчика 0 с быстрой ШИМ (WGM01:0).

 

Таблица 13. Режимы формирования выходного

сигнала в режиме таймера 0 с быстрым ШИМ(1)

 

COM01 COM00 Описание
    Функция обычного порта ввода–вывода. OC0 отключен.
    Зарезервировано
    Сброс OC0 при совпадении, установка по достижении верхнего предела (0xFF)
    Установка OC0 при совпадении, сброс по достижении верхнего предела (0xFF)

 

 

В таблице 14 приведено действие бит COM01, COM00 для режима ШИМ с фазовой коррекцией, заданного с помощью бит WGM01, WGM00.

 

Таблица 14. Режимы выходного сигнала в режиме ШИМ

с фазовой коррекцией(1)

 

COM01 COM00 Описание
    Функция обычного порта ввода–вывода. OC0 отключен.
    Зарезервировано
    Сброс OC0 при совпадении во время прямого счета. Установка OC0 при совпадении во время обратного счета.
    Установка OC0 при совпадении во время прямого счета. Сброс OC0 при совпадении во время обратного счета.

 

Разряд 2:0 – CS02:0: Настройка частоты синхронизации таймера

 

С помощью трех настроечных бит имеется возможность выбрать различные тактовые частоты, кратные исходной частоте синхронизации (см. табл. 15).

 

Таблица 15. Выбор частоты синхронизации таймера 0

 

CS02 CS01 CS00 Описание
      Нет синхронизации. Таймер–счетчик 0 оставлен.
      clkT0S/1 (без предделения)
      clkT0S/8 (с предделением)
      clkT0S/32 (с предделением)
      clkT0S/64 (с предделением)
      clkT0S/128 (с предделением)
      clkT0S/256 (с предделением)
      clkT0S/1024 (с предделением)

 

Регистр таймера–счетчика, разряды которого представлены в таблице 16, характеризуется двунаправленностью доступа к 8–разрядному счетчику таймера 0. Запись в регистр TCNT0 блокирует отработку возникающего совпадения на следующем после записи такте синхронизации таймера. Изменение содержимого счетчика (TCNT0) во время счета связано с риском потери результата сравнения между TCNT0 и регистром OCR0.

Таблица 16. Регистр таймера–счетчика – TCNT0

 

Разряд                
TCNT0 TCNT0[7:0]
Чт./зап. Чт./Зп. Чт./Зп. Чт./Зп. Чт./Зп. Чт./Зп. Чт./Зп. Чт./Зп. Чт./Зп.
Исх. знач.                

 

 

Регистр порога сравнения, разряды которого представлены в таблице 17, содержит 8–разр. значение, которое непрерывно сравнивается цифровым компаратором со значением 8–разр. счетчика (TCNT0). Факт совпадения значений может использоваться для генерации прерывания по выполнению условия сравнения или для генерации прямоугольных импульсов на выводе OC0.

Таблица 17. Регистр порога сравнения – OCR0

 

Разряд                
OCR0 OCR0[7:0]
Чт./зап. Чт./Зп. Чт./Зп. Чт./Зп. Чт./Зп. Чт./Зп. Чт./Зп. Чт./Зп. Чт./Зп.
Исх. зн.                

 

Таймер/счетчик 1

16–ти разрядный таймер–счетчик 1 предназначен для точного задания временных интервалов, генерации прямоугольных импульсов и измерения временных характеристик импульсных сигналов.

На рисунках и в тексте описания индекс “n” заменяет номер таймера–счет­чика, а “x” заменяет наименование канала сравнения (A, или B). Однако при про­граммировании необходимо использовать фактические номера и наименования.

В таблице 18 представлены разряды регистра А управления таймером–счетчиком 1 – TCCR1A.

В таблице 19 приведены режимы управления сигналов OCnA/OCnB.

В таблице 20 представлены разряды регистра В управления таймером–счетчиком 1 – TCCR1B.

 

Функциональная схема 16–разр. таймера–счетчика показана на рисунке 20.

Рис. 20. Функциональная схема 16–разр. таймера–счетчика

 

Таблица 18. Регистр А управления таймером–счетчиком 1 – TCCR1A

 

Bit                
  COM1 A1 COM1 A0 COM1 B1 COM1 B0 FOC1 A FOC1 B WGM11 WGM10
Чт./зап. Чт./Зп. Чт./Зп. Чт./Зп. Чт./Зп. Чт./Зп. Чт./Зп. Чт./Зп. Чт./Зп.
Исх. зн.                

 

Биты 7:6 – COM1A1:0 Режим формирования выходного сигнала канала A

Биты 5:4 – COM1B1:0 Режим формирования выходного сигнала канала В

 

Таблица 19. Управление режимами сигналов OCnA/OCnB

 

COMnA1/ COMnB1 COMnA0/ COMnB0 Описан


Поделиться:


Последнее изменение этой страницы: 2016-08-12; просмотров: 516; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.217.242.39 (0.015 с.)