даYS писал(а):Верно?
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
даYS писал(а):Верно?
Точно! Так я и хотел сказать.YS писал(а):Потому восьмой бит имеет номер семь.
Тут явно указано количество, а не нумерация.но при этом у нас всего 7 прерываний на любое число каналов.
От безделья накидал кодик для Атмеги8 на весь порт D. В протеусе работает.СКАЗОЧНИК писал(а):Предлагаю в этой теме выкидывать исходники, если кто пытался использовать ВАМ.
Код: Выделить всё
.def BAM0=R0
.def BAM1=R1
.def BAM2=R2
.def BAM3=R3
.def BAM4=R4
.def BAM5=R5
.def BAM6=R6
.def BAM7=R7
.org 0
rjmp RESET ; Reset Handler
reti//rjmp EXT_INT0 ; IRQ0 Handler
reti//rjmp EXT_INT1 ; IRQ1 Handler
rjmp TIM2_COMP ; Timer2 Compare Handler
reti//rjmp TIM2_OVF ; Timer2 Overflow Handler
reti//rjmp TIM1_CAPT ; Timer1 Capture Handler
reti//rjmp TIM1_COMPA ; Timer1 CompareA Handler
reti//rjmp TIM1_COMPB ; Timer1 CompareB Handler
reti//rjmp TIM1_OVF ; Timer1 Overflow Handler
reti//rjmp TIM0_OVF ; Timer0 Overflow Handler
reti//rjmp SPI_STC ; SPI Transfer Complete Handler
reti//rjmp USART_RXC ; USART RX Complete Handler
reti//rjmp USART_UDRE ; UDR Empty Handler
reti//rjmp USART_TXC ; USART TX Complete Handler
reti//rjmp ADC ; ADC Conversion Complete Handler
reti//rjmp EE_RDY ; EEPROM Ready Handler
reti//rjmp ANA_COMP ; Analog Comparator Handler
reti//rjmp TWSI ; Two-wire Serial Interface Handler
reti//rjmp SPM_RDY ; Store Program Memory Ready Handler
TIM2_COMP:
in R17,OCR2 //канал 0
AND R17,BAM0
breq PC+2
sbi PORTD,0
brNE PC+2
cbi PORTD,0
in R17,OCR2 //канал 1
AND R17,BAM1
breq PC+2
sbi PORTD,1
brNE PC+2
cbi PORTD,1
in R17,OCR2 //канал 2
AND R17,BAM2
breq PC+2
sbi PORTD,2
brNE PC+2
cbi PORTD,2
in R17,OCR2 //канал 3
AND R17,BAM3
breq PC+2
sbi PORTD,3
brNE PC+2
cbi PORTD,3
in R17,OCR2 //канал 4
AND R17,BAM4
breq PC+2
sbi PORTD,4
brNE PC+2
cbi PORTD,4
in R17,OCR2 //канал 5
AND R17,BAM5
breq PC+2
sbi PORTD,5
brNE PC+2
cbi PORTD,5
in R17,OCR2 //канал 6
AND R17,BAM6
breq PC+2
sbi PORTD,6
brNE PC+2
cbi PORTD,6
in R17,OCR2 //канал 7
AND R17,BAM7
breq PC+2
sbi PORTD,7
brNE PC+2
cbi PORTD,7
in R17,OCR2 //сдвиг регистра сравнения
lsl R17
brne PC+2
ldi R17,0x01
out OCR2,R17
reti
RESET: //
cli
ldi R16,low(RAMEND) // указатель стека в конец памяти
out spl,R16
ldi R16,High(RAMEND)
out sph,R16
ldi R16,0x2A //значения каналов BAM
mov BAM0,R16
ldi R16,0x02
mov BAM1,R16
ldi R16,0x04
mov BAM2,R16
ldi R16,0x08
mov BAM3,R16
ldi R16,0x10
mov BAM4,R16
ldi R16,0x20
mov BAM5,R16
ldi R16,0x40
mov BAM6,R16
ldi R16,0x80
mov BAM7,R16
ldi R16,0 //Порт Д
out PORTD,r16
ldi R16,0xFF
out DDRD,R16
ldi R16,0x01 //регистр сравнения
out OCR2,R16
ldi R16,1<<PSR2 //сброс предделителя
out SFIOR,R16
ldi R16,1<<OCIE2 //прерывание сравнение
out TIMSK,R16
ldi R16, (1<<CS22)+(1<<CS21)+(1<<CS20)+(1<<WGM21)+(0<<WGM20) //источник тактирования
out TCCR2,R16
sei
loop:
rjmp loop
Нетути.СКАЗОЧНИК писал(а):В Меге8 че, нету регистра сравнения для таймера0?
А чего SREG и РОН не сохраняете?Код: Выделить всё
TIM2_COMP: in R17,OCR2 //канал 0 AND R17,BAM0 breq PC+2 sbi PORTD,0 brNE PC+2 cbi PORTD,0
http://embedders.org/blog/fk0/nuzhen-li ... lerom.htmlARV писал(а):чтобы реализовать многоканальный ШИМ на одном таймере, обычно вы заводите 8 переменных, .......
вот это сейчас к чему было процитировано?ILYAUL писал(а):http://embedders.org/blog/fk0/nuzhen-li ... lerom.htmlARV писал(а):чтобы реализовать многоканальный ШИМ на одном таймере, обычно вы заводите 8 переменных, .......