Показать сообщение отдельно
Старый 31.05.2016, 16:28   #7 (permalink)
Счастье
Не очень хороший человек
 
Аватар для Счастье
 
Регистрация: 01.12.2012
Сообщений: 6,155
Записей в дневнике: 18
Сказал(а) спасибо: 1,305
Поблагодарили 755 раз(а) в 231 сообщениях
Репутация: 98885
По умолчанию

Я добавила пару строк и для порта С и моргает сразу несколько, на старенькой отладочной платке проверила, спасиибо!)))
 
Цитата:
// winavr

#define F_CPU 8000000UL

#include <avr/io.h>
#include <avr/delay.h>
#include <avr/interrupt.h>


volatile unsigned char pwm; // шим
volatile unsigned char pwm_counter; // яркость
unsigned char rev; // переключение режимов


int main(void)
{

DDRB = 0x01;
DDRC = 0b00111111;

TCCR0 |= (0<<CS02)|(1<<CS01)|(0<<CS00); // настройка тактирования таймера
TIMSK |= (1<<TOIE0); // настройка прерывания по переполнению
sei(); // включить глобальные прерывания


while(1)
{
// плавное мигание светодиодом
switch(rev)
{
case 0: // плавное разгорание
pwm_counter++;
if(pwm_counter == 255)
{
rev = 1;
};_delay_ms(4); // время разгорания
break;
case 1: // плавное затухание
pwm_counter--;
if(pwm_counter == 0)
{
rev = 0;
};_delay_ms(6); // время затухания
break;
}
}
}

SIGNAL(TIMER0_OVF_vect)
{
TCNT0 = 200; // частота шим

// программный ШИМ
if(pwm++ < pwm_counter)
{
PORTB|=_BV(0);
PORTC|=_BV(0);
PORTC|=_BV(1);
PORTC|=_BV(2);
PORTC|=_BV(3);
PORTC|=_BV(4);
PORTC|=_BV(5); // зажечь светодиод
}else{
PORTB&=~_BV(0);
PORTC&=~_BV(0);
PORTC&=~_BV(1);
PORTC&=~_BV(2);
PORTC&=~_BV(3);
PORTC&=~_BV(4);
PORTC&=~_BV(5);// погасить светодиод
}


}
Как индус, давно не практиковалась))) Исправлюсь)))
__________________
Все будет хорошо.
Счастье вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070