Mikroprozessor 8051

OP #7057603
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
Gast #7057624
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
Beitrag #7057674 wurde von einem Moderator gelöscht.
Beitrag #7057712 wurde von einem Moderator gelöscht.
Gast #7057727
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.
#7057735
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.
#7059469
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.
Gast #7059486
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.
Gast #7059837
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren