Pierwsze programy w C

To forum jest dla wszystkich pasjonatów mikrokontrolerów AVR Atmela. Wymiana doświadczeń i pomoc dla początkujących w pisaniu programów zarówno w C, Asemblerze jak i BASCOM. Zapraszam znawców tematu, aby pomogli wszystkim początkującym!
Awatar użytkownika
grysek67
Użytkownik
Posty: 315
Rejestracja: 27 cze 2007, 6:34
Lokalizacja: Limanowa
Kontakt:

Post autor: grysek67 » 13 sie 2008, 16:43

Laik pisze:Rozumiem tak: rejestr DDRB ustala jakie porty podpiąć do masy czy do plusa a PORTB ustala to dobrze rozumiem ?
DDRB ustala jakie piny portu mają byc wyjsciami a jakie wejsciami (255 - wszystkie wyjscia) a PORTB ustawia stany logiczne na porcie B

*jesli cos zle napisałem to wybaczcie bo ja tez jestem początkujący w C

Laik
Użytkownik
Posty: 242
Rejestracja: 21 maja 2007, 19:19
Lokalizacja: z nienacka

Post autor: Laik » 13 sie 2008, 17:26

wiesz moze co jest zle w moim programie ?

snow
Użytkownik
Posty: 794
Rejestracja: 16 sty 2007, 3:44
Lokalizacja: lubelskie
Kontakt:

Post autor: snow » 13 sie 2008, 18:32

tablice powinieneś zadeklarować:

Kod: Zaznacz cały

char tablica[10]={element0,element1,....,element9}
PORTB ustala stan na wyjściu czyli czy jest podciągnięty do plusa czy nie, DDRB jedynie definiuje ktory pin jest wejściem a który wyjściem.

spark
Użytkownik
Posty: 412
Rejestracja: 25 lis 2004, 15:50
Lokalizacja: Wrocław

Post autor: spark » 13 sie 2008, 18:33

Błędy widoczne na pierwszy rzut oka:

[1] Powtarza się sytuacja z define tj. poprzednio. Znowu będą dwa średniki w inicjacji kierunku działania portów.
[2] (mało istotne) Nie wykorzystujesz frazy:

Kod: Zaznacz cały

#define _BUZ DDRD = 0b100000;
w programie więc jest zbędna - usuwamy.
[3] Dobry nawyk - inicjacja portów przed deklaracją zmiennych... chyba że znajdują się poza funkcją main.

Tak poprawiony program:

Kod: Zaznacz cały

#include <avr/io.h>

int main(void)
{

        DDRB = 0b0000000;     // ustawiony cały port B jako wejście
        DDRD = 0b1001111;     // bity 5 i 6 jako wejście reszta wyjście
        PORTB = 0b1111111;    // podciągnięcie wejścia do plusa zasilania
        PORTD = 0b1111111;    // -||-

        int show[10];
   
        show[1] = 0b0000110;
        show[2] = 0b1011011;
        show[3] = 0b1001111;
        show[4] = 0b1100110;
        show[5] = 0b1101101;
        show[6] = 0b1111101;
        show[7] = 0b0000111;
        show[8] = 0b1111111;
        show[9] = 0b1101111;
        show[0] = 0b0111111;

    for(;;)
    {
    }
    
    return(0);
}
I teraz pytanie do Ciebie, co chcesz osiągnąć? Tzn. co ten program ma robić? Jakim portom przypisujesz zadanie sterowania wyświetlaczem? Jest to wys ze wspólną anodą czy katodą?

[ Dodano: 2008-08-13, 19:35 ]
snow pisze:tablice powinieneś zadeklarować:

Kod: Zaznacz cały

char tablica[10]={element0,element1,....,element9}
PORTB ustala stan na wyjściu czyli czy jest podciągnięty do plusa czy nie, DDRB jedynie definiuje ktory pin jest wejściem a który wyjściem.
jest zadeklarowana w funkcji main

ODPOWIEDZ