- LiFePO4 Speicher Test         
Ergebnis 1 bis 4 von 4

Thema: Hilfe beim programmieren von ATmega8515

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    29.01.2006
    Beiträge
    21

    Hilfe beim programmieren von ATmega8515

    Anzeige

    Praxistest und DIY Projekte
    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:
    Code:
    ;*****************************************************************************
    ;* 
    ;* 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

  2. #2
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    08.02.2005
    Ort
    Freiburg
    Alter
    35
    Beiträge
    602
    Hi,

    sei mir nicht böse, aber das ist der unstrukturiertester Code den ich bisher gesehen hab

    Definitionen kommen normalerweise imer als erstes und die ganzen unterprogramme als letztes.

    Mich wundert es echt das der Assembler das so angenommen hat...

    Ich hab dir das mal schnell neu zusammen kopiert:

    Code:
    ;*****************************************************************************
    ;*
    ;* DATEINAME   : Led.asm
    ;* TITEL   :
    ;* DATUM   : 9.2.06
    ;* AUTOR   : STK
    ;* VERSION   : 1.0
    ;*
    ;*
    ;*****************************************************************************
    
    .include "m8515def.inc"
    
    ;--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
    
    
    
    
    
    
    
    .CSEG            
    .org 0x0000       
    
    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
    
     
    
    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; 
    
    
    
    ;--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-----------------------------------------------------
    aber aller anfang ist schwer

    machs doch einfach so:

    Code:
    .include "m8515def.inc"
    
    .def temp, r16
    
    
    
    
    ldi temp, 0xff
    
    out DDRa, temp
    out DDRb, temp
    out DDRC, temp
    out DDRd, temp
    
    
    main:
    ldi temp, 0b11111111
    out PortA, temp
    out PortB, temp
    out PortC, temp
    out PortD, temp
    
    ende:
    
    rjmp ende
    Das ist jetzt natürlich nur in der schnelle geschriebn und lässt sich noch anpassen, sollte aber funktionieren.

    Gruß,
    Mehto
    -

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    29.01.2006
    Beiträge
    21
    Das ging jetzt aber schnell.
    Werd gleich versuchen ob es damit funktioniert.
    Die Struktur wurde mir so letztes Jahr in der Schule beigebracht. Wir haben den Code leider nie in einen µC geschrieben.
    Dachte immer "der Lehrer hat immer Recht", aber das gilt wohl nicht in der Praxis. Aber ich lerne gerne was dazu.

    Danke
    MFG Stefan

  4. #4
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    11.09.2004
    Ort
    Düsseldorf
    Beiträge
    3.948
    Ja,die Lehrer meinen vieleicht das se immer Recht haben aber meist haben se selber keinen Dunst was se sich da zusammenstricken da das Lehrprogramm fpr Lehrkräfte die reinste Katastrophe ist.

    Hab also Mitleid mit ihm "denn sie wissen nicht was sie tun"
    Gruß
    Ratber

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Labornetzteil AliExpress