logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Atmega8: Timer0 nie działa po włączeniu Timer2 - jak to naprawić?

Śledziu 04 Cze 2006 10:28 1959 2
REKLAMA
  • #1 2695551
    Śledziu
    Poziom 12  
    Posty: 107
    Ocena: 9
    Witam

    mam taki oto problem
    uzywam w programie dwoch tiemrow 8 bitowych, timer0 i timer2,
    wszytko bylo by ok gdyby nie fakt ze po zalaczeniu timera2, czesc prgramu obslugiwana przez timer0 przestaje sie wykonywac, (program nie wchodzi do oblugi przerwania zwiazanym z tiemrem0).
    i teraz pytanie jak pozbyc sie tego problemu?

    
    SIGNAL (SIG_OVERFLOW0) 
    {
    
    	 odliczanie++; 
    	 TCNT0=157;			
    	 
    		if(odliczanie==5)				//200=5s 10s dla 400 przy 1MHz
    		{
    		 PORTB^=0x01;						//gora
    		 _delay_loop_2(6250);		//25ms
    		 PORTB^=0x01;						//DOL
    		 _delay_loop_2(6250);		//25ms
    		 PORTD^=0x80;						//gora
    		 _delay_loop_2(6250);		//25ms
    		 PORTD^=0x80;						//dol
    		 odliczanie=0;
    		} 
    }
    
    SIGNAL (SIG_OVERFLOW2) 
    {
    
    	 odliczanie1++; 
    	 TCNT2=157;			
    	 
    		if(odliczanie1==3)				//10s dla 400 przy 1MHz
    		{
    			 TIMSK&=~(1<<TOIE2);	//ZEZWOLANIE NA PRZERWANIE OD T2
    			 odliczanie1=0;
    			 PORTC|=0X10;
    		} 
    }
    
    int main (void)
    {
    //======== Obsluga timera0 ======//
    	 TIMSK=1<<TOIE0;	//ZEZWOLANIE NA PRZERWANIE OD T0
    	 TCCR0=4; 			//presklaer dla licznika 255
    	 TCNT0=157;			// odliczane 25ms
    	 
    //======== Obsluga timera2 ======//
    	// TIMSK=1<<TOIE2;	//ZEZWOLANIE NA PRZERWANIE OD T0
    	 TCCR2=6; 			//presklaer dla licznika 255
    	 TCNT2=157;			// odliczane 25ms
    sei();
    while(1)
    	{	
    	 AD();   //obsluga ADC
    	  
    		if(ADC>630)
    		{
    		 PORTC=0X00;		//wlacza,wylacza diode 	
    		 TIMSK=1<<TOIE2;	//ZEZWOLANIE NA PRZERWANIE OD T0
    		}
    	}
    }
    


    pozdrawiam
  • REKLAMA
  • Pomocny post
    #2 2695752
    zerpo
    Poziom 22  
    Posty: 463
    Pomógł: 50
    Ocena: 134
    while(1)
    {
    AD(); //obsluga ADC

    if(ADC>630)
    {
    PORTC=0X00; //wlacza,wylacza diode
    TIMSK |=1<<TOIE2; //ZEZWOLANIE NA PRZERWANIE OD T0
    }
    }
    }

    Moze tak?
REKLAMA