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


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



ЗНАЕТЕ ЛИ ВЫ?

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



Ldi TEMP, 0x17; 00010111, setting bits for OC1, PB2 and PB4, PB0

Out DDRB, TEMP; set Port B direction as above

Ldi TEMP, 0x28; 00101000, PB5 pullup, PB4 lo, PB3 pullup, PB2 lo, OC1 low,

Out PORTB, TEMP

Out PORTB, TEMP; set Port B

Ldi TEMP, 0xFC; All outputs except bits 0,1 (UART)

out DDRD, TEMP;

rcall LCD_SETUP;; Initialize LCD and send

rcall LCD_HELLO;; a welcome message

Ldi TEMP, 12; Set UART 4800 bauds for 1 MHz

out UBRR, TEMP;

Ldi TEMP, 0xF8; Activate all interrupts and TX/RCV

out UCR, TEMP; and go!

Sei

FOREVER:; Endless loop. RX interrupt

Nop; will do the job

nop;

rjmp FOREVER;;

UART_RX:; Read UART chararter and

In PARAM, UDR; send it to the LCD

rcall LCD_DATA;

Reti

; LCD Driving Library example

; Display setup for 4 bits interface

LCD_SETUP:

Ldi TEMP, 10; Wait about 20msec after powerup

SET1:; LCD is a quite slow,

rcall WAIT_2M; mind delays!

dec TEMP;

brne SET1;

Ldi TEMP, 0b00101000; Set 4 bit interface (but we are

out PORTD, TEMP; still in 8 bits!)

Nop

nop; Data write cycle must be > 1 ms

Cbi PORTD, 3; OE low to clock in data

rcall WAIT_2M;

; ***!! From now on, interface is 4 bits!! ***

Ldi PARAM, 0b00101000; Send again to catch the bit N

rcall LCD_CMD; Display is 2 lines, so N = 1

Ldi PARAM, 0b00001000; Display off, cursor off, and blink off

rcall LCD_CMD

Ldi PARAM, 0b00000001; Display clear

rcall LCD_CMD

rcall WAIT_2M; Wait 2 sec after clear

Ldi PARAM, 0b00000110; Increment RAM, dont shift display

rcall LCD_CMD

Ldi PARAM, 0b00001110; Display on, cursor on / blink off

rcall LCD_CMD

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:

Cpi PARAM, 0x0D; Look for CR in message (new line)

Brne L3C

Ldi PARAM, 0xC0; Cursor to position 0x40, start of 2nd line

rcall LCD_CMD; Sends command

Rjmp L3D

L3C:

rcall LCD_DATA

L3D:

Adiw ZL, 1; Increment pointer. This neat instruction does

Rjmp L3A; w16 bit addition to pointer ZHI:ZLO.

L4:

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

Andi PARAM, 0xF0; Mask off lower 4 bits

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

Out PORTD, PARAM; Send upper 4 bits to display

Nop; Brief delay to give reasonable OE

Nop; pulse width

Cbi PORTD,3; OE goes low to clock in data

Mov PARAM, TEMP; Data back

Swap PARAM; Lower 4 bits

Andi PARAM, 0xF0

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

Out PORTD, PARAM; Write lower 4 bits to LCD

Nop

Nop

Cbi PORTD,3; OE clock low

Ldi PARAM, 100; 50 usec approx

DEL0:

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

Andi PARAM, 0xF0; Mask off lower 4 bits

Sbr PARAM, OE; OE bit high

Sbr PARAM, RS; Data/command bit high

Out PORTD, PARAM; Write upper 4 bits to display

Nop; Brief delay

Nop

Cbi PORTD, 3; OE low to clock data

Swap TEMP; Lower 4 bits

Andi TEMP, 0xF0; Masked off

Sbr TEMP, OE; OE high

Sbr TEMP, RS

Out PORTD, TEMP; Lower 4 bits to LCD

Nop

Nop

Cbi PORTD, 3; OE low to clock data

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:

Ori PARAM, 0x80; MSB specifies address command

rcall LCD_CMD

Ret

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

 

Необходимо выполнить все необходимые операции с проектом Lab_2.prj и программой Lab2.asm в среде VMLab как и в лабораторной работе №1.

 

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

 

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

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

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

- текст программы на языке 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 Описание
    Нормальная работа порта, сигналы OCnA/OCnB отключены.
    Переключение (инвертирование) OCnA/OCnB при совпадении.
    Сброс OCnA/OCnB при совпадении (установка лог. 0).
    Установка OCnA/OCnB при совпадении (установка лог. 1).

 

Биты 3:2 – FOC1A:FOC1B: Режим формирования силы выходного сигнала.

 

Разряд 1:0 – WGMn1:0: Режим работы таймера–счетчика

 

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

 

Разряд                
  ICNC1 ICES1 WGM13 WGM12 CS12 CS11 CS10
Чт./зап. Чт./Зп. Чт./Зп. Чт. Чт./Зп. Чт./Зп. Чт./Зп. Чт./Зп. Чт./Зп.
Исх. зн.                

 

Разряд 7 – ICNC1: Подавитель шума на входе захвата (задержка сигнала с входа захвата на 4 такта)

 

Разряд 6 – ICES1: Выбор детектируемого фронта на входе захвата

 

Разряд 5 – Зарезервированный бит

 

Разряд 4:3 – WGM1 3:2: Режим работы таймера–счетчика

 

Разряд 2:0 – CS12:0: Выбор тактового источника

 

Данные три бита, представленные в таблице 21, позволяют выбрать тактовый источник для таймера–счетчика.

 

Таблица 21. Описание бит выбора тактового источника

 

CS12 CS11 CS10 Описание
      Нет синхронизации. Таймер–счетчик остановлен.
      clkI/O/1 (без предделения)
      clkI/O /8 (с предделением)
      clkI/O/64 (с предделением)
      clkI/O/256 (с предделением)
      clkI/O/1024 (с предделением)
      Внешний тактовый источник с выв. T1. Синхронизация по падающему фронту.
      Внешний тактовый источник с выв. T1. Синхронизация по нарастающему фронту.

 

Если для тактирования таймера выбран внешний вывод T1, то данная функция за ним сохраняется, даже при его настройке на вывод. Данная функция позволяет программно управлять счетом.

В таблице 22 представлены разряды таймер–счетчиков 1 – TCNT1H и TCNT1L.

 

 

Таблица 22. Таймер–счетчик 1 – TCNT1H и TCNT1L

 

Разряд                  
  TCNT1[15:8] TCNT1H
  TCNT1[7:0] TCNT1L
Чт./зап. Зп./Чт. Зп./Чт. Зп./Чт. Зп./Чт. Зп./Чт. Зп./Чт. Зп./Чт. Зп./Чт.  
Исх. зн.                  

Две ячейки в области ввода–вывода (TCNT1H и TCNT1L, вместе TCNT1) дают полный доступ, как на чтение, так и на запись к 16–разрядному счетчику. В целях гарантирования одновременности чтения и записи старшего и младшего байтов этих регистров, доступ организован с использованием 8–разрядного временного регистра старшего байта (TEMP). Временный регистр является общим для всех 16–разрядных регистров таймера.

Изменение содержимого счетчика TCNT1 во время его работы (счета) связано с риском возникновения совпадения между TCNT1 и одним из регистров OCR1x. Запись в регистр TCNT1 блокирует отработку совпадения, которое возникнет на следующем такте, для всех блоков сравнения.

В таблицах 23 и 24 представлены разряды регистров сравнения 1A – OCR1AH, OCR1AL и 1B – OCR1BH и OCR1BL

Таблица 23. Регистр сравнения 1 A – OCR1AH и OCR1AL

 

 

Разряд                  
  OCR1A [15:8] OCR1AH
  OCR1A [7:0] OCR1AL
Чт./зап. Зп./Чт. Зп./Чт. Зп./Чт. Зп./Чт. Зп./Чт. Зп./Чт. Зп./Чт. Зп./Чт.  
Исх. зн.                  

 

Таблица 24. Регистр сравнения 1B – OCR1BH и OCR1BL

 

 

Разряд                  
  OCR1B [15:8] OCR1BH
  OCR1B [7:0] OCR1BL
Чт./зап. Зп./Чт. Зп./Чт. Зп./Чт. Зп./Чт. Зп./Чт. Зп./Чт. Зп./Чт. Зп./Чт.  
Исх. зн.                  

 

 

В регистрах сравнения хранится 16–разр. значение, которое непрерывно сравнивается со значением счетчика (TCNTn). Возникающее совпадение может использоваться для генерации прерывания по результату сравнения и генерации прямоугольных импульсов на выводе OCnx.

Регистры сравнения являются 16–разрядными, поэтому, одновременность записи младшего и старшего байтов достигнута за счет использования 8–разр. временного регистра старшего байта (TEMP). Временный регистр является общим для всех 16–разрядных регистров таймера.

Регистры захвата, представленные в таблице 25, обновляются содержимым соответствующего счетчика (TCNTn) при каждом определении условия захвата на входе ICPn (или альтернативно на выходе аналогового компаратора для таймера–счетчика 1).

 

Таблица 25. Регистр захвата 1 – ICR1H и ICR1L

 

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

 

 

Регистры захвата альтернативно могут использоваться для задания верхнего предела счета.

Регистры захвата также являются 16–разрядными, поэтому, одновременность записи младшего и старшего байтов достигнута за счет использования 8–разр. временного регистра старшего байта (TEMP). Временный регистр является общим для всех 16–разрядных регистров таймера.

В таблице 26 представлены разряды регистра маски прерываний таймера–счетчика – TIMSK

 

Таблица 26. Регистр маски прерываний таймера–счетчика – TIMSK

 

Разряд                  
  OCIE2 TOIE2 TICIE1 OCIE1A OCIE1B TOIE1 OCIE0 TOIE0 TIMSK
Чт//зап. Чт./Зп. Чт./Зп. Чт./Зп. Чт./Зп. Чт./Зп. Чт./Зп. Чт./Зп. Чт./Зп.  
Исх. зн.                  

 

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

 

Разряд 5 – TICIE1: Разрешение прерывания по захвату состояния таймера–счетчика 1

 

Если в данный бит записана лог. 1, а также установлен флаг I в регистре статуса (активно общее разрешение прерываний), то разрешается прерывание по захвату состояния таймера–счетчика 1. Если устанавливается флаг в регистре TIFR, программа переходит на соответствующий вектор прерывания.

 

Разряд 4 – OCIE1A: Разрешение прерывания по результату сравнения канала А таймера–счетчика 1

 

Если в данный бит записана лог. 1 и установлен флаг I в регистре статуса, то разрешается работа прерывания по результату сравнения канала A. Если устанавливается флаг OCF1A в регистре TIFR, то программа переходит на соответствующий вектор прерываний.

 

Разряд 3 – OCIE1В: Разрешение прерывания по результату сравнения канала В таймера–счетчика 1

 

Действие аналогично предыдущему, но в отношении канала сравнения В.

Разряд 2 – TOIE1: Разрешение прерывания при переполнении таймера–счетчика 1

Если в данный бит записана лог. 1 и установлен флаг I в регистре статуса, то разрешается прерывание по переполнению таймера–счетчика 1. После этого, установка флага TOV1 в регистре TIFR приведет к переходу на соответствующий вектор прерывания.

В таблице 27 представлен регистр флагов прерываний таймеров–счетчиков TIFR.

 

Таблица 27. Регистр флагов прерываний таймеров–счетчиков – TIFR

 

 

Разряд                  
  OCF2 TOV2 ICF1 OCF1A OCF1B TOV1 OCF0 TOF0 TIFR
Чт./зап. Чт./Зп. Чт./Зп. Чт./Зп. Чт./Зп. Чт./Зп. Чт./Зп. Чт./Зп. Чт./Зп.  
Исх. зн.                  

 

 

Прим.: Биты данного регистра относятся к нескольким таймерам, но в данном параграфе рассматриваются биты только одного таймера. Описание остальных бит необходимо смотреть в соответствующих разделах.

 

Разряд 5 – ICF1: Флаг захвата состояния таймера–счетчика 1

 

Флаг устанавливается, если на входе ICP1 определяется условие захвата. Если регистр захвата ICR1 выбран с помощью бит WGMn3:0 в качестве источника верхнего предела счета, флаг ICF1 устанавливается по достижении верхнего предела счета.

ICF1 автоматически сбрасывается при переходе на вектор прерывания по захвату состояния таймера–счетчика. Альтернативно флаг ICF1 можно сбрасывать путем записи в него лог. 1.

 

Разряд 4 – OCF1A: Флаг результата сравнения канала А таймера–счетчика 1

 

Данный флаг устанавливается следующим тактом после совпадения значения TCNT1 с регистром А порога сравнения (OCR1A).

Обратите внимание, что строб принудительной установки результата сравнения (FOC1A) не устанавливает флаг OCF1A. Флаг OCF1A автоматически сбрасывается при переходе на соответствующий вектор прерывания.

Альтернативно, флаг OCF1A сбрасывается путем записи в него лог. 1.

 

 

Разряд 3 – OCF1B: Флаг результата сравнения канала B таймера–счетчика 1

 

Данный флаг действует аналогично предыдущему, но в отношении канала сравнения В.

 

Разряд 2 – TOV1: Флаг переполнения таймера–счетчика 1

 

Установка данного флага зависит от значений бит WGMn3:0. В нормальном режиме и режиме СТС флаг TOV1 устанавливается при переполнении таймера–счетчика. См. табл. 61 для изучения поведения флага TOV1 при задании других значений WGMn3:0. Флаг TOV1 автоматически сбрасывается при переходе на вектор прерывания по переполнению таймера–счетчика 1. Альтернативно флаг TOV1 сбрасывается путем записи в него лог. 1.

 

 

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

 

Изучить файл проекта Lab_3.prj и файл программы Lab3.asm на языке Ассемблер. Отмоделировать программу в среле VMLab. Результаты моделирования представлены на рис. 21.

 

 

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

Файл Lab_3.prj

; Sinewave generator example, using Timer 1 PWM

.MICRO "ATmega16"; The micro being used

.PROGRAM "Lab3.asm"; The.ASM program

.TRACE; Set trace ON

.POWER VDD=5 VSS=0; Power nodes

.CLOCK 1.8432meg; Micro clock

 

R2 PD5 fil_out1 100K; PB3 port = OC1 (output compare)

C1 fil_out1 vss 10n;

R3 fil_out1 fil_out 100K; PB3 port = OC1 (output compare)

C2 fil_out vss 10n;

.plot v(PD4) v(PD5) v(fil_out) v(fil_out1); Dispay in SCOPE

Файл Lab3.asm

;*************************************************************

;* PWM based sinewave generator, table based

;*************************************************************

 

.include "m16def.inc"

 

; Registers definitions

;

.def tmp = r16

.def angle = r17; Index to hold the sine phase angle (0 to 127)

 

;*************************************************************

; Reset and interrupt vectors handlers

;

.cseg

.org $00

reset_hnd:

rjmp start;

.org OVF1addr

tim1_hnd:

rjmp tim1_ovf

 

;***************************************************************

; Timer 1 interrupt handler

;

tim1_ovf:

inc angle

andi angle, $7F; truncates to 7 bits (0 – 127)

ldi ZL,low(sine_tbl*2); Get the table address and

ldi ZH,high(sine_tbl*2); add the angle phase. Result

add ZL,angle; will be in R0 after calling 'lpm'

clr tmp; lpm uses 16 bits index (Z)

adc ZH, tmp; Z index is the pointer to the

lpm; sine_tbl value for the angle phase

 

clr tmp

out OCR1AH, tmp; Reload Timer 1 compare value.

out OCR1AL,R0; Necessary to reload both registers

reti

 

;************************************************************

; Reset handler. Initalizes port and Timer 1, and stay in a endless loop

;

start:

sbi DDRD, PD4; Set pin PD5 as output (is OC1 pin)

sbi DDRD, PD5

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

out SPH, tmp

ldi tmp, low(RAMEND)

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

 

ldi tmp,(1<<TOIE1)

out TIMSK,tmp; Enable Timer1_ovf interrupt

 

ldi tmp,(1<<PWM10)+(1<<COM1A1); Set Timer 1 in PWM mode

out TCCR1A,tmp; 8 bit PWM not reverse (Fck/510)

ldi tmp,(1<<CS10)

out TCCR1B,tmp; prescaler = 1

 

clr angle; Start with phase = 0

 

sei; Enable interrupts

 

main:

nop

nop

rjmp main; Infinite loop: Timer1 interrupt will handle all

 

;*************************** SINE TABLE ***************************************

; Samples table: one period sampled on 128 samples and

; quantized on 7 bit

;

sine_tbl:

.db 0,0

.db 1,1

.db 2,3

.db 4,6

.db 7,9

.db 10,12

.db 14,16

.db 18,21

.db 23,25

.db 28,31

.db 33,36

.db 39,42

.db 45,48

.db 51,54

.db 57,60

.db 64,67

.db 70,73

.db 76,79

.db 82,85

.db 88,91

.db 94,96

.db 99,102

.db 104,106

.db 109,111

.db 113,115

.db 117,118

.db 120,121

.db 123,124

.db 125,126

.db 126,127

.db 127,127

.db 127,127

.db 127,127

.db 126,126

.db 125,124

.db 123,121

.db 120,118

.db 117,115

.db 113,111

.db 109,106

.db 104,102

.db 99,96

.db 94,91

.db 88,85

.db 82,79

.db 76,73

.db 70,67

.db 64,60

.db 57,54

.db 51,48

.db 45,42

.db 39,36

.db 33,31

.db 28,25

.db 23,21

.db 18,16

.db 14,12

.db 10,9

.db 7,6

.db 4,3

.db 2,1

.db 1,0

.db 0,0

.db 0,0

 

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

 

Нужно выполнить все необходимые операции с проектом Lab_3.prj и программой Lab3.asm в среде VMLab как и в лабораторных работах №1,2.

 

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

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

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

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

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

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

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

 

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

 

 

1. Регистр состояния микроконтроллера ATmega16.

2. Стек и его инициализация.

3. Память микроконтроллера ATmega16.

4. Процессорное ядро микроконтроллеров AVR.

5. Непосредственная адресация данных в микроконтроллерах AVR.

6. Прямая адресация данных в микроконтроллерах AVR.

7. Косвенная адресация данных в микроконтроллерах AVR.

8. Относительная адресация данных в микроконтроллерах AVR.


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

 

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

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

 

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

 

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

 

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

Кнопки «0» и «1» клавиатуры в «Control Panel» VMLab подключены совместно с резисторами R1 и R2 к микроконтроллеру соответственно к входам PD2 и PD3 таким образом, что при нажатии на них возникают dytiybt прерывания «INT0» и «INT1» соответственно. В файле «Lab5.asm» предусмотрены соответствующие инициализации векторов прерываний и имеются подпрограммы обработки этих прерываний. Кнопка «0» запускает таймер счета, при этом происходит отображение результатов счета на модуле LCD. Кнопка «1» останавливает таймер счета. Результаты моделирования представлены на рис.22.

 

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

Файл Lab_4.prj

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

.PROGRAM "Lab4.asm"

.TARGET "Lab4.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

; Type in the TX window while the

; simulation is running, after

; the welcome message

; RS R/W E 4 bits interface arbitrary nodes

Xdisp LCD(24 2 250K) PA2 PB0 PA3 PA7 PA6 PA5 PA4 nc3 nc2 nc1 nc0

 

K0 PD2 VSS; Key0 (activated by button 0)

R1 VDD PD2 10K

K1 PD3 VSS; Key1 (activated by button 1)

R2 VDD PD3 10K

 

.plot v(pc0) v(pc1)

 

 

Файл Lab4.asm

.include "m16def.inc"

.EQU OE = 0b001000; bit 3

.EQU RS = 0b000100; bit 2

.DEF TEMP = R16; temporary working register

.DEF PARAM = R17; Parameter transfer register

.DEF CNTR1 = R18; Counter register

.DEF CNTR2 = R19

.DEF DEL2 = R23

.DEF DELAY = R10;

.DEF DELAY1 = R11; To generate long delays

.DEF DELAY2 = R12;

.DEF STATUS = R20

; *************************************

CSEG

ORG 0x00

START:

Rjmp RESET; Reset vector

ORG INT0addr

rjmp START_COUNTER

ORG INT1addr

rjmp STOP_COUNTER

START_COUNTER:

Ldi STATUS, 0x01

rcall LCD_TXT_STARTED

Sei

rjmp COUNTER_IN

COUNTER:

Ldi CNTR1, 0

COUNTER_OUT:

Ldi CNTR2, 0

COUNTER_IN:

rcall LCD_PRINT_CNTRS

Inc CNTR2

Cpi CNTR2, 100

brne COUNTER_IN

Inc CNTR1

Cpi CNTR1, 100

brne COUNTER_OUT

Rjmp COUNTER

STOP_COUNTER:

Tst STATUS

breq CLEAR_COUNTER

Ldi STATUS, 0x00

rcall LCD_TXT_PAUSED

Sei

Rjmp FOREVER

CLEAR_COUNTER:

rcall LCD_TXT_STOPPED

Ldi CNTR1, 0

Ldi CNTR2, 0

rcall LCD_PRINT_CNTRS

Sei

Rjmp FOREVER

; ****************************************

; Device initialization

;.ORG 0x10

RESET:

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

Out SPH, TEMP

Ldi TEMP, LOW(RAMEND)



Поделиться:


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

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