STK500 Testprog funzt in C funzt nicht?

Gast #633838
Lesenswert?

Hallo ich hab ein komisches Problem, vielleicht könnt ihr helfen.

habe mir ein STK500 zugelegt und gleich mal mit GCC das Testprogramm,
welches im User Guide in Assembler geschrieen steht in C geschrieben und 
im AVR-Studio simuliert. dann die HEX-Datei in den ATMega16 geschrieben. 
Aber nix tut sich ... absolut nichts. Ich finde einfach nicht den 
Fehler.

Also wie schon gesagt ich verwende einen ATmega16 mit internen 
RC-Oszillator
mit 1MHz.

zur Kontrolle hatte ich das Orginal-Programm-Hexfile von Atmel 
reingeschrieben und alles funzte auf anhieb.

Könnt ihr mir helfen?!
Angehängte Dateien:
#634071
Lesenswert?

Du musst anstelle von KEYPORT natürlich KEYPIN einlesen. Sonst 
funktioniert gar nichts.

Eine andere Sache ist, dass das C-Programm etwas anderes macht als das 
Assembler-Programm. Im Assembler-Programm werden die Bits vom Port 
einzeln abgefragt, während das C-Programm den gesamten Port auf einen 
bestimmten Zustand hin abfragt.
1
sbis PIND, 0x00
fragt ab, ob das Bit Nr. 0 im Portregister gesetzt ist, während die 
Zustände aller anderen Bits im Portregister ignoriert werden.
1
if(PINx == 0b11111110){}
allerdings fragt ab, ob das Bit Nr. 0 "0" ist und alle anderen Bits im 
Register "1". Das kann nur funktionieren, wenn immer nur ein Taster 
betätigt wird. Mehrere Taster gleichzeitig gehen schief.
1
if(!(PINx & (1 << 0))){}
macht das, was im Assembler-Code vorgesehen ist. Ansonsten schau bitte 
mal ins AVR-GCC-Tutorial.
Gast #634144
Lesenswert?

Hallo Johannes,

super Hinweise von Dir. Werd ich heut nach der Arbeit gleich mal 
ausprobieren. Als du das mit den PINx abfragen erklärt hast fiel
mir es wie Schuppen von den Augen.

Also ich meld mich was draus wird.
Danke nochmals.

best regard
littlecb
#634646
Lesenswert?

littlecb wrote:
> hattest den absoluten Volltreffer! *g*
Ach was... Hattest Du daran gezweifelt? Hinfort mit Dir, Ungläubiger:-!

Ist doch hoffentlich klar, dass es mit PORTx nicht klappen KANN, weil 
sich das Register ohne Eingriff des Programms selbst nicht ändern kann. 
Nur PINx spiegelt wider, was tatsächlich an den Portpins los ist.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren