Deklaration von variablen bei KEIL

#921780
Lesenswert?

Hallo alle

Ich hab ein Problem beim Deklarieren von Variablen beim Keil µVision2

Ich will eine Variable an einem Port ausgeben aber es will einfach nicht 
funktionieren.
1
#include<89c51rd2.h>
2
#include<stdio.h>
3

4

5

6
int main()
7
{  
8
  unsigned char a,b;
9
  b=2*2;
10
  a=b;
11

12
  P0=a;
13
}

habt ihr vielleicht eine Idee was falsch sein könnte ?

mfg Patrick
Gast #921867
Lesenswert?

>Vielleicht tuts auch ein return 0; am ende vom main...

???

vielleicht eher ein "while(1);" !

P0 hat keine (oder nur schwache?) Pullups.
Hast du da externe Pullups dran hängen?
Wenn nicht, dann hol das mal nach oder mach deinen Versuch
an einem anderen Port.
#922024
Lesenswert?

ARM-Fan wrote:
> Gibts beim 8051er nicht.

Das stimmt so nicht (mehr). Nur bei den ursprünglichen 8051er gibts das 
nicht, aber jeder aktuelle 8051 kompatible Controller besitzt diverse 
Betriebsmodes für die Portpins. Z.B. Bei den LPC900 sind diese nach dem 
Reset standardmäßig auf input-only gesetzt.

@Patrick Weinberger
Du müsstest also für den 89c51rd2 erst mal überprüfen, ob die Pis 
richtig konfiguriert sind nach dem Reset, oder ob du dies erst noch 
machen musst.

Ebenfalls solltest du dein Main Programm auch mit "void Main()" 
definieren und nicht mit "int". Denn normalerweise ist der Main Teil der 
oberste Zweig und kann deshalb nichts zurückliefern.

Ciao,
     Rainer
#922199
Lesenswert?

@ Rainer

Der 80c51ed2/rd2 ist so ein uralt Version ohne Betriebsmodis und leider 
auch keine ADC usw.


@ Arm-Fan

Wenn ich zB sage P0=0; leuchten meine LED's also an dem PULL-UP wirds 
wohl eher nicht liegen.

Was ich glaub das ihm die Deklaration nicht ganz passt dem µC. KEIL gibt 
beim compilieren

Build target 'Target 1'
linking...
Program Size: data=11.0 xdata=0 code=30
creating hex file from "Beispiel"...
"Beispiel" - 0 Error(s), 0 Warning(s).

aus also würd sagen es passt alles außer ihr könnt da was anderes raus 
lesen und das Übertragen mit FLIP 3.3.1 funktioniert auch problemlos. 
Also würd ich sagen die Deklaration mag er nicht .

schon mal Danke an alle µC Spezialisten hier für die Lösungsvoeschläge
#922810
Lesenswert?

Hier ein ganz einfaches Beispielprogramm, welches in eine 
Interruptroutine (ISR) springt bei einer negativen Flanke an INT1. Das 
Beispiel ist für uVision mit C51 Compiler erstellt worden.
Die ISR wird durch den Begriff "(void) interrupt 2" definiert, wobei die 
"2" für den jeweiligen Interrupt steht.


#include    <reg517a.h>

unsigned char wert = 0;

main() {
  EX1 = 1;  // Ext Int1 freigeben
  IT1 = 1;  // Ext Int1 flankengetriggert (negative-Flanke)
  EAL = 1;  // Interrupts generell freigeben

  while(1) {
    P1 = 0;
    if(wert == 1) {
      wert = 0;
      P1 = 1;
    }
  }
}

void fallende_flanke (void) interrupt 2 {
  wert = 1;
}

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