Hallo zusammen, ich hoffe ihr könnt mir helfen.
Ich fange gerade an mich mit den AVR's "anzufreunden" und hab nachfolgendes Programm geschrieben (Der meiste Teil stammt aus dem Buch AVR-RISC Mikrocontroller). Eigentlich soll es mit 2Hz ein Wechselblinklicht sein. Im Simulator funktioniert das ganze auch, aber wenn ich das Prog im Chip habe passiert rein gar nix, ausser das die LED an Port PB1 leuchtet.
Das ganze stimmt mich ziemlich ratlos und für eine kleine Hilfe wäre ich sehr dankbar.
Code:.INCLUDE "C:\ATMEL\ASM\APPNOTES\2313def.inc" .def Stat = R15 ;Zwischenspeicher für SREG .def Icnt = R16 ;Interruptzähler .def Blink = R17 ;Statusregister Blinken .def Temp = R18 ;Arbeitsregister Blinkroutine .def Work = R19 ;Arbeitsregister Hauptprogramm .equ Time = 80000 / 1024 ;Zählerwert für Interrupt rjmp Main ;nach Reset zum Hauptprogramm reti ;Externer Interrupt 0 nicht verwendet reti ;Externer Interrupt 1 nicht verwendet reti ;T/C1 Capture Interrupt nicht verwendet reti ;T/C1 Compare A Interrupt nicht verwendet reti ;T/C1 Compare B Interrupt nicht verwendet reti ;T/C1 Überlauf Interrupt nicht verwendet ;= Blinkroutine Timer0: ;Timer0 Überlauf Interrupt in Stat, SREG ;Flags des Hauptprogramms retten dec Icnt ;Zähler -1 breq D1 ;Sprung wenn gleich 0 rjmp IntEnd ;zum Interrupt Ende D1: ldi Icnt, 25 ;Programmzähler neu laden sbrc Blink, 0 ;welche LED ist gerade an? rjmp Led1 ldi Blink, 0b00000001 rjmp IntEnd Led1: ldi Blink, 0b00000010 IntEnd: out PORTB, Blink ;LED Stellung ausgeben ldi Temp, -Time out TCNT0, Temp ;T/C0 nachladen out SREG, Stat ;Flags des Hauptprogramms wiederherstellen reti ;= Hauptprogramm Main: ldi Work, High(Ramend) out sph, Work ldi Work, Low(Ramend) out spl, Work ;Stack initialisiert ldi Work, $FF out DDRB, Work ;alle Bits von Port B sind Ausgang ldi Blink, 0b00000001 out PortB, Blink ;LED1 einschalten ldi Icnt, 25 ;Programmzähler setzen ldi Work, $02 ;der Interrupt bei T/C0 Überlauf out TIMSK, Work ;wird durch TOIE0 freigegeben ldi Work, -Time ;Startwert für Timer0 out TCNT0, Work ;ausgeben ldi Work, $05 ;kein Vorteiler für T/C0 out TCCR0, Work ;ausgeben und damit T/C0 starten sei ;Interrupts global freigeben Wait: ;Warteschleife nop rjmp Wait







Zitieren

Lesezeichen