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

[AVR ATMEGA 8 C] Multipleksowanie, problem z inkrementacją

meninio 09 Lip 2009 21:56 1176 2
REKLAMA
  • #1 6760254
    meninio
    Poziom 10  
    Witam drogich forumowiczów.
    Mam takie pytanie: napisałem program do obsługi wyświetlacza dwucyfrowego w trybie multipleksowania. Chciałem teraz za pomocą dwóch switchów zwiększać (zmniejszać) wyświetlaną wartość. No i to mi właśnie nie działa (samo wyświetlanie działa).
    Oto kod:

    #define F_CPU 16000000L 
    #include <avr/io.h>
    #include <util/delay.h>
    #include <avr/interrupt.h>
    
    unsigned int znak[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
    int liczba=0;
    
    void wyswietl(int cyfra)
    {
    	PORTB=1;
    	PORTD=znak[cyfra/10];
    	_delay_ms(5);
    	PORTB=2;
    	PORTD=znak[cyfra%10];
    	_delay_ms(5);
    }
    
    
    SIGNAL (SIG_OVERFLOW0)
    {
    PORTC=1<<PC0;
    wyswietl(liczba);
    }
    
    int main(void)
    {
    	DDRD = 0xFF;
    	DDRB=0xFF;
    	DDRC=0x01;
    	PORTC=0x30;
    	
    	TCCR0=0X05;
        TIMSK = 0X01;
    	sei();
    	while(1) {
    		if (!(PINC & 0x20) && (liczba<99)) 
    			{
    			liczba++;
    			while(!(PINC & 0x20)) {}
    			}
    		if (!(PINC & 0x10) && (liczba>0)) 
    			{
    			liczba--;
    			while(!(PINC & 0x20)) {}
    			}
    	}
      return(0);
    }
    
    
    


    Wg mnie w procedura obsługi przerwania nie widzi zmian w zmiennej liczba (które to zmiany odbywają się w głównym programie). I właśnie nie wiem, jak to zrobić, żeby widziała. Pewnie oprze się coś o wskaźniki, które nie są moją mocną stroną. Macie na to jakąś radę, albo zgoła inny sposób na mój problem. Z góry dziękuję za wszelkie podpowiedzi.
  • REKLAMA
  • #2 6760634
    Brutus_gsm
    Poziom 25  
    Zmienna liczba musi być typu volatile, to tak na szybko. ;)

    Dodano po 13 [minuty]:

    No zrób jakieś opóźnienia, żeby wyeliminować drgania styków.
  • #3 6763081
    meninio
    Poziom 10  
    O dzięki ci dobry człowieku!!!

    Dodano po 3 [minuty]:

    Edit - przepraszam, ale nie chcąco zaraportowałem twojego posta, bo myślałem, że tam się punkty przekazuje.......
    Ale punkty i tak przekazałem, ale dopiero za drugim podejściem.
REKLAMA