Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

ЦМПУ / Новая папка / Лаб9ЦМПУ

.docx
Скачиваний:
15
Добавлен:
16.04.2015
Размер:
55.06 Кб
Скачать

Лабораторная работа №9 «Изучение принципа работы таймеров/счетчиков микроконтроллера»

Цель работы: Ознакомиться с принципом работы и функциями таймеров/счетчиков микроконтроллера ATmega128. Ознакомиться с принципом подключения клавиатуры к микроконтроллеру.

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

  1. Запустить симулятор VMLAB 3.12.

  2. Создать новый проект с именем “Project9.prj”.

  3. В окно кодов ввести листинг программы №9.

  4. В окно файла проекта ввести листинг проектного файла №9.

  5. Запустить программу на ассемблирование командой Project/Build (F9).

  6. Выполнить программу в автоматическом режиме командой Go/Continue (F5) из меню Run.

  7. Открыть панель управления через View/Control Panel (Alt+Shift+C).

  8. Нажать одну из клавиш “0”, “1”, “2”, “4”, “5”, “6”, “8”, “9”, “A”, “D”, а затем клавишу ввода “E”.

  9. В окне осциллографа (View/Scope (Alt+Shift+S)) пронаблюдать изменение сигналов во времени. Измерить частоту сигнала на выводе PD4 и длительность ШИМ-сигнала на – PB5 Сравнить полученное значение с табличным (см. таблицу 9.18).

  10. Открыть окно периферийных устройств через меню View/Peripherals (Alt+Shift+L) и пронаблюдать за изменением значений счетных регистров таймеров Timer0 и Timer1.

  11. Сбросить МК клавишей “С”.

12. Повторить пункты 5−8.

13. В соответствии с вариантом выполнить самостоятельное задание (см. таблицу 9.20).

14. Для сохранения проекта выполнить команду File/Save all.

15. Для выхода из среды разработки VMLAB 3.12 выполнить команды File/Exit (Alt+F4).

на эмуляторе

  1. Отладить предложенную программу (см. листинг программы №9). Получить машинный код программы в файле Project9.hex.

  2. Кабелем подключения соединить эмулятор с разъемом LPT компьютера.

  3. Включить сетевой тумблер на эмуляторе.

  4. Запустить программатор Pony Prog.

  5. Произвести калибровку устройства через меню Установки/Калибровка.

  6. Настроить интерфейс в меню Установки/Настройки.

  7. Выбрать тип МК ATmega128 через Устройство/AVRmicro/ATmega128.

  8. Стереть содержимое МК через меню Команды/Стереть.

  9. Выбрать через меню Файл/Открыть файл программы (FLASH) оттранслированную программу Project.hex.

  10. Записать программу через меню Команды/Записать программу (FLASH).

  11. Выйти из Pony Prog (Файл/Выход).

  12. Сбросить МК в начальное состояния клавишей “Сброс”.

  13. Задать параметры выходных сигналов нажатием одной из цифровой клавиши. Для окончания ввода нажать клавишу “Ввод”.

  14. Соединить осциллограф клеммой “Земля” с контактом 3 (“Земля”) разъема X3 эмулятора, а другую клемму − с контактом 1 того же разъема. Пронаблюдать и измерить частоту сигнала. Сравнить полученное значение с табличным (см. таблицу ).

  15. Клемму “Земля” соединить с тем же контактом 3 разъема X3, а другую клемму − с контактом 2. Пронаблюдать и измерить длительность сигнала. Сравнить полученное значение с табличным (см. таблицу ).

  16. Повторить пункты 12−15.

  17. В соответствии с вариантом выполнить самостоятельное задание (см. таблицу 9.20).

Листинг программы №9

; BASIC .ASM template file for AVR

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

; Define here the variables

;

.include "C:\VMLAB\include\m128def.inc""; определение библиотеки МК ;ATmega128, при условии расположения программы VMLAB на ;локальном диске С

.def scancode=r16

.def schscan=r17

.def schopr=r18

.def code=r19

.def keycode=r20

.def temp=r21

.def frec=r22

.def dlit=r23

.def zader=r24

.def zader1=r25

;Основная программа

;Определение таблицы переходов

.ORG $0 ;Начало таблицы переходов

reset: ; начальная метка

rjmp Start ;Переход на метку Start основной программы

reti ; Addr $01

reti ; Addr $02

reti ; Addr $03 Вектора прерываний МК ATmega128.

reti ; Addr $04 Приведены вектора с адреса $01 по адрес $10.

reti ; Addr $05 Полностью вектора прерываний представлены

reti ; Addr $06 в приложении с назначением прерываний

reti ; Addr $07 (внешних и внутренних).

reti ; Addr $08

reti ; Addr $09

reti ; Addr $0A

reti ; Addr $0B

reti ; Addr $0C

reti ; Addr $0D

reti ; Addr $0E

reti ; Addr $0F

reti ; Addr $10

.ORG $20 ;Вектор прерывания при переполнении таймера T0

rjmp IntT0

.ORG $22 ;Начальный адрес основной пpогpаммы

Start:

ldi temp,high(RAMEND) ; Установка указателя стека в конце ОЗУ out SPH,temp

ldi temp,low(RAMEND) ; Установка указателя стека в конце ОЗУ out SPL,temp

rcall Scan ;Вызвать процедуру работы с клавиатурой

Frec: out TCNT0,frec ;Установить заданную частоту сигнала

ldi temp,$4 ;Запустить таймер T0, fck/64

out TCCR0,temp ;Задание значения $4 в регистр управления таймером Т0

out OCR1AL,dlit ;Установить заданную длительность сигнала ldi temp,$81 ;Настроить таймер T1, PWM 8 бит

out TCCR1A,temp ;Задание значения $81 в регистр А управления таймером Т1

ldi temp,$1 ;Запустить таймеp T1, fck/1

out TCCR1B,temp ;Задание значения $1 в регистр В управления таймером Т1

ldi temp,$1 ;Разрешить прерывания от таймера Т0

out TIMSK,temp

ldi temp,$F0 ;Конфигурирование линии PB5 на вывод

out DDRB,temp ;Задание значения $20 в регистр направления данных порта В sei ;Разрешить все пpеpывания

ldi temp,$10 ;Конфигурирование линий PD4 на вывод

out DDRD,temp ;Задание значения $10 в регистр направления данных порта D sei ;Разрешить все пpеpывания

Work:

rjmp Work ;Рабочий цикл пpогpаммы, ничего не делаем

;Процедура cканирования клавиатуры

Scan: clr scancode ;Сброс scancode

ldi temp,$0F ;Конфигурирование 4-х выводов порта E на вывод

out ddre,temp ;и 4-х выводов на ввод

Stklav: sec ;Установить флаг переноса

ldi temp,$1 ;Назначить кл. S1 число 1

ldi schscan,$44 ;Загрузка счетчика сканирования

ldi code,$FE ;Загрузка исходного байта сканирования

Schs: out porte,code ;Вывод байта сканирования в порт E

rol code ;Сдвиг байта сканирования

in keycode,pine ;Ввод байта сканирования

swap keycode ;Поменять местами 4-е разряда байта возврата

ldi schopr,$3 ;Загрузка счетчика опросов

Scho: ror keycode ;Сдвиг байта возврата

brcc Oprkl ;Выход из прочедуры при обнаружении нажатой ;клав.

If0: inc temp ;Инкремент scancode

dec schopr ;Уменьшить счетчик опросов

brne Scho ;Если schopr=0, то перейти на метку Sсho

dec schscan ;Уменьшить счетчик сканирований

brne Schs ;Если schscan=0, то перейти на метку Sсhs

rjmp Stklav ;иначе перейти на метку Klav

Oprkl: cpi temp,$C ;При обнаружении нажатой кл. "Ввод"

breq Delay ;перейти на процедуру устранения дребезга контактов

mov scancode,temp ;иначе сохранить значение нажатой кл.в ;scancode

rjmp If0 ;и продолжить сканирование клавиатуры

;Процедура устранения дребезга контактов клавиш

;Задержка около 10 мс

Delay: clr zader

ldi zader1,$96

Delay1: dec zader

brne Delay1

dec zader1

brne Delay1

;Процедура задания сигналам частоты и длительности

Setkl: cpi scancode,$0 ;Если нажата только кл. "Ввод", то

breq If0 ;снова сканировать клавиатуру

cpi scancode,$1

ldi frec,$D9 ;Задать частоту сигнала 800 Гц

ldi dlit,$18 ;и длительность импульса ШИМ-сигнала 12 мкс breq Endkl

cpi scancode,$2

ldi frec,$ED ;Задать частоту сигнала 1600 Гц

ldi dlit,$30 ;и длительность импульса ШИМ-сигнала 24 мкс breq Endkl

cpi scancode,$3

ldi frec,$F3 ;Задать частоту сигнала 2400 Гц

ldi dlit,$48 ;и длительность импульса ШИМ-сигнала 36 мкс

breq Endkl

cpi scancode,$4

ldi frec,$F7 ;Задать частоту сигнала 3200 Гц

ldi dlit,$60 ;и длительность импульса ШИМ-сигнала 48 мкс

breq Endkl

cpi scancode,$5

ldi frec,$F9 ;Задать частоту сигнала 4000 Гц

ldi dlit,$78 ;и длительность импульса ШИМ-сигнала 60 мкс

breq Endkl

cpi scancode,$6

ldi frec,$FA ;Задать частоту сигнала 4800 Гц

ldi dlit,$90 ;и длительность импульса ШИМ-сигнала 72 мкс

breq Endkl

cpi scancode,$7

ldi frec,$FB ;Задать частоту сигнала 5600 Гц

ldi dlit,$A8 ;и длительность импульса ШИМ-сигнала 84 мкс

breq Endkl

cpi scancode,$8

ldi frec,$FC ;Задать частоту сигнала 6400 Гц

ldi dlit,$C0 ;и длительность импульса ШИМ-сигнала 96 мкс

breq Endkl

cpi scancode,$9

ldi frec,$FD ;Задать частоту сигнала 7200 Гц

ldi dlit,$D8 ;и длительность импульса ШИМ-сигнала 108 мкс

breq Endkl

ldi frec,$FE ;Задать частоту сигнала 8000 Гц

ldi dlit,$F0 ;и длительность импульса ШИМ-сигнала 120 мкс

Endkl: ret

;Пpоцедуpа пpеpывания по пеpеполнению таймеpа T0

IntT0: push temp ;Сохранить temp в стеке

out TCNT0,frec ;Пеpезагpузить таймер Т0

in temp,SREG ;Сохранить SREG

sbis pind,4 ;Если на PD4 был "0", то установить "1"

rjmp Ust1 ;и наоборот

cbi portd,4

rjmp EndT0

Ust1: sbi portd,4

EndT0: out SREG,temp ;Восстановление SREG

pop temp ;Выгрузить данные из стека

reti ;Выйти из процедуры

Рис. 9.15 Процедура задания сигналам частоты и длительности

Соседние файлы в папке Новая папка