Gast
#295
Hallo, ich habe einige unerklärliche Schwierigkeiten mit dem AVR90LS4433. Eine Simulation mit dem AVR Studio ergab keine Lösung. Das angehängte Programm führt nach dem Programmieren des AVRs zu keiner vernünftigen Reaktion. Wird aber die Zeile mit dem Befehl "rcall wait_proc" entfernt und durch den unter diesem Label stehende Code ersetzt, dann funktioniert das Programm ohne Probleme. Wie ist das zu erklären ? Ist bei Aufrufen von Unterprogrammen irgend etwas spezielles zu beachten ? Danke für jede Hilfe Jürgen ---------------------------------- ;*** Hochzählen/blinken von Port D *** .nolist .include "4433def.inc" .list .def temp = r16 .def count = r17 .def count2 = r18 ;***** Interrupt vector table rjmp RESET ; Reset handle reti ; External Interrupt0 handle reti ; Overflow0 Interrupt handle reti ; Analog Comparator Int. handle ;***** Main RESET: ldi temp, $FF out DDRD,temp ; PORTD = all outputs ldi count,$FF ; Zählregister laden loop: out PORTD,count ; Zählregister auf Ausgang rcall wait_proc dec count ; Zählregister für Portausgabe dekrementieren rjmp loop ; Repeat forever wait_proc: ldi count2, $FF ; Zähler für Warteschleife 2 wait2: ldi temp, $FF ; Zähler für Warteschleife 1 wait: dec temp ; Zähler dekrementieren cpi temp, 0 ; Zählerstand mit 0 vergleichen brne wait ; Falls nicht 0, dann weiter abziehen dec count2 ; Zählerstand 2 dekrementieren cpi count2, 0 ; Zählerstand 2 mit 0 vergleichen brne wait2 ; Falls nicht 0 weiter abziehen ret