Stefan_84
09.02.2006, 17:29
Guten Tag!
Letztes Jahr haben wir in der Schule die Theorie der µController gelernt, jetzt möchte ich das Theoretische mal in die Praxis umwandeln.
Hab mir einen ATmega8515 besorgt, da wir im Unterricht hauptsächlich über diesen µC gesprochen haben.
Dann hab ich mir noch ein Adapterkabel zum übertragen des Programms von der seriellen Schnittstelle zum µC gebaut.
An den µC hab ich an XTAL1 und XTAL2 einen 4MHz Quartz mit 2 27pF Kondensatoren angschloßen. Der Reset Pin ist über einen 10k Widerstand mit VCC verbunden.
Ich hab ein Programm in AVRStudio getippt, das alle Ports auf 1 schalten soll. Im Studio kann man es ja testen und da funktioniert es.
Dann lad ich das Programm mit Ponyprog zum µC. Das funktioniert auch ohne Fehler.
Nun sollte der µC das doch machen, oder? Macht er aber nicht. Alles bleibt ausgeschalten. Kann mir vielleicht jemand einen Tip geben was ich falsch gemacht haben könnte, oder was ich noch vergessen habe? Oder muss ich den irgendwie einschalten?
Hier der Code meines Programms:
;************************************************* ****************************
;*
;* DATEINAME : Led.asm
;* TITEL :
;* DATUM : 9.2.06
;* AUTOR : STK
;* VERSION : 1.0
;*
;*
;************************************************* ****************************
.CSEG
.org 0x0000
.include "m8515def.inc"
rjmp MAIN ; Springe um den Prozedurcode herum zum Start des Hauptprogrammes
rjmp UnusedInt_ISR
rjmp UnusedInt_ISR
rjmp UnusedInt_ISR
rjmp UnusedInt_ISR ;Externes Interrupt-Ereignis zum Stoppen der Zeit
rjmp UnusedInt_ISR
rjmp UnusedInt_ISR
rjmp UnusedInt_ISR
rjmp UnusedInt_ISR
rjmp UnusedInt_ISR
rjmp UnusedInt_ISR
rjmp UnusedInt_ISR
rjmp UnusedInt_ISR
UnusedInt_ISR: reti
;--KONSTANTENDEKLARATION---------------------------------------------
; status register bits
.equ CarryFlag = 0
.equ ZeroFlag = 1
.equ NegativeFlag = 2
.equ TwosFlag = 3
.equ SignFlag = 4
.equ HalfCarryFlag = 5
.equ TransferFlag = 6
.equ GlobalFlag = 7
;--VARIABLENDEKLARATION----------------------------------------
.def work = R16 ;Temp. Variable
;--Unterprogramme-----------------------------------------------------
init:
ser work
out ddra, work ;Port A, B, C,
out ddrb, work ;und D als Ausgang
out ddrc, work ;definieren
out ddrd, work
rjmp main_loop
;--HAUPTPROGRAMM-----------------------------------------------------
.CSEG
MAIN:
;Stackpointer initialisieren
ldi work,low (RAMEND) ; RAMEND ist eine im include file vorgegebene Konstante,
out SPL,work
ldi work, high(RAMEND)
out SPH,work
rjmp init
Main_loop:
ldi work, 0b11111111
out PortA, work;
out PortB, work;
out PortC, work;
out PortD, work;
rjmp Main_loop;
Findet da jemand einen Fehler?
Danke
MFG Stefan
Letztes Jahr haben wir in der Schule die Theorie der µController gelernt, jetzt möchte ich das Theoretische mal in die Praxis umwandeln.
Hab mir einen ATmega8515 besorgt, da wir im Unterricht hauptsächlich über diesen µC gesprochen haben.
Dann hab ich mir noch ein Adapterkabel zum übertragen des Programms von der seriellen Schnittstelle zum µC gebaut.
An den µC hab ich an XTAL1 und XTAL2 einen 4MHz Quartz mit 2 27pF Kondensatoren angschloßen. Der Reset Pin ist über einen 10k Widerstand mit VCC verbunden.
Ich hab ein Programm in AVRStudio getippt, das alle Ports auf 1 schalten soll. Im Studio kann man es ja testen und da funktioniert es.
Dann lad ich das Programm mit Ponyprog zum µC. Das funktioniert auch ohne Fehler.
Nun sollte der µC das doch machen, oder? Macht er aber nicht. Alles bleibt ausgeschalten. Kann mir vielleicht jemand einen Tip geben was ich falsch gemacht haben könnte, oder was ich noch vergessen habe? Oder muss ich den irgendwie einschalten?
Hier der Code meines Programms:
;************************************************* ****************************
;*
;* DATEINAME : Led.asm
;* TITEL :
;* DATUM : 9.2.06
;* AUTOR : STK
;* VERSION : 1.0
;*
;*
;************************************************* ****************************
.CSEG
.org 0x0000
.include "m8515def.inc"
rjmp MAIN ; Springe um den Prozedurcode herum zum Start des Hauptprogrammes
rjmp UnusedInt_ISR
rjmp UnusedInt_ISR
rjmp UnusedInt_ISR
rjmp UnusedInt_ISR ;Externes Interrupt-Ereignis zum Stoppen der Zeit
rjmp UnusedInt_ISR
rjmp UnusedInt_ISR
rjmp UnusedInt_ISR
rjmp UnusedInt_ISR
rjmp UnusedInt_ISR
rjmp UnusedInt_ISR
rjmp UnusedInt_ISR
rjmp UnusedInt_ISR
UnusedInt_ISR: reti
;--KONSTANTENDEKLARATION---------------------------------------------
; status register bits
.equ CarryFlag = 0
.equ ZeroFlag = 1
.equ NegativeFlag = 2
.equ TwosFlag = 3
.equ SignFlag = 4
.equ HalfCarryFlag = 5
.equ TransferFlag = 6
.equ GlobalFlag = 7
;--VARIABLENDEKLARATION----------------------------------------
.def work = R16 ;Temp. Variable
;--Unterprogramme-----------------------------------------------------
init:
ser work
out ddra, work ;Port A, B, C,
out ddrb, work ;und D als Ausgang
out ddrc, work ;definieren
out ddrd, work
rjmp main_loop
;--HAUPTPROGRAMM-----------------------------------------------------
.CSEG
MAIN:
;Stackpointer initialisieren
ldi work,low (RAMEND) ; RAMEND ist eine im include file vorgegebene Konstante,
out SPL,work
ldi work, high(RAMEND)
out SPH,work
rjmp init
Main_loop:
ldi work, 0b11111111
out PortA, work;
out PortB, work;
out PortC, work;
out PortD, work;
rjmp Main_loop;
Findet da jemand einen Fehler?
Danke
MFG Stefan