Hallo Leute,
ich Versuche mich gerade in Assembler reinzufuchsen.
Wenn ich das Folgende Programm simulieren möchte, kommt immer zweimal
die oben genannte Fehlermeldung. Zwischen den beiden Fehlern erscheint
die Warnung "AVR Simulator: Invalid opcode 0xffff at address 0x000035
".
Im weiteren Verlauf lässt sich der Code jedoch simulieren.
1
.include "m8def.inc"
2
3
.def tmp = r16
4
.def spannung = r17
5
.def timer0 = r18
6
7
.org 0x000
8
rjmp main ; springe zum Hauptprogramm
9
.org OVF0addr
10
rjmp timer0_overflow ; Timer Interrupt
11
12
13
14
main:
15
ldi tmp,LOW(RAMEND) ; Stackpointer setzen
16
out SPL,tmp
17
ldi tmp,HIGH(RAMEND)
18
out SPH,tmp
19
20
ldi tmp,0xff
21
out DDRB,tmp ; PORTB ist Ausgang, nur PB0 wird benutzt
22
23
ldi tmp,0b011000000
24
out admux,tmp ; 1. Steuerungregister für ADC
25
26
ldi tmp,0b11111110
27
out adcsra,tmp ; 2. Steuerungsregister für ADC
28
29
ldi tmp,0b00000001
30
out TCCR0,tmp
31
32
ldi tmp,0b00000001
33
out TIMSK,tmp
34
35
sei
36
37
loop:
38
in spannung,adch ; High Byte in Register Spannung einlesen
39
cpi spannung,50 ; Spannung vergleichen
40
41
brsh anschalten ; je nach dem anschalten oder ausschalten
NEIN, ich bin doch ein Depp!!!!!!
Ich hab einen Fehler gesehen, wo keiner ist. Ich habe die Meldung falsch
interpretiert, sie entstammt von einer früheren Simulation und war noch
im Message Fenster sichtbar.
Der Code da oben sollte für den ATmega8 fehlerfrei funktionieren.
Danke dir trotzdem Spess
Nachtrag:
Der Code funktioniert doch nicht fehlerfrei, die beschriebene
Fehlermeldung tritt nach ca. 400.000 Zyklen auf.
Aber das sichern von SREG mit:
Robert schrieb:> Der Code funktioniert doch nicht fehlerfrei, die beschriebene> Fehlermeldung tritt nach ca. 400.000 Zyklen auf.
Liegt daran, dass du den ADC-Interrupt aktivierst.
Na die Interrupt Tabelle ist doch ganz oben?! (Sorry, bin blutiger
Anfänger)
@Stefan: Ja genau, das ADIE Bit im Register ADCSRA war es!! :-)
Das heißt also, dass der ADC um die 800 Zyklen braucht, bis er eine
Messung abgeschlossen hat??? (nach 800 Zyklen, gibts den ersten
Interrupt aufgrund des ADC)
Grüße