Psst.. new poll here.
Psst.. new forums here.
Microsoft is blocking us again (TY IP Reputation!) so just use oauth login instead. :)
Paste
Pasted as C by hesperus ( 16 years ago )
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/sleep.h>
#include <util/delay.h>
//#define F_CPU 8000000
int kierunek=10;
int pwm=512;
int main (void)
{
DDRC= 0xFF; //Ustawienie portu C jako wyjscia
PORTC=0;
DDRB=0xFF; //ustawienie portu B jako wyjscia
DDRD=0; //ustawienie portu D jako wejscia
DDRD|=_BV(0)|_BV(1); //ustawienie 2 pierwszych bitow portu D jako wyjscia
PORTD=0xFC; //wlaczenie wew. rezystorow podciagajacych
EIMSK |= _BV(INT0)|_BV(INT1); //wlaczenie przerwan zewnetrznych
EICRA |= _BV(ISC00)|_BV(ISC10); //ustawienie przerwan na oba zbocza
TCCR1A = _BV(COM1B1)|_BV(COM1A1)|_BV(COM1A0)|_BV(WGM10)|_BV(WGM11); // ustawienie licznika 1 na fast PWM 10bit, z odp. zmiana wyjsc portu B
TCCR1B = _BV(WGM12)|_BV(CS11)|_BV(CS10); // prescaler zegara clk_io/64
TIMSK1|=_BV(TOIE1); //wlaczenie przerwania licznika 1 po przepelnieniu
OCR1A=5;
sei(); //wlaczenie przerwan
while(1)
{
set_sleep_mode(SLEEP_MODE_IDLE); //przygotowanie do wejscia w stan uspienie IDLE
sleep_mode(); //wejscie w stan uspienia
};
}
ISR(SIG_INTERRUPT0) //obsluga przerwania zewn. 0
{
PORTC&=~(_BV(5)|_BV(4));
if(bit_is_set(PIND,2)) PORTC|=_BV(5);
else PORTC|=_BV(4);
PORTC^=_BV(2);
}
ISR(SIG_INTERRUPT1) //obsluga przerwania zewn. 1
{
PORTD&=~(_BV(0)|_BV(1));
if(bit_is_set(PIND,3)) PORTD|=_BV(1);
else PORTD|=_BV(0);
}
ISR(SIG_OVERFLOW1) //obsluga przepelnienia licznika 1
{
if(pwm>1000||pwm<=20) kierunek=-kierunek;
pwm+=kierunek;
OCR1A=pwm;
OCR1B=pwm;
}
Revise this Paste
Parent: 17151