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:
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 | }
|
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.
asm ist blöde. Ich brauche für mein Zentral abi in NRW in Elektrotechnik 8051er Programmierung in C. Asm ist da nicht hilfreich.
Achja, wo finde ich das 51 instruction set? Ich habe hier den 8051 befehlssatz pdf in deutsch. Dort sind deine befehle aber nicht enthalten.
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!
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.
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...
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.