Skocz do zawartości

[C] ATmega16A i avr-gcc


Zolw2305

Pomocna odpowiedź

Witam, jakiś czas temu rozpocząłem kurs AVR-GCC umieszczony na diodzie i pojawił się problem, gdy z ATtiny2313 przeszedłem na ATmega16A. Program napisany w C, kompilator - AVR-GCC, programator - usbasp, programowanie flash za pomocą avrdude. Jest to prosty kalkulator realizujący operacje +,-,*,/,% na 4 bitowych liczbach ze znakiem. Wynik wyświetlany na 8 diodach podpiętych do portu A, przyciski wyboru operacji do portu B, liczby a i b wybierane za pomocą zwierania odpowiednich pinów portu D do VCC.

Kod źródłowy programu:

#include <avr/io.h>

int main(void)
{
signed char a,b;	//definicje zmiennych liczb 1 i 2

DDRA = 0xFF;		//PORTA jako wyjścia
PORTA = 0xFF;		//o stanie początkowym 1
DDRB = 0x00;		//PORTB jako wejścia
PORTB = 0x1F;		//PB0...4 pull-up
DDRD = 0x00;		//PORTD jako wejścia
PORTD = 0x00;		//o stanie początkowym 0

   while (1)
   {
       a = PIND & 0x0F;	//pierwsza liczba
	b = PIND >> 4;		//druga liczba

/* 4-bitowa liczba a jest rozszerzona do 8 bitów, aby w przypadku liczby
 ujemnej (bit 3 = 1), bity 4...7 również przyjęły wartość 1 */
	if (a & 0x08) a |= 0xF0;

/* Wybór operacji */
	switch (~PINB)
	{
		case 0x01:			//dodawanie
			PORTA = ~(a+b);
			break;

		case 0x02:			//odejmowanie
			POTRA = ~(a-b);
			break;

		case 0x04:			//mnożenie
			PORTA = ~(a*b);
			break;

		case 0x08:			//dzielenie
			PORTA = ~(a/b);
			break;

		case 0x10:			//reszta z dzielenia a/b
			PORTA = ~(a%b);
			break;

		default:
			PORTA = ~(0);
	}
   }
}

Przy kompilacji otrzymuję następujący błąd:

avr-gcc -I. -g -mmcu=atmega16 -Os -fpack-struct -fshort-enums -funsigned-bitfields -funsigned-char -Wall -Wstrict-prototypes -Wa,-ahlms=main.lst -c main.c -o main.o

 

main.c: In function 'main':

 

main.c:52:0 main.c:52: error: 'POTRA' undeclared (first use in this function)

 

main.c:52:0 main.c:52: error: (Each undeclared identifier is reported only once

 

main.c:52:0 main.c:52: error: for each function it appears in.)

 

make: *** [main.o] Error 1

Nie rozumiem czemu wywala PORTA undeclared?

Link do komentarza
Share on other sites

@MirekCz haha rzeczywiście... a ja tu szukam czy może ATmega16A ma jakieś inne sygnatury niż ATmega16 itp, a tu po prostu umiejętność pisania i czytania zawiodła 😋

Już wszystko działa 😉

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.