Листинг по:
.INCLUDE "2313def.inc"
;Определение сегмента кода
.CSEG
.ORG 0x0000
;Таблица векторов прерываний
rjmp Reset
rjmp INT0_interrupt
rjmp INT1_interrupt
rjmp T1CAPT_interrupt
rjmp T1COMP_interrupt
rjmp T1OVF_interrupt
rjmp T0OVF_interrupt
rjmp UART_RX_interrupt
rjmp UART_UDRE_interrupt
rjmp UART_TX_interrupt
rjmp ANCOMP_interrupt
Reset: ;Прерывание по сбросу микроконтроллера
;Инициализация периферии МК
;Очистка необходимых временных регистров
clr r16
clr r17
clr r18
clr r25
clr r28
clr r29
clr r30
clr r31
;Настройка указателя стека
ldi r16, 0x7F
out SPL, r16
;Инициализация порта B
ldi r31, 0x00
out DDRB, r31
;Инициализация порта D
ldi r31, 0x40
out DDRD, r31
;Разрешение прерывания от функции выходного сравнения для таймера/счетчика 1
ldi r17, 0x40
out TIMSK, r17
;Инициализация регистра выходного сравнения значением, снятым с порта B
in r31, PORTB
sub r31, 0x0C
ldi r25, 0
out OCR1AH, r25
out OCR1AL, r31
;Включение таймера/счетчика 1
;Установка работы таймера в режиме 8-ми разрядного ШИМ
ldi r18, 0x01
out TCCR1A, r17
;Выбор делителя системной частоты 1
ldi r17, 0x01
out TCCR1B, r17
;Включение входа PD5
sbi PORTD, 6
;Глобальное разрешение прерываний
sei
;Программа
cycle:
rjmp cycle ;Бесконечный цикл
;Обработчики прерываний
T1COMP_interrupt: ;прерывание по совпадению таймера/счетчика 1
in r30, PORTD ;Проверка, включен ли
sbrc r30, 6 ;выход PD6
cbi PORTD, 6 ;Если да, то сбрасываем
com r30
sbrc r30, 6
sbi PORTD, 6 ;Если нет, то устанавливаем
ldi r17, 0xFF ;Запоминаем период ШИМ-сигнала
ldi r18, 29
adc r17, r18
ldi r18, 1
in r28, PORTB ;Считываем новые данные с порта B
sub r28, 0x0C
sbc r17, r28
mov r28, r17
out OCR1AL, r28 ;Заносим в регистр сравнения
;новое значение длины импульса
ldi r31, 0x00 ;Сбрасываем счетчик Т/С 1
out TCNT1L, r31
reti ;Возврат из прерывания
T1OVF_interrupt:
reti
T0OVF_interrupt:
reti
UART_RX_interrupt:
reti
UART_UDRE_interrupt:
reti
UART_TX_interrupt:
reti
ANCOMP_interrupt:
reti
INT0_interrupt:
reti
INT1_interrupt:
reti
T1CAPT_interrupt:
reti
Заключение
В данном проекте была разработана схема устройства для преобразования параллельного 8-ми разрядного кода в длительность ШИМ-сигнала. Все элементы в схеме подобраны правильно, поэтому данное устройство удовлетворяет поставленным требованиям. Программное обеспечение написано с помощью команд контроллера AT90S2313. Программное обеспечение проверенно и отлажено в средеAVRStudio4.0.
Список литературы
Хоровиц П., Хилл У., Искусство схемотехники: Пер. с англ. – Изд. 6-е. – М.: Мир, 2003 – 704 с.
Конспекты лекций по дисциплинам «Схемотехника» и «Микроконтроллеры».
Баранов В.Н., Применение микроконтроллеров AVR: схемы, алгоритмы, программы – М.: издательский дом «Додэка-XXI», 2004 – 288 с.
Квеглис С.В., Микроконтроллеры AVR: Метод. пособие. – Новосибирск: Изд-во НГТУ, 2003.
www.analog.com
-