Welcome, guest! Login / Register - Why register?
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
Your Name: Code Language: