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

Program dekodujący kod BCD dla AVR

maanieek 14 Sty 2010 23:07 1421 0
REKLAMA
  • #1 7537318
    maanieek
    Poziom 11  
    Program dekodujący kod BCD.
    Ustaw port A jako wejściowy, port B jako wyjściowy. W pętli zmieniaj wartość dwucyfrowej liczby
    zapisanej w kodzie BCD na porcie A. Dekoduj liczbę na kod binarny. Wynik wystawiaj na port B
    co 1 sekundę.

    Zrobiłem coś takiego

    #define F_CPU 1000000UL  // 1 MHz
    #include<avr/io.h>
    #include <util/delay.h>
    
    licz_od_0_do_9() //początek pętli zliczającej od 0 do 9;
    {
    	unsigned char x; //definicja typu zmiennej x
    	for (x=0;x < 9;x++) //początek pętli for
    	{
    	PORTA += 1; //zwiększamy wartość PORTA o 1
    	bcd2bin(); //wywołujemy konwersję bcd2bin
    	}
    }
    
    bcd2bin()
    {
    	unsigned char s,t; //definicja typu zmiennych s,t
    	t = PORTA << 4; //przypisanie do zmiennej t wartości PORTA po przesunięciu o 4 bity w lewo
    	s = PORTA >> 4; //przypisanie do zmiennej s wartości PORTA po przesunięciu o 4 bity w prawo
    	_delay_ms(100); //opóźnienie programu o 100ms
    	PORTB = (s*10) + (t >> 4); //przypisanie do PORTB skonwertowanej wartości na bin
    }
    
    
    int main(void)
    {
    //ustaw PORTA jako wejściowy
    DDRA = 0xff;
    //ustaw PORTB jako wyjściowy
    DDRB = 0x00;
    
    
    unsigned char y,z; //definicja typu zmiennych y,z
    for (z=0;z<10; z++) //początek pętli zliczającej od 0 do 10;
    {
    	licz_od_0_do_9(); //wywołujemy zliczanie od 0 do 9
    	y = (PORTA >> 4) + 1; //przesunięcie bitowe na PORTA ze zwiększeniem wartości o 1 - wynik przypisany do zmiennej y
    	y =y << 4; //przesunięcie bitowe o 4 w lewo i przypisanie wyniku do zmiennej y
    	if (y<0x99)	PORTA = y; //sprawdzenie czy zliczanie się zakończyło, jeśli tak to wyjście z programu i koniec wystawiania wyniku na PORTA
    }
    PORTA , PORTB = 0x00; //zerowanie PORTA i PORTB
    return 0;
    }


    Jeśli macie pomysł na jakieś poprawki to chętnie skorzystam z pomocy.

    Proszę umieszczać kod w znacznikach [code]!
    Przeniosłem z Programowanie Poczatkujący.
    [Dr.Vee]
  • REKLAMA
REKLAMA