/* прерывание при переполнении таймера/счетчика 0 */
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
/* PB7=0, PB6=0, PB5=0, PB4=0, PB3=0, PB2=0, PB1=1, PB0=1 */
PORTB = 0b00000011; Не понял что обозначает эта строка
/* PD7=0, PD6=0, PD5=0, PD4=0, PD3=0, PD2=0, PD1=0, PD0=0 */
PORTD = 0b00000000;
Не понял что обозначает эта строка
}
/* прерывание при совпадении счетного регистра TCNT0 с регистром сравнения OCR0A таймера/счетчика 0 */
interrupt [TIM0_COMPA] void timer0_compa_isr(void)
{
/* PD7=0, PD6=1, PD5=1, PD4=1, PD3=1, PD2=1, PD1=1, PD0=1 */
PORTD = 0b01111111;
И здесь тоже не понял
}
/* прерывание при совпадении счетного регистра TCNT0 с регистром сравнения OCR0В таймера/счетчика 0 */
interrupt [TIM0_COMPB] void timer0_compb_isr(void)
{
/* PB7=0, PB6=0, PB5=0, PB4=0, PB3=1, PB2=1, PB1=0, PB0=0 */
PORTB = 0b00001100;
Ну и здесь тоже
}
void main(void)
{
/* все выводы порта B сконфигурировать как выходы */
DDRB = 0b11111111;
здесь все ясно
PORTB = 0b00000000;
/* все выводы порта D сконфигурировать как выходы */
DDRD = 0b11111111;
здесь тоже понятно
PORTD = 0b00000000;
/* Timer/Counter 0 Control Register A */
/* регистр управления таймером/счетчиком 0 А */
/* биты регистра:
COM0A1 COM0A0 COM0B1 COM0B0 Reserved Reserved WGM01 WGM00 */
TCCR0A = 0b00000000;
а вот здесь начанается труба
/* Timer/Counter 0 Control Register B */
/* регистр управления таймером/счетчиком 0 В */
/* биты регистра:
FOC0A FOC0B Reserved Reserved WGM02 CS02 CS01 CS00 */
TCCR0B = 0b00000011;
как и здесь
/* Timer/Counter 0 */
/* счётный регистр таймера/счетчика 0 */
TCNT0 = 0;
/* Output Compare Register А */
/* регистр сравнения таймера/счетчика 0 А */
OCR0A = 100;
/* Output Compare Register В */
/* регистр сравнения таймера/счетчика 0 В */
OCR0B = 200;
/* Timer/Counter Interrapt Mask Register */
/* регистр маски прерываний таймеров/счетчиков */
/* биты регистра:
TOIE1 OCIE1A OCIE1B Reserved ICIE1 OCIE0B TOIE0 OCIE0A */
TIMSK = 0b00000111;
и здесь
/* глобальное разрешение прерываний */
#asm("sei"
while (1)
{
/* *******************************************
Изменяя значение регистров сравнения можно менять значение ШИМ (PWM)
Так как таймер/счетчик 0 является восьмиразрядным, то значения регистров сравнения должны быть от 0 (0b00000000 или 0x00) до 255 (0b11111111 или 0xFF)
******************************************* */
OCR0A = 128;
понятно
/* *******************************************
ШИМ (PWM) на всех ножках порта D составляет около 50%
******************************************* */
OCR0B = 64;
/* *******************************************
ШИМ (PWM) на PB1 и PB0 составляет около 25%
ШИМ (PWM) на PB3 и PB2 составляет около 75%
******************************************* */
}
}