Forum: Mikrocontroller und Digitale Elektronik Mikroprozessor 8051


von Jele D. (jele_d)


Lesenswert?

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

von Wolfgang (Gast)


Lesenswert?

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.

von Olaf (Gast)


Lesenswert?

> 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

von MaWin (Gast)


Lesenswert?

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.
von karadur (Gast)


Lesenswert?

Was steht denn in studi.h?

von Stefan F. (Gast)


Lesenswert?

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.
von karadur (Gast)


Lesenswert?

@"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.

von Thomas Z. (usbman)


Lesenswert?

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.

von ASM51 (Gast)


Lesenswert?

wie immer, am schnellsten geht es in Assembler

 0000  B2 93           Puls:  CPL  P1.3
 0002  80 FC              SJMP  Puls

von Karl B. (gustav)


Lesenswert?

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

von H. H. (Gast)


Lesenswert?

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.

von (prx) A. K. (prx)


Lesenswert?

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

von H. H. (Gast)


Lesenswert?

(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!

von Anja (Gast)


Lesenswert?

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

von Jim M. (turboj)


Lesenswert?

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.

von Thomas R. (r3tr0)


Lesenswert?

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

von Noch ein Kommentar (Gast)


Lesenswert?

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.

von MaWin (Gast)


Lesenswert?

Jim M. schrieb:
> Weiterhin ist

Da gibt es aber alle 11 Impulse einen Jitter.

von karadur (Gast)


Lesenswert?

"Nimm doch gleich CLKout"

von H. H. (Gast)


Lesenswert?

karadur schrieb:
> "Nimm doch gleich CLKout"

Jele D. schrieb:
> müssen wir ein Programm schreiben ,
> das am Port P1.3

von karadur (Gast)


Lesenswert?

Na gut demnächst statt "" mit <ironie>

von H. H. (Gast)


Lesenswert?

karadur schrieb:
> Na gut demnächst statt "" mit <ironie>

Ironie wird immer sofort erkannt!

von Cartman (Gast)


Lesenswert?

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.

von Lothar (Gast)


Lesenswert?

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.

von Cyblord -. (cyblord)


Lesenswert?

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
Noch kein Account? Hier anmelden.