Будь умным!


У вас вопросы?
У нас ответы:) SamZan.net

Лабораторная работа 3 Таймеры микроконтроллеров Tx8515 Цель работы изучение основных режимов работы тай

Работа добавлена на сайт samzan.net:


«Московский государственный технический университет имени Н.Э. Баумана»

(МГТУ им. Н.Э. Баумана)

Факультет «Информатика и системы управления»

Кафедра «Компьютерные системы и сети»

Отчет по лабораторной работе

по курсу «Микпроцессорные системы»

ТАЙМЕРЫ МИКРОКОНТРОЛЛЕРА ATx8515

Исполнители,

студ. гр. ИУ 6-71 ___________ М.И. Жильников

студ. гр. ИУ 6-71 ___________ В.Э. Подольский

Преподаватель

___________ В.Я. Хартов

2011


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

Таймеры микроконтроллеров ATx8515

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

Задание 1. Подготовить программу для исследования таймера/счётчика Т0 в режиме счётчика событий. Событием в данном случае может быть замыкание одной из кнопок SWx на плате STK500. Результат работы программы отобразить средствами индикации.

Проведена следующая коммутация шлейфами: порт PBSW, порт PD-LED. В программе 1 событие – это нажатие кнопки SW0. Светодиоды включаются после четвертого нажатия на кнопку SW0.

Также инкремент счётчика будет происходить после выполнения команд программы, эмулирующих  положительный перепад напряжения на PB0.

Программа 1:

.include "8515def.inc"  ;файл определений AT90S8515

.def temp = r16    ;временный регистр

;***Таблица векторов прерываний

.org $000

 rjmp INIT   ;обработка сброса

.org $007

 rjmp T0_OVF  ;обработка переполнения таймера T0

;***Инициализация МК

INIT:  ldi temp,low(RAMEND) ;установка

 out SPL,temp  ; указателя стека

 ldi temp,high(RAMEND) ;  на последнюю

 out SPH,temp  ;   ячейку ОЗУ

 clr temp   ;инициализация выводов порта PB

 out DDRB,temp  ; на ввод

 ldi temp,0x01  ;включение ‘подтягивающего’ резистора

 out PORTB,temp  ; входа PB0

 ser temp   ;инициализация выводов порта PD

 out DDRD,temp  ; на вывод

 out PORTD,temp  ;выключение светодиодов

 ldi temp,0x20  ;SE=1 - разрешение перехода

 out MCUCR,temp  ; в режим Idle

 ;***Настройка таймера Т0 на режим счётчика событий

 ldi temp,0x02  ;разрешение прерывания по

 out TIMSK,temp  ; переполнению таймера

 ldi temp,0x07  ;переключение таймера Т0

 out TCCR0,temp  ; по положительному перепаду напряжения

 sei    ;глобальное разрешение прерываний

 ldi temp,0xFC  ;$FC=-04 для

 out TCNT0,temp  ; отсчёта 4-х нажатий

LOOP:  sleep    ;переход в режим пониженного

 ;nop    ;энергопотребления

 cbi PORTB, 0         ;положительный перепад напряжения на PB0

 sbi portb, 0

 rjmp DELAY

 rjmp LOOP    

;***Обработка прерывания при переполнении таймера T0

T0_OVF: clr temp   

 out PORTD,temp  ;включение светодиодов

 rcall DELAY  ;задержка

 ser temp   

 out PORTD,temp  ;выключение светодиодов

 ldi temp,0xFC  ;$FC=-04 для

 out TCNT0,temp  ; отсчёта 4-х нажатий

 reti

;*** Задержка ***

DELAY: ldi r19,10

 ldi r20,255

 ldi r21,255

dd:  dec r21

 brne dd

 dec r20

 brne dd

 dec r19

 brne dd

 ret

Задание 2. Подготовить программу для исследования таймера/счётчика Т0 в режиме таймера.

На плате STK500 были соединены: PD2,PD3–SW2,SW3; PB-LED.

Программа 2:

.include "8515def.inc"  ;файл определений AT90S8515

.def temp = r16    ;временный регистр

.equ SW2 = 2    ;2-ой вывод порта PD

.equ SW3 = 3    ;3-ий вывод порта PD

;***Таблица векторов прерываний

.org $000

 rjmp INIT   ;обработка сброса

.org $007

 rjmp T0_OVF  ;обработка переполнения таймера T0

;***Инициализация МК

INIT:  ldi temp,low(RAMEND) ;установка

 out SPL,temp  ; указателя стека

 ldi temp,high(RAMEND) ;  на последнюю

 out SPH,temp  ;   ячейку ОЗУ

 clr temp   ;инициализация 2 и 3 выводов порта PD

 out DDRD,temp  ; на ввод

 ldi temp,0x0C  ;включение ‘подтягивающих’ резисторов

 out PORTD,temp  ; порта PD

 ser temp   ;инициализация выводов порта PB

 out DDRB,temp  ; на вывод

 out PORTB,temp  ;выключение светодиодов

 ;***Настройка таймера Т0 на режим таймера

 ldi temp,0x02  ;разрешение прерывания по

 out TIMSK,temp  ; переполнению таймера Т0

 clr temp   ;таймер Т0

 out TCCR0,temp  ; остановлен

 sei    ;глобальное разрешение прерываний

 clr temp   ;отсчёт

 out TCNT0,temp  ; начинается с 0

;***Ожидание нажатия кнопок

WAITSET_0: sbic PIND,SW2  ;проверка нажатия

 rjmp WAITSET_1  ;  кнопки SW2

 ;***Обработка нажатия кнопки SW2

 ldi temp,0x01  ;источник тактового сигнала - CK

 rcall LED_ON  ;включение светодиодов

WAITSET_1: sbic PIND,SW3  ;проверка нажатия

 rjmp WAITSET_0  ;  кнопки SW3

 ;***Обработка нажатия кнопки SW3

 ldi temp,0x02  ;источник тактового сигнала - CK/8

 rcall LED_ON  ;включение светодиодов

 rjmp WAITSET_0

;***Обработка прерывания при переполнении таймера T0

T0_OVF: ser temp   

 out PORTB,temp  ;выключение светодиодов

 clr temp   ;останов

 out TCCR0,temp  ; таймера Т0

 clr temp   

 out TCNT0,temp  ; установка 0

 reti

;***Включение светодиодов

LED_ON: out TCCR0,temp  ;настройка источника тактового сигнала

 clr temp   ;включение

 out PORTB,temp  ; светодиодов

 ret

Для наблюдений таймера Т0 в режиме таймера выставлена частота тактового генератора CK=512Гц. При нажатии на SW2 на вход счётчика поступают сигналы с частотой CK, при нажатии на SW3 - CK/8. В первом случае время с начала счёта до переполнения (выключения светодиодов) - 0,5с, во втором - 4с.

Задание 3. Подготовить программу для исследования функции сравнения таймера/счётчика Т1.

Частота тактового генератора устанавливается равной 256 Гц. Коммутация осуществляется 2-проводными шнурами: LED0 – PE2, LED1 – PD5, SW0 – PD0, SW1 – PD2.

Программа 3:

.include "8515def.inc"  ;файл определений AT90S8515

.def temp = r16    ;временный регистр

.equ START = 0    ;0-ой вывод порта PD

.org $000

 rjmp INIT   ;обработка сброса

.org $003

 rjmp STOP_PRESSED ;обработка внешнего прерывания INT0 -        ; нажатие STOP

;***Инициализация МК

INIT:  ldi temp,low(RAMEND) ;установка

 out SPL,temp  ; указателя стека

 ldi temp,high(RAMEND) ;  на последнюю

 out SPH,temp  ;   ячейку ОЗУ

 ldi temp,0x20  ;инициализация выводов порта PD:

 out DDRD,temp  ; 0,2 - на ввод, 5 - на вывод

 ldi temp,0x05  ;включение ‘подтягивающих’

 out PORTD,temp  ; резисторов порта PD и выключение СД

 ;ldi temp,0x04      ;для ATmega8515 инициал-ция вывода порта

 ;out DDRE,temp      ;PE2 (OC1B) на вывод!

 ldi temp,0x40  ;разрешение прерывания INT0

 out GIMSK,temp  ; в регистре GIMSK (или GICR)

 clr temp   ;обработка прерывания INT0

 out MCUCR,temp  ; по низкому уровню

 ;***Настройка функции сравнения таймера Т1

 ldi temp,0x00  ;запрещение прерываний

 out TIMSK,temp  ; от таймера

 cli    ;глобальное запрещение прерываний

 ldi temp,0x50  ;при равенстве состояния выводов OC1A и

 out TCCR1A,temp  ; OC1B изменяются на противоположные

 ldi temp,0x00  ;таймер

 out TCCR1B,temp  ; остановлен

 ldi temp,0x00  ;запись числа в

 out OCR1BH,temp  ; регистр сравнения,

 ldi temp,0x80  ;  первым записывается

 out OCR1BL,temp  ;   старший байт

 ldi temp,0x00  ;запись числа в

 out OCR1AH,temp  ; регистр сравнения,

 ldi temp,0xFF  ;  первым записывается

 out OCR1AL,temp  ;   старший байт

 clr temp   ;обнуление

 out TCNT1H,temp  ; содержимого

 out TCNT1L,temp  ;  счётного регистра

 sei    ;глобальное разрешение прерываний

WAITSTART: sbic PIND,START  ;ожидание нажатия

 rjmp WAITSTART  ;  кнопки START

 ldi temp,0x09  ;запуск таймера, при

 out TCCR1B,temp  ; совпадении с OCR1A - сброс

LOOP:  nop    ;во время цикла происходит

 rjmp LOOP   ; увеличение содержимого счётного регистра

;***Обработка прерывания от кнопки STOP

STOP_PRESSED:

 ldi temp,0x08  ;остановка

 out TCCR1B,temp  ; таймера

WAITSTART_2:    ;ожидание

 sbic PIND,START  ; нажатия

 rjmp WAITSTART_2  ;  кнопки START

 ldi temp,0x09  ;запуск

 out TCCR1B,temp  ; таймера

 reti

При нажатии на SW0 (START) происходит инкремент счётчика с частотой CK, при нажатии на SW1 (STOP) счётчик останавливается. ;При совпадении содержимого счётчика и регистра сравнения OCR1B происходит переключение светодиода LED0, счётного регистра  и регистра сравнения OCR1A - LED1.

Результат работы программы соответствует диаграммам на рисунке 1.

При нажатии на кнопку SW0 светодиоды работают в следующей последовательности: оба светодиода погашены, далее включается LED0, затем LED1, выключается LED0, затем LED1 и т.д. В любой момент процесс можно остановить нажатием кнопки SW1.

Рисунок 1 – Временные диаграммы работы таймера/счётчика Т1 при исследовании функции сравнения

Задание 4. Подготовить программу для исследования функции захвата таймера/счётчика Т1. Захват должен происходить при нажатии соответствующей кнопки.

Выставлена частота тактового генератора CK=256 Гц. Коммутация кнопок с выводами микроконтроллера осуществляется 2-проводными шнурами: SW0 – PD0, SW1 – PD1, SW2 - PD2, SW3 – PE0. Светодиоды подключаются к выводам порта PB  10-проводным шлейфом.

При моделировании программы в AVR Studio: вывод ICP в микроконтроллере AT90S8515 является выделенным, а в микроконтроллере ATmega8515 – это линия порта ввода/вывода PE0, т.е. в AT90S8515 инициализация PE не нужна.

Программа 4:

.include "8515def.inc"  ;файл определений AT90S8515

.def temp = r16    ;временный регистр

.def H_byte = r17   ;для хранения старшего байта

.def L_byte = r18   ;для хранения младшего байта

.equ START = 0    ;0-ой вывод порта PD

.equ SHOW_L = 1    ;1-ый вывод порта PD

.equ SHOW_H = 2    ;2-ой вывод порта PD

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

.org $000

 rjmp INIT   ;обработка сброса

.org $003

 rjmp CAPT_PRESSED ;обработка внешнего прерывания INT0 -        ;нажатие CAPT

;***Инициализация МК

INIT:  ldi temp,low(RAMEND) ;установка

 out SPL,temp  ; указателя стека

 ldi temp,high(RAMEND) ;  на последнюю

 out SPH,temp  ;   ячейку ОЗУ

 ldi temp,0x00  ;инициализация выводов

 out DDRD,temp  ; порта PD на ввод

 ldi temp,0x07  ;включение ‘подтягивающих’

 out PORTD,temp  ; резисторов порта PD

 ;ldi temp,0x00      ;для ATmega8515 инициал-ция вывода порта

 ;out DDRE,temp      ;PE0 (ICP) на ввод!

 ser temp   ;инициализация выводов

 out DDRB,temp  ; порта PB на вывод

 out PORTB,temp  ;выключение светодиодов

 cli    ;глобальное запрещение прерываний

 ldi temp,0x00  ;отключение от таймера

 out TCCR1A,temp  ; выводов

 ldi temp,0x00  ;таймер

 out TCCR1B,temp  ; остановлен

 ldi temp,0xFF  ;запись числа в

 out OCR1AH,temp  ; регистр сравнения,

 ldi temp,0xFF  ;  первым записывается

 out OCR1AL,temp  ;   старший байт

 clr temp   ;обнуление

 out TCNT1H,temp  ; содержимого

 out TCNT1L,temp  ;  счётного регистра

 ldi L_byte,0xF0  ;начальные значения

 ldi H_byte,0x0F  ; для проверки

 sei    ;глобальное разрешение прерываний

WAITSTART: sbic PIND,START  ;ожидание нажатия

 rjmp WAITSTART  ;  кнопки START

 ldi temp,0x08  ;разрешение прерывания

 out TIMSK,temp  ; по событию "захват" таймера

 ldi temp,0xC9  ;запуск таймера, при

 out TCCR1B,temp  ; совпадении с OCR1A - сброс

WAIT_L: sbic PIND,SHOW_L  ;ожидание нажатия

 rjmp WAIT_H  ;  кнопки SHOW_L - показать младший байт

 out PORTB,L_byte  ;вывод на СД

WAIT_H: sbic PIND,SHOW_H  ;ожидание нажатия

 rjmp WAIT_L  ;  кнопки SHOW_H - показать старший байт

 out PORTB,H_byte  ;вывод на СД

 rjmp WAIT_L

;***Обработка прерывания от кнопки CAPT

CAPT_PRESSED:

 in L_byte,ICR1L  ;считывание младшего байта

 in H_byte,ICR1H  ;считывание старшего байта

 com L_byte   ;инвертирование для вывода

 com H_byte   ;инвертирование для вывода

 reti

При нажатии на SW0 (START) на вход счётчика поступает сигнал с частотой CK, при нажатии на SW3 (CAPT) происходит захват состояния таймера. При совпадении содержимого счётчика и регистра сравнения OCR1A происходит сброс таймера. При нажатии на SW1 (SHOW_L) на светодиоды выводится значение младшего байта регистра захвата, SW2 (SHOW_H) - старшего байта регистра захвата.

Через t=5,783 c:    SW1_L=0010 0000;    SW2_H=0000 0110.

Задание 5. Подготовить программу для исследования работы таймера Т1 в режиме ШИМ.

Для наглядности необходимо выставить частоту тактового генератора = 2048 Гц. Выводы OC1A (PD5) и OC1B (PE2) необходимо подключить к светодиодам (PD5-LED0, PE2-LED1), выводы порта PD0-PD3 к кнопкам общего назначения SW0-SW3 соответственно.

Программа 5:

.include "8515def.inc"  ;файл определений AT90S8515

.def temp = r16    ;временный регистр

;***Выводы порта PD

.equ SHOW_0 = 0    

.equ SHOW_F1 = 1    

.equ SHOW_F2 = 2    

.equ SHOW_3 = 3    

.org $000

 rjmp INIT   ;обработка сброса

;***Инициализация МК

INIT:  ldi temp,low(RAMEND) ;установка

 out SPL,temp  ; указателя стека

 ldi temp,high(RAMEND) ;  на последнюю

 out SPH,temp  ;   ячейку ОЗУ

 ldi temp,0x20  ;инициализация выводов порта PD:

 out DDRD,temp  ; 0-3 - на ввод, 5 - на вывод

 ldi temp,0x0F  ;включение ‘подтягивающих’

 out PORTD,temp  ; резисторов порта PD

 ;ldi temp,0x04      ; для ATmega8515 инициал-ция вывода порта

 ;out DDRE,temp      ;PE2 (OC1B) на вывод!

 cli    ;глобальное запрещение прерываний

 ldi temp,0xB3  ;настройка таймера на ШИМ и работу с

 out TCCR1A,temp  ; выводами OC1A и OC1B

 clr temp   ;обнуление

 out OCR1AH,temp  ; регистров

 out OCR1AL,temp  ;  сравнения и

 out OCR1BH,temp  ;   ...

 out OCR1BL,temp  ;   ...

 out TCNT1H,temp  ;   счётного

 out TCNT1L,temp  ;    регистра

 ldi temp,0x01  ;таймер

 out TCCR1B,temp  ; запущен: частота = СК

 sei    ;глобальное разрешение прерываний

WAIT_0:     ;ожидание

 sbic PIND,SHOW_0  ; нажатия

 rjmp WAIT_F1  ; кнопки SHOW_0,устойчивые состояния 0 и 1

 ;***Перевод в устойчивые состояния выводов OC1A=0, OC1B=1

 clr temp   ;запись числа в

 out OCR1AH,temp  ; регистр сравнения, первым

 out OCR1AL,temp  ;  записывается старший байт

 out OCR1BH,temp  ;запись числа в регистр сравнения, первым

 out OCR1BL,temp  ; записывается старший байт

WAIT_F1: sbic PIND,SHOW_F1  ;ожидание нажатия

 rjmp WAIT_F2  ; кнопки SHOW_F1 -режим ШИМ скважностью F1

 ;***Настройка таймера на режим ШИМ со скважностью F1

 ldi temp,0x00  ;запись числа в

 out OCR1AH,temp  ; регистры сравнения,

 out OCR1BH,temp  ;   первым записывается

 ldi temp,0xFF  ;    старший байт

 out OCR1AL,temp

 out OCR1BL,temp

WAIT_F2: sbic PIND,SHOW_F2 ;ожидание нажатия

 rjmp WAIT_3  ; кнопки SHOW_F2 -режим ШИМ скважностью F2

 ;***Настройка таймера на режим ШИМ со скважностью F2

 ldi temp,0x02  ;запись числа в

 out OCR1AH,temp  ; регистры сравнения,

 out OCR1BH,temp  ;   первым записывается

 ldi temp,0xFF  ;    старший байт

 out OCR1AL,temp

 out OCR1BL,temp

WAIT_3: sbic PIND,SHOW_3  ;ожидание нажатия

 rjmp WAIT_0  ; кнопки SHOW_3,устойчивые состояния 1 и 0

 ;***Перевод в устойчивые состояния выводов OC1A=1, OC1B=0

 ser temp   ;запись числа в

 out OCR1AH,temp  ; регистр сравнения, первым

 out OCR1AL,temp  ;  записывается старший байт

 out OCR1BH,temp  ;запись числа в регистр сравнения, первым

 out OCR1BL,temp  ; записывается старший байт

 rjmp WAIT_0

При нажатии на SW0 (SHOW_0) на выходах OC1A и OC1B устанавливаются 0 и 1. При нажатии на SW1 (SHOW_F1) происходит генерация ШИМ-сигнала со скважностью F1. При нажатии на SW2 (SHOW_F2) происходит генерация ШИМ-сигнала со скважностью F2. При нажатии на SW3 (SHOW_1) на выходах OC1A и OC1B устанавливаются 1 и 0.

Результат соответствует диаграммам на рисунке 2.

Рисунок 2 – Формирование ШИМ-сигнала

Задание 6. Подготовить программу для исследования сторожевого таймера.

Частота тактового генератора не существенна, так как сторожевой таймер имеет независимый генератор. Коммутация выводов: SW0 – PD0, SW1 – PD1, LED – PB 10-проводным шлейфом.

Программа 6:

.include "8515def.inc"  ;файл определений AT90S8515

.def temp = r16    ;временный регистр

;***Выводы порта PD

.equ PERIOD_1 = 0    

.equ PERIOD_2 = 1    

.org $000

 rjmp INIT   ;обработка сброса

;***Инициализация МК

INIT:  ldi temp,low(RAMEND) ;установка

 out SPL,temp  ; указателя стека

 ldi temp,high(RAMEND) ;  на последнюю

 out SPH,temp  ;   ячейку ОЗУ

 clr temp   ;инициализация выводов порта PD

 out DDRD,temp  ; на ввод

 ldi temp,0x03  ;включение ‘подтягивающих’

 out PORTD,temp  ; резисторов порта PD

 ser temp   ;инициализация выводов порта PB

 out DDRB,temp  ; на вывод

 out PORTB,temp  ;выключение светодиодов

 ldi temp,$18  ;выключение

 out WDTCR,temp  ; сторожевого

 ldi temp,$10  ;  таймера:

 out WDTCR,temp  ;   WDE=0

WAIT_SW0: sbic PIND,PERIOD_1 ;ожидание нажатия

 rjmp WAIT_SW1  ;  кнопки PERIOD_1

 ;***Назначение периода наступления тайм-аута = 0,49с

 clr temp   ;включение

 out PORTB,temp  ; светодиодов

 ldi temp,$0D  ;включение сторожевого таймера,

 out WDTCR,temp  ; период 0,49с

WAIT_SW1: sbic PIND,PERIOD_2 ;ожидание нажатия

 rjmp WAIT_SW0  ;  кнопки PERIOD_2

 ;***Назначение периода наступления тайм-аута = 1,9с

 clr temp   ;включение

 out PORTB,temp  ; светодиодов

 ldi temp,$0F  ;включение сторожевого таймера,

 out WDTCR,temp  ; период 1,9с

 rjmp WAIT_SW0

При нажатии на SW0 (PERIOD_1) наступление тайм-аута происходит через 0,49с (время включения светодиодов). При нажатии на SW1 (PERIOD_2) наступление тайм-аута происходит через 1,9с (время включения светодиодов).

Задание 7. Изменить программу 1, добавив в нее обработку нажатия кнопки, исключающую влияние “дребезга”.

Для этого запрограммировать линию порта PB0 на вывод для программного ввода событий в таймер. Ввод событий выполнять при условии замыкания кнопки SWx, присоединенной к порту (линию и порт выбрать самостоятельно). Выполняя проверку состояния кнопки SWx, эмулировать сигнал «1» на выводе PB0 при замкнутом состоянии  «0» кнопки. Перед загрузкой программы выполнить ее отладку в AVR Studio. Убедившись в правильности работы программы, проверить ее в STK500.

Для подготовки устройства к работе соединяем шлейфом выводы порта PB с кнопками SW; выводы порта PD – со светодиодами LED.

    .include "8515def.inc"  ;файл определений AT90S8515

.def temp = r16 ;временный регистр

;***Таблица векторов прерываний

.org $000

 rjmp INIT ;обработка сброса

.org $007

 rjmp T0_OVF ;обработка переполнения таймера T0

;***Инициализация МК

INIT:  ldi temp,low(RAMEND) ;установка

 out SPL,temp ; указателя стека

 ldi temp,high(RAMEND) ;  на последнюю

 out SPH,temp ;   ячейку ОЗУ

 ldi temp,0x10 ;инициализация выводов порта PB1

 out DDRB,temp ; на вывод

 ser temp ;инициализация выводов порта PD

 out DDRD,temp ; на вывод

 out PORTD,temp ;выключение светодиодов

 ldi temp,0x20 ;SE=1 - разрешение перехода

 out MCUCR,temp ; в режим Idle

;***Настройка таймера Т0 на режим счётчика событий

 ldi temp,0x02 ;разрешение прерывания по

 out TIMSK,temp ; переполнению таймера

 ldi temp,0x07 ;переключение таймера Т0

 out TCCR0,temp ; по положительному перепаду напряжения

 sei ;глобальное разрешение прерываний

 ldi temp,0xFC ;$FC=-04 для

 out TCNT0,temp ; отсчёта 4-х нажатий

LOOP:  sbis PINB,0;

 Rjmp LOOP ;

 cbi PORTB,0

 sbi PORTB,0

 rjmp DELAY

 rjmp  LOOP

;***Обработка прерывания при переполнении таймера T0

T0_OVF: clr temp

 out PORTD,temp ;включение светодиодов

 rcall DELAY ;задержка

 ser temp

 out PORTD,temp ;выключение светодиодов

 ldi temp,0xFC ;$FC=-04 для

 out TCNT0,temp ; отсчёта 4-х нажатий

 reti

;*** Задержка ***

DELAY:  ldi r19,10

 ldi r20,255

 ldi r21,255

dd:  dec r21

 brne dd

 dec r20

 brne dd

 dec r19

 brne dd

ret

Программа демонстрирует устранение дребезга кнопок SW

Задание 8. Подготовить программу по примеру 4.2 для проверки работы таймера/счётчика Т1 в режиме таймера. Время включения светодиодов 1с и 8с.

Для подготовки устройства к работе соединяем выводы порта PD с кнопками SW0 – SW7; выводы порта PB – со светодиодами LED0 – LED7

    .include "8515def.inc"  ;файл определений AT90S8515

.def temp = r16 ;временный регистр

.equ SW2 = 2 ;2-ой вывод порта PD

.equ SW3 = 3 ;3-ий вывод порта PD

;***Таблица векторов прерываний

.org $000

 rjmp INIT ;обработка сброса

.org $006

 rjmp T1_OVF ;обработка переполнения таймера T1

;***Инициализация МК

INIT:  ldi temp,low(RAMEND) ;установка

out SPL,temp ; указателя стека

ldi temp,high(RAMEND) ;  на последнюю

out SPH,temp ;   ячейку ОЗУ

 clr temp ;инициализация 2 и 3 выводов порта PD

out DDRD,temp ; на ввод

ldi temp,0x0C ;включение ‘подтягивающих’ резисторов

out PORTD,temp ; порта PD

ser temp ;инициализация выводов порта PB

out DDRB,temp ; на вывод

out PORTB,temp ;выключение светодиодов

;***Настройка таймера Т0 на режим таймера

ldi temp,0x80 ;разрешение прерывания по

out TIMSK,temp ; переполнению таймера Т1

clr temp ;таймер Т1

out TCCR1B,temp ; остановлен

sei ;глобальное разрешение прерываний

ldi temp,0xFE ;отсчёт

out TCNT1H,temp ; начинается с загруженного значения

clr temp

out TCNT1L,temp

;***Ожидание нажатия кнопок

WAITSET_0: sbic PIND,SW2 ;проверка нажатия

rjmp WAITSET_1 ;  кнопки SW2

;***Обработка нажатия кнопки SW2

ldi temp,0x01 ;источник тактового сигнала - CK

rcall LED_ON ;включение светодиодов

WAITSET_1: sbic PIND,SW3 ;проверка нажатия

rjmp WAITSET_0 ;  кнопки SW3

;***Обработка нажатия кнопки SW3

ldi temp,0x02 ;источник тактового сигнала - CK/8

rcall LED_ON ;включение светодиодов

rjmp WAITSET_0

;***Обработка прерывания при переполнении таймера T0

T1_OVF: ser temp

 out PORTB,temp ;выключение светодиодов

 clr temp ;останов

 out TCCR1B,temp ; таймера Т1

 ldi temp,0xFE

 out TCNT1H,temp ; установка значения

 clr temp

 out TCNT1L,temp

reti

;***Включение светодиодов

LED_ON: out TCCR1B,temp ;настройка источника тактового сигнала

clr temp ;включение

out PORTB,temp ; светодиодов

ret

Программа для МК ATx8515 демонстрирует работу таймера Т1 в режиме таймера. На устройстве выставляется частота тактового генератора CK=512Гц. При нажатии на SW2 на вход счётчика поступают сигналы с частотой CK, при нажатии на SW3 - CK/8. В первом случае время с начала счёта до переполнения (выключения светодиодов) - 1с, во втором - 8с




1. Анализ финансового состояния коммерческого банка
2. х менструальных циклов однофазная
3. .12.2013 суббота ПРОСМОТРЫ И ЗАЩИТЫ ПРОЕКТА 22.2
4. ВВЕДЕНИЕ Актуальность темы исследования
5. Российское государство- прошлое, настоящее, будущее
6. Экология ряпушки Хантайского водохранилища
7. Курсовая работа- Разработка нефтяных месторождений с применением законтурного и внутриконтурного заводнений
8. Суворов
9. тренировочных прыжков парашютисты могут случайно оказаться над лесом зданиями проводами высокого напряже
10. Развитие и концепции операционных систем WINDOWS1
11. тема сложная но очень интересная
12. Мережковский Д.С
13. перше своєю формою і подруге своїм змістом
14. на тему- Ужвій Наталія Михайлівна 18981986актриса Народилася Наталія Михайлівна Ужвій 22 серпня 1898
15. 1 Комплексна оцінка здоров~я дітей які проживають в Закарпатському регіоні України показала що 20.html
16. Что с твоими волосами
17. во Gmsoideпредставют наиб
18. Реферат- Контракт как особая форма коллективного договора
19. ЛЕКЦИИ ПО АКУШЕРСТВУ Пособие для студентов лечебного факультета факультета иностранных учащихся пед
20. на тему- Особенности рекламы потребительских товаров в автоцентре АвтобанЗапад Студент Ва