C Progamm funktioniert nicht

OP #2779503
Lesenswert?

Hallo ,
ich bin in den Anfängen brauche die einfachsten Ünterstüzungen.
Mein Problem:
Ich lade aus dem Programm Myavr "LED on" und brenne in das 
Microcontroller ATmega8 in C. Es funktioniert nicht.
Hier das Programm:
//----------------------------------------------------------------------
// Titel       : myAVR Beispiel "LED an" für den ATmega8/48/88/168
//----------------------------------------------------------------------
// Funktion    : Schaltet alle 3 LEDs an
// Schaltung   : PortB.0-2 an LEDs
//----------------------------------------------------------------------
// Prozessor   :
// Takt       : 3.6864 MHz
// Sprache     : C
// Datum       : 02.12.2005
// Version     : 1.3
// Autor       : Dipl. Ing. Päd. Alexander Huwaldt
// Programmer  : ...
// Port      : ...
//----------------------------------------------------------------------
#define   F_CPU 3686400  // Taktfrequenz des myAVR-Boards
#include  <avr\io.h>    // AVR Register und Konstantendefinitionen
//----------------------------------------------------------------------
main ()
{
  DDRB=0xFF;       //PortB auf Ausgang konfigurieren
  do
  {
    PORTB=0xFF;   // PortB High, LEDs on
  }
  while (true);    // Mainloop
}
//----------------------------------------------------------------------

In Assembler funktioniert das ganze einwandfrei.

Danke Dursun
#2779819
Lesenswert?

Warum ignorierst du alle Lösungsvorschläge und gehst weiter auf dein 
Programm ein? Das funktioniert nicht, das ist halt falsch und wieso, 
wurde hier bereits erwähnt. (true ist zum Beispiel ist dort nirgends 
definiert). Probiere doch mal die anderen vorgeschlagenen Programme und 
schau dir C-Tutorials an.
#2779821
Lesenswert?

> Ans Ende gehört ein return 0,
> das signalisiert ein Beenden ohne Fehler. Auch wenn das nie erreicht
> wird. return 1 wäre ein Fehler.

Ja, ok.
Das ist jetzt aber erst mal nicht mehr relevant.
Wird dieses Pgm für einen Mega8 compiliert, gelinkt und aufs Board 
gebrannt, müssen die Pins am PORTB alle auf 1 gehen.
#2779830
Lesenswert?

Peter K. schrieb:
> cyblord ---- schrieb:
>> Ja man sieht schon du bist der Checker. Ans Ende gehört ein return 0,
>> das signalisiert ein Beenden ohne Fehler. Auch wenn das nie erreicht
>> wird. return 1 wäre ein Fehler.
>>
>> gruß cyblord
>
> Aha, gruess mal meinen Bekannten von Atmel - das ist ein
> Originalquelltext von ihm.

Falsch bleibt falsch. Und wenn es der Papst geschrieben hätte.
#2779835
Lesenswert?

cyblord ---- schrieb:
> Peter K. schrieb:
>> cyblord ---- schrieb:
>>> Ja man sieht schon du bist der Checker. Ans Ende gehört ein return 0,
>>> das signalisiert ein Beenden ohne Fehler. Auch wenn das nie erreicht
>>> wird. return 1 wäre ein Fehler.
>>>
>>> gruß cyblord
>>
>> Aha, gruess mal meinen Bekannten von Atmel - das ist ein
>> Originalquelltext von ihm.
>
> Falsch bleibt falsch. Und wenn es der Papst geschrieben hätte.

Ist jetzt auch egal.
Persönliche Seite #2779839
Lesenswert?

cyblord ---- schrieb:
> Ja man sieht schon du bist der Checker. Ans Ende gehört ein return 0,
> das signalisiert ein Beenden ohne Fehler. Auch wenn das nie erreicht
> wird. return 1 wäre ein Fehler.

Das ist hier vollkommen irrelevant. Und der Laufzeitumgebung auf dem AVR 
ist das auch noch vollkommen wurscht.

Interessant ist die Schaltung, d.h. wie die LEDs mit den Portleitungen 
von PortB verbunden sind.
#2779844
Lesenswert?

cyblord ---- schrieb:
> Trotzdem wäre ein Blink-Programm fürs testen besser. Wenn die LED nach
> VCC geschaltet ist, sieht er nix. Ein Blinken wäre eindeutig.

Dann soll ers so machen.
1
#include <avr/io.h
2

3
int main(void){
4
   DDRB = 0xFF;
5
   PORTB = 0x55;
6
   while(1){
7
   }
8
}

Anstelle von 0x55 kann man auch 0xAA benutzen. Damit brennt auf jeden 
Fall jede 2.te LED (wenn man mal die naheliegende Annahme treffen kann, 
dass alle LEDs gleich verschaltet sind)
OP #2779870
Lesenswert?

so sieht jetzt das Programm aus:

//----------------------------------------------------------------------
// Titel       : myAVR Beispiel "LED an" für den ATmega8/48/88/168
//----------------------------------------------------------------------
// Funktion    : Schaltet alle 3 LEDs an
// Schaltung   : PortB.0-2 an LEDs
//----------------------------------------------------------------------
// Prozessor   :
// Takt       : 3.6864 MHz
// Sprache     : C
// Datum       : 02.12.2005
// Version     : 1.3
// Autor       : Dipl. Ing. Päd. Alexander Huwaldt
// Programmer  : ...
// Port      : ...
//----------------------------------------------------------------------
#define   F_CPU 3686400  // Taktfrequenz des myAVR-Boards
#include  <avr\io.h>    // AVR Register und Konstantendefinitionen
//----------------------------------------------------------------------
#include <avr/io.h

int main(void)
{
   DDRB = 0xFF;
   PORTB = 0x55;
   while(1){

   }
}
OP #2779873
Lesenswert?

hier das Programm in Assembler:

;----------------------------------------------------------------------
; Titel    : myAVR Beispiel "LED an" für den ATmega8
;----------------------------------------------------------------------
; Funktion    : eine LED wir angeschalten
; Schaltung    : PORTB.0=LED1
;----------------------------------------------------------------------
; Prozessor    : ATmega8
; Takt    : 3,6864 MHz
; Sprache    : Assembler
; Datum    : 09.11.2007
; Version    : 1.0
; Autor    : Stephan Hänsel
; Programmer  :
; Port    :
;----------------------------------------------------------------------
.equ  F_CPU,  3686400
.include  "AVR.H"
;----------------------------------------------------------------------- 
-
;Reset and Interruptvectoren  ;VNr.  Beschreibung
begin:
  rjmp  main  ; 1    POWER ON RESET
  reti    ; 2    Int0-Interrupt
  reti    ; 3    Int1-Interrupt
  reti    ; 4    TC2 Compare Match
  reti    ; 5    TC2 Overflow
  reti    ; 6    TC1 Capture
  reti    ; 7    TC1 Compare Match A
  reti    ; 8    TC1 Compare Match B
  reti    ; 9    TC1 Overflow
  reti    ;10    TC0 Overflow
  reti    ;11    SPI, STC Serial Transfer Complete
  reti    ;12    UART Rx Complete
  reti    ;13    UART Data Register Empty
  reti    ;14    UART Tx Complete
  reti    ;15    ADC Conversion Complete
  reti    ;16    EEPROM Ready
  reti    ;17    Analog Comperator
  reti    ;18    TWI (I²C) Serial Interface
  reti    ;19    Strore Program Memory Ready
;----------------------------------------------------------------------- 
-
;Start, Power ON, Reset
main:
  ldi  r16,lo8(RAMEND)
  out  ioSPL,r16
  ldi  r16,hi8(RAMEND)
  out  ioSPH,r16  ;init Stack
  sbi  ioDDRB,0
;----------------------------------------------------------------------- 
-
mainloop:
  wdr
  ldi  r16,0b00000001  ;LED ON
  out  ioPORTB,r16
  rjmp  mainloop
;----------------------------------------------------------------------- 
-

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren