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.
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.
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.
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:
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.
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.
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!
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...
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.