Здравствуйте. Изучаю микроконтроллеры AVR, напмсал код на ассемблере, реализовав апаратный ШИМ с регулировкой, вот интересует вопрос, возможно ли сигнал ШИМа с ОС0 передать на PB4 или другой порт ,например (PD1).
/*
* FAST_shim.asm
*
* Created: 19.08.2014 14:18:20
* Author: PLATON
*/
.def Temp=R16
.def Temp1=R17
.def Temp2=R18
.def Temp3=R19
.def Temp4=R21
.def Temp5=R22
.def ResCnt=R20
.cseg
.org 0
;Вектора прерываний
jmp RESET ; Reset Handler
jmp EXT_INT0 ; IRQ0 Handler
jmp EXT_INT1 ; IRQ1 Handler
jmp TIM2_COMP ; Timer2 Compare Handler
jmp TIM2_OVF ; Timer2 Overflow Handler
jmp TIM1_CAPT ; Timer1 Capture Handler
jmp TIM1_COMPA ; Timer1 CompareA Handler
jmp TIM1_COMPB ; Timer1 CompareB Handler
jmp TIM1_OVF ; Timer1 Overflow Handler
jmp TIM0_OVF ; Timer0 Overflow Handler
jmp SPI_STC ; SPI Transfer Complete Handler
jmp USART_RXC ; USART RX Complete Handler
jmp USART_UDRE ; UDR Empty Handler
jmp USART_TXC ; USART TX Complete Handler
jmp ADCM ; ADC Conversion Complete Handler
jmp EE_RDY ; EEPROM Ready Handler
jmp ANA_COMP ; Analog Comparator Handler
jmp TWSI ; Two-wire Serial Interface Handler
jmp EXT_INT2 ; IRQ2 Handler
jmp TIM0_COMP ; Timer0 Compare Handler
jmp SPM_RDY
;RESET:
;EXT_INT0:
;EXT_INT1:
TIM2_COMP:
TIM2_OVF:
TIM1_CAPT:
TIM1_COMPA:
TIM1_COMPB:
TIM1_OVF:
TIM0_OVF:
SPI_STC:
USART_RXC:
USART_UDRE:
USART_TXC:
ADCM:
EE_RDY:
ANA_COMP:
TWSI:
EXT_INT2:
TIM0_COMP:
SPM_RDY:
reti
;****************************************************
; ИНИЦИАЛИЗАЦИЯ
;****************************************************
Reset:
ldi Temp,0b11111111 ;настройка портов
out DDRC,Temp
ldi Temp,0b11111111 ;настройка портов
out DDRB,Temp
ldi Temp,0b00000001 ;инициализация таймера
out TCNT0,Temp
ldi Temp,0b01111001 ;фаст шим настройка, запуск таймера
out TCCR0,Temp
ldi Temp4,0b11110000 ;сравнивается с TCCR0 (Ширина импульса)
out OCR0,Temp4
ldi Temp,0b11000000 ; Разрешение прерывания INT0, INT1
out GICR,Temp
ldi Temp,0b00000000 ; По низкому уровню
out MCUCR,Temp
; инициализация стека
LDI Temp1,Low(RAMEND)
OUT SPL,Temp1
LDI Temp1,High(RAMEND)
OUT SPH,Temp1
sei
; бесконечный цикл
cikl: jmp cikl
; обработчик внешнего прерывания
EXT_INT0:
ldi Temp3,0
ldi Temp2,0
l_res:
dec Temp3 ; Антидребезг
brne l_res
dec Temp2
brne l_res
inc ResCnt
CPI Temp4,0b11100000 ; сравним с крайним значением
BRSH m1 ; если больше или равно перейдём на метку
inc Temp4
inc Temp4
inc Temp4
inc Temp4
inc Temp4
inc Temp4 ; Уменьшаем Ширину импульса
inc Temp4
inc Temp4
out OCR0,Temp4
ldi Temp5,OCR0
out PortC,Temp5
m1:
reti
EXT_INT1:
ldi Temp3,0
ldi Temp2,0
l_res2:
dec Temp3 ; Антидребезг
brne l_res2
dec Temp2
brne l_res2
inc ResCnt
CPI Temp4,0b00011111 ; сравним с крайним значением
BRLO m2 ; если меньше или равно перейдём на метку
dec Temp4 ; Увеличиваем Ширину импульса
dec Temp4
dec Temp4
dec Temp4
dec Temp4
dec Temp4
dec Temp4
dec Temp4
out OCR0,Temp4
m2:
reti