Hallo , ich bin frisch im Uc , im Hochschule müssen wir ein Programm schreiben , das am Port P1.3 in HP1 eine Rechstecksschwingung der höchsten möglichen Frequenz ausgibt . anbei meine Lösung :include<stdio.h> #include"studi.h" unsigned char bit P13 ; // wie kann ich wissen , welche Adresse besitzt P13 void main (void) // Start des Hauptprogramms { while(1) { P13=0; //Pin low P13=1; //Pin high } } vielen Dank im Voraus
Jele D. schrieb: > unsigned char bit P13 ; // wie kann ich wissen , welche Adresse besitzt Der P13 hat keine Adresse. Der hängt an einem Bit von einem der Ports.
> unsigned char bit P13 ; // wie kann ich wissen , welche > Adresse besitzt P13 Also du kannst das wissen indem du das Datenblatt deines Controllers liesst. Dein Compiler kann aber leider nicht lesen, deshalb sollte er eine include-Datei haben wo jemand sowas definiert hat weil P13 nicht zum C Standardumfang gehoert. Olaf
Jele D. schrieb: > unsigned char bit P13 Was genau möchtest du damit sagen ? char bit ? Nicht doch noch mal die Doku lesen ? https://www.keil.com/support/man/docs/c51/c51_le_char.htm
Beitrag #7057674 wurde von einem Moderator gelöscht.
Welcher Compiler und welche C Bibliothek wird überhaupt verwendet? Das müsste man schon wissen, um konkret zu helfen. Ich würde dann auf die relevanten Kapitel deren Doku verwiesen.
Beitrag #7057712 wurde von einem Moderator gelöscht.
@"Dekan" mach mal ruhig. Hochschule muss nicht UNI heissen. Evtl. fehlt nur ein Punkt an der richtigen Stelle. Und was steht in studi.h? Mein Mi-C würde mit 2 Punkten an den richtigen Stellen ein funktionierendes Prog liefern.
es braucht eine sbit deklaration, diese ist compiler spezifisch... Keil: sbit P13 = P1^3; SDCC: __sbit __at (P1 + 3) P13; IAR: __bit __no_init volatile bool P13 @ (P1 + 3); uc51: unsigned char bit P13 @ (P1 + 3); Das setzt allerdings vorraus dass P1 irgendwo definiert ist, was in der Regel in einem CPU Header file gemacht wird.
wie immer, am schnellsten geht es in Assembler 0000 B2 93 Puls: CPL P1.3 0002 80 FC SJMP Puls
Jele D. schrieb: > Rechstecksschwingung SCNR Wo steckt man die? ASM51 schrieb: > wie immer, am schnellsten geht es in Assembler Der Zweck ist doch, sie sollen C lernen. Erst fang' se langsam an, aber dann... ciao gustav
ASM51 schrieb: > wie immer, am schnellsten geht es in Assembler > > 0000 B2 93 Puls: CPL P1.3 > 0002 80 FC SJMP Puls Und noch schneller wird es mit einem 8051 von Silicon Labs.
ASM51 schrieb: > wie immer, am schnellsten geht es in Assembler Also jeder gute Compiler weiss, dass es mit Unrolling schneller geht.
1 | CPL P1.3 |
2 | CPL P1.3 |
3 | CPL P1.3 |
4 | CPL P1.3 |
5 | CPL P1.3 |
6 | ... |
(prx) A. K. schrieb: > ASM51 schrieb: >> wie immer, am schnellsten geht es in Assembler > > Also jeder gute Compiler weiss, dass es mit Unrolling schneller geht. > CPL P1.3 > CPL P1.3 > CPL P1.3 > CPL P1.3 > CPL P1.3 > ... Wir nähern uns Warp 10!
ASM51 schrieb: > 0000 B2 93 Puls: CPL P1.3 > 0002 80 FC SJMP Puls wenn man den SJMP noch wegläßt und den ganzen Speicher mit CPL P1.3 füllt wirds noch besser. Gruß Anja
Jele D. schrieb: > das am Port P1.3 in HP1 eine Rechstecksschwingung der höchsten möglichen > Frequenz ausgibt . Vorsicht: Wenn das kein klassicher 8051 sondern was modernes (Silabs C8051 oder EFM8) ist, könnte man u.U. eins der internen Taktsignale am Pin raus lassen. Damit sind erheblich höhere Frequenzen möglich, denn 8051 braucht ja (normalerweise) mehrere Takte pro Instruktionszyklus. Weiterhin ist
1 | while(1) { |
2 | P13=0; //Pin low |
3 | P13=1; //Pin high |
4 | P13=0; |
5 | P13=1; |
6 | P13=0; |
7 | P13=1; |
8 | P13=0; |
9 | P13=1; |
10 | P13=0; |
11 | P13=1; |
12 | P13=0; |
13 | P13=1; |
14 | P13=0; |
15 | P13=1; |
16 | P13=0; |
17 | P13=1; |
18 | P13=0; |
19 | P13=1; |
20 | P13=0; |
21 | P13=1; |
22 | P13=0; |
23 | P13=1; |
24 | }
|
deutlich "schneller" wenn man es mit dem Oszi ausmisst, weil der Rücksprung seltener erfolgt. Der schluckt einen zusätzlichen Instruktionszyklus.
Damals in der Schule haben wir auf dem AT89C5131 programmiert. Da lief das so ab:
1 | #include <at89c5131.h> |
2 | sfr at P1 Outport |
3 | sbit at P1^3 Togglebit |
4 | |
5 | int main(void) |
6 | {
|
7 | Togglebit = 1; |
8 | Togglebit = 0; |
9 | Togglebit = 1; |
10 | ...
|
Kann man die Schleife ganz weglassen? Den ganzen Programmspeicher mit Pin Low und Pin High vollschreiben. Und dann drauf verlassen, nach dem Überlauf fängt der Programmcounter wieder bei der Adresse 0 an.
karadur schrieb: > "Nimm doch gleich CLKout" Jele D. schrieb: > müssen wir ein Programm schreiben , > das am Port P1.3
Ein UPSD3233/4 von ST hat neben einem 8051 Kern noch ein nettes PLD. Das kann natuerlich auch > eine Rechstecksschwingung der höchsten möglichen Frequenz ausgeben. Auch asynchrone "Schweinerein" gehen damit. Z.B. ein XOR eines Taktes mit einem etwas verzoegertem Takt. Wenn das noch zu langsam sein sollte, und man genuegend Exemplare zum "Testen" hat, waere auch ein Ringoszillator eine Option. Da ksnn auch der "Assemblerbrogrammierer" nur neidisch guggen.
Neuere 8051 wie EFM8 (und auch neuere ATTiny und PIC) haben auch wieder integrierte kleine CPLD (CLU) weil es CPLD ja inzwischen kaum noch gibt, die aber für Logik im nsec Bereich noch nötig sind.
Jele D. schrieb: > ich bin frisch im Uc , im Hochschule Gott ich hoffe es handelt sich um eine Gartenbau-Hochschule.
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.