Forum: Mikrocontroller und Digitale Elektronik 8051 Einsteiger braucht Hilfe


von Gerhard H. (oderlachs)


Lesenswert?

Hallo Forengänger !

Eigendlich benutze ich ja ATmegas und ATTinys..

Aber...Ich habe noch einige 8051 Chips bzw. deren Derivate zu liegen. Da 
wollte ich ein paar kleine Anwendungen mit machen..eine LCD Uhr solte 
bei herrauskommen und vielleicht noch ein paar andere nützliche(?) 
Dinge.
Sollte sich hier unter uns wer befinden, der auch damit arbeitet, 
experimentiert,programmiert etc. würde ich über eine kleine Hilfe sehr 
freuen...
Ich kann die Programme in C, ASM schreiben, kompilieren und auch auf den 
Chip flashen, nur habe ich keinen Erfolg das praktisch was dabei zu 
sehen ist, eine einfache Blinkschaltung ZBsp.
Code:
// ------------- READS51 generated header --------------
// module  : C:\µC8051\ledblink2\led.c
// created : 21:38:21, Thursday, March 20, 2014
// -----------------------------------------------------
#include <sfr51.h>
#ifndef F_CPU
#define F_CPU 12000000UF
#endif
//delay function
void msdelay(unsigned int value){

unsigned int x,y;
for(x=0;x<value;x++);
for(y=0;y<1275;y++);
}
void main(){
int i=0;
P2=0x00;  //all pin of PORT2 declared as output
//infinite loop
while(i <= 1000)
{

P2=0xFF;        //all pinPORT 2 high  LED >> +5V OFF
msdelay(55);    //delay
P2=0x00;        //all pinPORT 2 low   LED >> +5V ON
msdelay(50);    //delay
i=i+1;
}
}

Dieses beispeil habe ich verwendet aber nix geht. Benutzen tue ich von 
Rigel Reads51 als Programmier-IDE
Ich habe ein handelsübliches DeveloperBoard für ATMEL und normale 8051.

Was mache ich falsch ???? :(

Danke & Gruss
Gerhard

edit:
Das Stk500 dient als Bustreiber zu den LEDs(STK500)

Fotos :
http://robot.oderlachs.de/8051/images/8051blink.jpg
http://robot.oderlachs.de/8051/images/8051devboard.jpg

von Bernd N (Gast)


Lesenswert?

Funktioniert das Board denn ansich ? Will sagen, siehst du mit einem 
Scope ob die Ausgänge abwechselnd 1 und 0 sind.

Dein Programm solltest du dir auch noch mal ansehen.
1
    while(i <= 1000)
Dein Kommentar hierzu "infinite loop" stimmt das ?
1
    unsigned int x,y;
2
    for(x=0;x<value;x++);

Google mal nach volatile.

von Peter D. (peda)


Lesenswert?

Gerhard Hinze schrieb:
> Ich habe ein handelsübliches DeveloperBoard für ATMEL und normale 8051.

Beim 8051 mußt Du Reset auf Low ziehen, damit er losrennt.

Setze einfach mal nur den Port auf 0xA5, ob die LEDs funktionieren.

von jmp (Gast)


Lesenswert?

Moin,

mach mal
1
for(x=0;x<value;x++);
2
for(y=0;y<1275;y++);
zu
1
for(x=0;x<value;x++)
2
for(y=0;y<1275;y++);

Noch besser:
1
for(x=0;x<value;x++)
2
{
3
    for(y=0;y<1275;y++);
4
}

--jmp

von Georg G. (df2au)


Lesenswert?

war nix

: Bearbeitet durch User
von Gerhard H. (oderlachs)


Lesenswert?

Habt alle erst recht vielen Dank !
Ich bin wirklich blutiger Einsteiger bei 8051. Das DevBoard habe ich bei 
Ebay erstanden und keinerlei Beschreibung dazu habe.
Ich habe eine Auswahl AVR oder 51 per Jumper.
es kann schon sein, das die Hardware-Perepherie nicht stimmt. Zumindest 
kann ich über ein STK200 Clon über LPT  >> ISP den ChipCode 
indentifizieren...
Ich werde mich weiter mit befassen, die Hardware zu bestimmen vom Board.

Der ResetPin ist auf LOW, habe ich gemessen, ob er nun konkret auf GND 
liegt oder per Widerstand auf LOW gezogen weiss ich noch nicht.
Ich habe leider keinen Osszi damit ich die pegelverläufe an den Ports 
besser sehen könnte..

Nochmals Danke für erste Hinweise, war schon was wert...

Gruss Gerhard

Edit Hier die ungefähre Schaltung, nur das bei mir die Taster und LEDs 
fehlen

http://i.ebayimg.com/t/C51-AVR-MCU-development-board-DIY-learning-board-kit-Parts-and-components-/00/s/NzQ4WDEyNjE=/$(KGrHqR,!pgFBYBm!81vBQjjcIQl9w~~60_57.JPG

: Bearbeitet durch User
von Wilhelm F. (Gast)


Lesenswert?

Gerhard Hinze schrieb:

> Ich habe leider keinen Osszi damit ich die pegelverläufe an den Ports
> besser sehen könnte.

Eine LED mit Vorwiderstand z.B. 470 Ohm reicht für einen Blinktest. Man 
muß sie aber zwischen Pin und VCC betreiben, nicht an GND.

Der Reset-Pin ist zu hochohmig für eine LED.

Ein alter Kopfhörer ist auch ein sehr gutes Prüfgerät zur Fehlersuche im 
NF-Bereich bis runter zu Gleichspannung. Man hört Knacken oder Töne laut 
oder leise, Rauschen und Knirschen in schlechten Verbindungen, sowas war 
bei der Fehlersuche in Telefonanlagen üblich. Man braucht sich mit dem 
Auge auch nicht auf eine LED oder Instrument zu konzentrieren, sondern 
rein nur auf die Schaltung. Bei der Fehlersuche war man da viel 
schneller als mit dem Multimeter. Evtl. Kondensator und Vorwiderstand am 
Kopfhörer einbauen (Hochpaß und galvanische Trennung), evtl. Schutz fürs 
Ohr gegen Überlautstärken, an eine Leitung eine Krokoklemme, an die 
andere eine Meßspitze, wenn man sowas vor hat.

Mit dem "Prüfgerät 1A" der Post (das ist ein halber Kopfhörer mit nur 
einer Hörmuschel) durfte man sogar an der Netzspannung 230V hören (dann 
allerdings vom Ohr abgenommen), und andererseits hört man damit noch 
Millivolt. Es hatte zwei umschaltbare Impedanzen, 600 Ohm und 10k Ohm.

von Bernd N (Gast)


Lesenswert?

Ist dir denn eine Erkenntnis zum Programmablauf gekommen ?
1
#define led_out P2_7                  // LED welcher PIN auch immer
2
3
volatile unsigned int i;
4
5
void main (void)
6
{
7
    while (1) {
8
        led_out = !led_out;
9
        for ( i = 1; i < 40000; i++ );
10
    }
11
}

Zum nachdenken mal ein Beispiel.

von Gerhard H. (oderlachs)


Lesenswert?

Nun habe ich den Quarz gewechselt , weil aus der seriellen Schnittstelle 
nur "Mischmasch" rauskam...Org. 12 MHz gegen 11,5902 getauscht...
Nun bekomme ich an der ser. Schnittstelle die ganzen ASCII Zeichen 
ausgegeben. Eigendlich sollte "Hello World" rauskommen..aber wenigstens 
etwas.
Na mal sehen wie es weiter geht..das Blinken geht noch nicht...
Meine LEDs sind gegen +5V über eine Transistorstufe geschaltet(STK500) 
sie sind bei LOW dann ON, also LOW aktiv.

Ich werde weiter die Tips hier probieren....fällt ja kein Meister 
schnell vom Himmel...

Gerhard

von Wilhelm F. (Gast)


Lesenswert?

Gerhard Hinze schrieb:

> 12 MHz gegen 11,5902 getauscht...

Das wäre doch nicht nötig gewesen! Mit 12MHz bekommt man auch 9600BAUD 
eingestellt, und Timer sind mit den 12MHz auch besser einstellbar als 
mit dem Baudratenquarz. Aber jeder so, wie er möchte.

Außerdem ist der MAX232 auch nur bis 20000BAUD spezifiziert.

von Gerhard H. (oderlachs)


Lesenswert?

Hallo Wilhelm,
ja das weiss ich von anderen Projekten. Trotzdem Danke für den Hinweis !
Es ist nur so, das ich vorgefertigte Examples erst mal nutze. Da diese 
für einen 115902 Q geschrieben war, habe ich einfach mal nen anderen Q 
raufgesteckt.

Edit: Ich muss mich auch erst in die Baudeinstellung (Code) hierbei 
einarbeiten, hatte bislang nur AVR's ...

Heute habe ich nun von Keil mir eine DemoIDE installiert , nun geht es 
wenigstens schon mit den I/O Programmen, die LEDs blinken und leuchten 
wie sie sollen....
Ich möchte mit den 8051er auch nicht mein weiteres Leben in Sachen 
Programmierung verbringen, da nun mal die Entwicklungsumgebung(Boad und 
Chips) vorhanden ist, möchte ich es mal Probieren, wie andere vielleicht 
mal Kreuzworträtsel lösen o.ä.

Auf dem Dev.Board ist gleich eine Steckleiste für ein LCD , daraus wird 
dann später ne LCD Uhr werden...für die 2..3 anderen Chips werde ich mir 
ein PCB einfallen lassen und auch noch was daraus basteln , so war die 
einmalige Geldausgabe für das Dev-Board + Chips nicht unnütz....

Na ja vieleicht kann ich bei der Verwendung der 8051er auch meinne 
grösseren Vorrat an LCDs abbauen und was Nützliches daraus machen..

Somit mit besten Dank und Grüssen

Gerhard

Nachtrag:
habe mich noch mals mit dem Hello World-Quellcode befasst..und..
Nach Änderung der Terminaleinstellungen geht es jetzt:

http://robot.oderlachs.de/8051/images/serial_ok.jpg

: Bearbeitet durch User
von umsteiger (Gast)


Lesenswert?

Hallo Gerhard,

bei den Controllern von Intel - solltest du esrt mal genau angeben 
welchen Typ und "wie" Du ihn benutzt.
-Benutzt du einen vom Typ, z.B. 8751 (mit internem Eprom) oder einen 
(mit externem Eprom 80C51, 80C52) dann wirst du einen Pin (PGME?) auf 
GND legen müssen, damit der Adressbus nach aussen geschaltet wird.
Um ein Bord zu testen ob es hardwaremässig überhaupt funktioniert ist es 
sehr hilfreich in einem solchen Fall ein Eprom zu schissen das gesammt 
"nur NOP-Befehle enthält". Damit erreicht man, dass beim Start "an allen 
Adresspins" die Adressen von "000 bis FFF" ausgegeben werden und mit 
einem Odzilloskop kann an den Adresspins das Signal beobachtet werden, 
genau wie an einem binären Zähler, z.B. einem 4040.
An den Höheren Adresspins sollte sogar mit einer "LED" das Blinken 
beobachtet weden können.
Bei den Typen mit internem Eprom z.B. (87Cxx) ist es schwerer die 
Funktion zu prüfen.

Wolfgang

von Häsch Define (Gast)


Lesenswert?

umsteiger schrieb:
> bei den Controllern von Intel - solltest du esrt mal genau angeben
> welchen Typ

Im Eröffnungsbeitrag ist ein Link zu einem Foto angegeben, auf dem man 
ihn sieht.

von Gerhard H. (oderlachs)


Lesenswert?

Danke, ja ich muss trotzdem dem Umsteiger etwas Recht geben, genau 
gesagt arbeite ich zur Zeit mit dem ATMEL Chip AT89S51.
Da habe ich schon was zum "laufen" gebracht, ein Hello World und eine 8 
Led BlinkZeile... :(

Weiter habe ich noch  STC 89C51RC und den Temic oder Phillips 80C52.
Temic darum weil ein grosses T auf dem Chip ist so denke ich das so..

Das diese wohl alle den 8051 "nachahmen" aber jeder ein bischen  doch 
"anders"  ist habe ich schon gemerkt...

Ich sagte ja ich blin "blutjunger Einsteiger" bei dieser Chipserie...
Ich habe auch ein "dickes Buch" <Das grosse 51er Anwender Buch> aber da 
werde ich nicht so ganz schlau, ist ganz in Assembler geschrieben. Ich 
verstehe das zwar, aber doch möchte ich bei "C"  bleiben.

Auch hatte ich Probleme mit dem Dev. Board, weil keine 
Beschreibung..wenn ich den ISP Stecker abgezogen hatte lief das Prog 
nicht mehr, erst als ich den Jumper für die Reset-Umschaltung 
(AVR-8051)entfernte lief das Prog dann weiter.

Wie gsesagt ich lerne mich da so ein wenig erst mal ein...und das ein 
Programm, nicht wie ein ein selbes nur auf ner anderen IDE- oder 
Programmierumgebung ist, habe ich auch schon gemerkt.. ich dachte 
bislang C ist C und 8051er ist 8051er... ;)

Aber es wird habe so einige Fallstricke schon gefunden und entfernt ;)

von Häsch Define (Gast)


Lesenswert?

Gerhard Hinze schrieb:
> ATMEL Chip AT89S51

Das ist anscheinend ein Flash-µC,

Gerhard Hinze schrieb:
> Phillips 80C52

und dieser ein maskenprogrammierter µC, der braucht externes EPROM.

Man wird sie deswegen nicht einfach so untereinander tauschen können.

von Gerhard H. (oderlachs)


Lesenswert?

Danke für die Ausführungen !

Ich möchte auch sortieren, die Guten ins Kästchen und die anderen in den 
Elektroschrott...
Ich möchte da nicht grosse Sachen aufbauen...nein das habe ich nicht 
vor.
Die AT89S51 werde ich wohl verwenden können , vielleicht auch noch den 
STC-89C51RC ...
Das Probieren wars mir aber wert, nicht das ich gleich alles als nutzlos 
entsorge..

Gruss Gerhard

: Bearbeitet durch User
von Häsch Define (Gast)


Lesenswert?

Gerhard Hinze schrieb:
> Die AT89S51 werde ich wohl verwenden können , vielleicht auch noch den
> STC-89C51RC ...
> Das Probieren wars mir aber wert, nicht das ich gleich alles als nutzlos
> entsorge..
Das Foto oben sieht so aus, als ob da kein externes EPROM für einen 
normalen 8051 oder 8052 drauf ist. 8051 und 8052 sind Maskenversionen 
eines 8031 oder 8032, man kann sie gelegentlich als Sonderposten Abfall 
mal kaufen, oder findet sie in Altgeräten. Mit dem Pin EA auf Low ist 
das Masken-ROM abgeschaltet, und ein gebrauchter 8051 oder 8052 läßt 
sich dann vollwertig wie ein ROM-loser neuer 8031 oder 8032 betreiben.

von Gerhard H. (oderlachs)


Lesenswert?

Ich habe die mal irgendwo von irgendwelchen Boards verschidener 
Steuerungen abgenommen eher die in den Müll kamen....

Will gerade eine LCD Uhr aufbauen, muss aber erst nen Anschlussadaper 
löten..
Meine LCD haben etwas geänderte Anschlüsse, als wie sonst 1...16 in 
einer Reihe. Ein solcher LCD Anschluss ist auf dem Dev.Board vorhanden..
Na mal sehen ob das mit der Uhr was wird...

Gerhard

von Häsch Define (Gast)


Lesenswert?

Gerhard Hinze schrieb:
> Will gerade eine LCD Uhr aufbauen, muss aber erst nen Anschlussadaper
> löten..
Das verlinkte Foto mit dem Board sieht ja grundsätzlich brauchbar aus. 
Auch um ein LCD anzuklemmen, es sind ja wie ich sehe alle Ports an 
Stiftleisten.

von Lothar (Gast)


Lesenswert?

Gerhard Hinze schrieb:
> Ich muss mich auch erst in die Baudeinstellung (Code) hierbei
> einarbeiten, hatte bislang nur AVR's ...

Es gibt auch 8051 mit internem Oszillator (kein Quarz nötig) und 
Bootloader, damit geht es einfacher als beim AVR z.B. LPC922 im DIP-20 
lässt sich mit dem kostenlosen FlashMagic flashen:

http://www.flashmagictool.com/

Hätte außerdem noch den Vorteil dass die ARM-Nachfolger hier z.B. LPC812 
dieselbe Peripherie und Bootloader haben, damit wäre ein späterer 
Umstieg problemlos.

von Gerhard H. (oderlachs)


Lesenswert?

Hier eine annähernde Schaltung, es ist die Weiterentwicklung. bei meinem 
Board sind keine Taster und LEDs an den IO Ports schaltbar, d.h. sie 
sind gar nicht auf dem Board.

http://robot.oderlachs.de/8051/images/boardschaltung.jpg

Die LCD-Beispile aus dem Web , gehen nicht so richtig. Bin gerade dabei 
meinen eigenen Code dafür zu schreiben, um erst mal ein paar Zeichen auf 
dem LCD zu sehen...

Wenn soweit ist sag ich hier Bescheid mit Foto.. ;)

Gerhard

: Bearbeitet durch User
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.