Forum: Mikrocontroller und Digitale Elektronik Wait oder counter funktion für at89s52


von Oliver D. (smasher)


Lesenswert?

Hallo,

ich habe mal eine blöde frage ;)

Ich habe mir für den at89s52 die befehlssätze als pdf geladen und dort 
steht alles in asm. Da ich allerdings in c programmieren möchte bräuchte 
ich einen Befehlssatz der für den Keil uVision 3 Kompatibel ist und den 
Internationalen standards von c entspricht. Ich weiß nicht warum, aber 
unsere Lehrer verwenden in den Beispielprogrammen nur komische Befehle 
dir mein uVision nicht versteht und deshalb bin ich an den extras 
notiert in C interessiert.
Vielleicht verstehe ich die Befehle auch nicht so, weil ich mit dem 
Datenblatt nicht zu recht komme...denn da steht ja ne menge drinne.

Und direkt noch ne andere Frage, gehört der at89s52 zur 8051er 
familie?(bzw, ist er ein 8051er)
Im datenblatt steht ja nur das er kompatibel zu MC81 ist und die 82 im 
namen verwirrt mich ein bischen.

von Thomas B. (detritus)


Lesenswert?

Wenn du in C programmierst, kann dir der asm-Befehlssatz erstmal egal 
sein. Du musst halt das Standard C können(for, while, if, funktionen, 
zeiger, ...).
Den µC musst du dem µVision dann einstellen und der kompiliert dir das 
dann passend zum Controller und seinem Befehlssatz.

Und der at89s52 gehört zu den 8051ern, bzw ist eine der vielen 
kompatiblen Erweiterungen dazu.

von Oliver D. (smasher)


Lesenswert?

Also mir ist es wichtig zu wissen, wie ich die sonderfunktionen in c 
nutzen kann.

wenn ich einen Zähler baue, der bis 4 milliarden zählt (weil das ding ja 
eine operation pro takt macht) belege ich damit natürlich ne menge 
speicher und rechenleistung.

Interessanter währs da einen timer zu nutzen der integriert ist.

von Thomas B. (detritus)


Lesenswert?

Ok...

Du bindest die header-datei für deinen Controller ein, sollte irgendwie 
so aussehen:
1
#include <AT89S82.H>

Die Header-Datei muss dabei im gleichen Ordner wie dein C-Programm sein, 
ansonsten musst du den Pfad angeben.

Und dann kannst du die SFR beschreiben wie in Assembler auch:
1
void config(void)                 
2
{
3
  TMOD|=0x02;
4
  TH0=0xCE;                
5
  WDTCON=0x69;                
6
  CLKREG=0x01;                  
7
  ET0=1;
8
  TR0=1;
9
  EA=1;
10
}

von Oliver D. (smasher)


Lesenswert?

Ist das nun C oder asm code?

von Thomas B. (detritus)


Lesenswert?

C.

von Oliver D. (smasher)


Lesenswert?

Darf ich fragen woher du die Befehle hast?

Ich suche nämlich vergeblich ein datenblatt in dem alle befehle für den 
at89s52 in keil beschrieben sind. Natürlich in C.

von Thomas B. (detritus)


Lesenswert?

Son Datenblatt gibt es nicht.

Alle asm-Befehle sind im '51 Instruction Set, das du dir runterladen 
kannst, und alles, was deinen Controller vom Standard 8051 
unterscheidet, findest du in dessen Datenblatt.

Mit diesen Infos und den eingebundenen Headerfiles kannst du die SFR mit 
den Namen aus dem Datenblatt ansprechen.
Es gibt keine extra Befehle, um z.B. den Timer anzusprechen. Du wirfst 
nen Blick ins Datenblatt und findest raus, in welches SFR du welchen 
Wert schreiben musst, damit der Timer ne bestimmte Überlauffrequenz 
erreicht und schaltest die entsprechenden Interrupts ein.

Willst du nicht lieber mal in Assembler anfangen und ne LED zum Blinken 
bringen? Das könntest du dann in C "nachbauen", dann siehst du wohl am 
besten, wo es Unterschiede gibt.

von Oliver D. (smasher)


Lesenswert?

asm ist blöde.

Ich brauche für mein Zentral abi in NRW in Elektrotechnik 8051er 
Programmierung in C.
Asm ist da nicht hilfreich.

von Oliver D. (smasher)


Lesenswert?

Achja, wo finde ich das 51 instruction set?
Ich habe hier den 8051 befehlssatz pdf in deutsch. Dort sind deine 
befehle aber nicht enthalten.

von Thomas B. (detritus)


Lesenswert?

Aber auch für C musst du verstanden haben, wie der Controller 
funktioniert. Ohne Grundlagen brauchst du jedenfalls nicht mit ner 
Hochsprache anfangen...

Kauf dir den Controller, ne Lochrasterplatine und bisschen Kleinkram, 
lad dir für C den Keil und für Assembler den AS51V4 und probier mal rum. 
Schaltpläne gibts reichlich im Netz.

Edit:

"Meine" Befehle findest du im Datenblatt natürlich nicht. Ich weise 
lediglich in C  Registern einen Wert zu, und der Controller reagiert 
darauf damit, dass der Timer läuft und Interrupts liefert. Ausserdem 
wird auch noch ne Watchdog eingerichtet.

Und wie gesagt, die Befehle aus dem Instruction Set sind ASM und kein C!

von Oliver D. (smasher)


Lesenswert?

Ich habe hier schon ein board liegen.

Ich suche einfach nur mal ne website mit nem tutorial das in c ist für 
den prozi den ich habe.

von Oliver D. (smasher)


Lesenswert?

Oder mal andersherum,

wo find ich denn eine Tabelle, in der steht welche Pins welche hex 
adresse haben?

an P3.2 ist bei mir z.b. ein Taser angeschlossen der auf Masse gelegt 
ist.
Dann könnte ich ja eine 1 reinschreiben und diese dann mit dem Taster 
runterziehen und dann eine LED leuchten lassen.

Ich müsste halt nur wissen wie die Adresse des Pins ist...

von Thomas B. (detritus)


Lesenswert?

Wenn du die entsprechende .h einbindest:
1
#include <AT89S82.H>
braucht dich die hex-Adresse nicht zu interessieren. Dann heist dein 
P3.2 auch im Programm genau so. Die .h-Datei ist quasi ne 
Übersetzungstabelle für die Registernamen aus dem Datenblatt auf ihre 
HEX-Adressen.

Ansonsten gibts die Hex-Adresse natürlich auch im Datenblatt. Damit 
arbeitet aber wohl niemand, auch im Assembler kann man mit dem Namen 
arbeiten, wenn man die entprechende Übersetzungstabelle einbindet.

von Oliver D. (smasher)


Lesenswert?

Hmm, also der Keil kennt die datei leider nicht....

von Thomas B. (detritus)


Lesenswert?

Klar...
1
#include <AT89S52.H>

Das Ding heisst so wie der Prozessor, Verschreiber meinerseits.

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.