mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik PIC: Bit aus Byte an PORT ausgeben


Autor: HDW (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

Ich habe gerade erst mit PIC-Mikrocontrollern angefangen.

Ich wundere mich momentan darüber, dass ich einzelne Bits aus einem 
File-Register (PIC 16F84A: 8 bit breit) nur über Bit-Test-Befehle (btfss 
...)an einem bestimmten Port-Pin ausgeben kann.

Ganze Register kann man ja einfach mit den mov..-Befehlen an den Port 
ausgeben. Aber dann liegt das ganze Byte am gesamten Port.
Kann man denn nicht ein Bit eines File-Registers einfach an z.B. PORTB,5 
kopieren?

mfg   Wolfram Hildebrandt

Autor: Reiner (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
einfach mit einem Befehl nicht. Da mußt Du schon die Bits testen und 
dann gezielt ausgeben.

z.B so

  btfss PORTB,3  ; Bit 3 von Portb prüfen
  goto  xxx
  bsf   PORTA,0  ; und an A0 als '1' ausgeben
  goto  yyy
xxx:
  bcf   PORTA,0  ; oder '0'
yyy:


blödes gespringe...

Reiner

Autor: HDW (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hm.
Das ist ja nicht so schön.
Vielleicht wird das ja mal iregendwann geändert.

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also beim Jonglieren mit Bits, ist der 8051 eindeutig der Weltmeister.
Einfacher gehts bei keinem anderen. Man kann Logikgleichungen fast 
direkt hinschreiben. Das C-flag ist dann der Accu für Bitoperationen

Hier mal ein Beispiel:

P3.3 = (P1.0 AND (NOT P1.1)) XOR P2.7

sieht dann so aus:

mov c, p1.0
anl c, /p1.1
jnb p2.7, l1
cpl c
l1:
mov p3.3, c


Die Bitoperationen sind aber nicht nur auf Ports beschränkt. Bis zu 128 
SFR-Bits und 128 SRAM-Bits können die Bitbefehle.


Peter

Autor: Reiner (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich will ja nichts sagen, aber das sind auch 5 Befehle. Zudem ebenso auf 
128 Byte Adressumfang beschränkt und auf alle Register anwendbar - nur 
so zur Info

Reiner

Autor: mikki merten (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es gibt bei jedem Prozessor etwas zu mäkeln. Daher sollte man sich für 
seine Anwendung denjenigen aussuchen (das Marktangebot ist vielfältig) 
der am besten passt bzw. mit dessen Architektur man am Besten klar 
kommt. Wer dort nichts findet, kann sich mit einem FPGA seinen eigenen 
Microcontroller designen.

Autor: HDW (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

Hier im Forum herrscht anscheinend der AVR.
Was sind denn die Vorteile gegenüber den PICs?

Autor: Reiner (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wer die Architektur vom PIC kennt wird verstehen das C auf dem PIC nur 
'ne schlechte Krücke sein kann. Stack nicht erreichbar(außer beim 18er)
Du bekommts größeren Speicher (Flash und RAM). Du kannst jedes Portbit 
mit einem separaten Pullup beschalten.
Die Angaben von Strings sind bequemer(mit Trick kann man auch bei den 
PIC-Flashtypen Speichereffiziente Strings anlegen).

Was ich bei den PIC's schön finde sind die Zielangaben, ob der Operant 
in ein File oder in's WREG geladen wird - schön einfach.

Seit '97 hatte ich mit PIC's gearbeitet. Richtig gearbeitet wo Zeit 
wirklich Geld ist. Mit den Atmels wär es einfacher und schneller von der 
Hand gegangen.

Reiner

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Rainer,

was meinst Du mit "auch 5 Befehle" ?

Diese Beispielgleichung besteht ja aus 4 Operationen und da sind nur 5 
Assembler Befehle schon wahnsinig effizient.

Ich glaube kaum, daß der PIC das mit "auch" nur 5 Befehlen kann.



Ich hatte mich auch erst gewundert, wozu dieser verrückte RETLW Befehl 
beim PIC gut ist. Bis ich dann gesehen hab, das man nur damit 
DB-Anweisungen simulieren kann, wobei man immer auch noch die 256 Wort 
Grenze im Auge behalten muß.

Beim 8051, AVR und den anderen sind DB-Anweisungen bis 64kB und ein 
16Bit-Pointer darauf kein Problem.


Peter

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Zur Information:

Ich bin auch nur zufällig zum 8051 gekommen. Ich war mal auf einem 
Atmel-Seminar, wo sie die ersten preiswerten Flash-Mcs der Welt 
vorgestellt hatten. Das muß so 1993/1994 gewesen sein. Da war an AVR 
noch nicht zu denken und die PIC-Leute brauchten einen großen Mülleimer, 
wo sie die fehlgebrannten OTPs versenken konnten.

Dann hat mein Chef den super leistungsfähigen Keil C-Compiler für damals 
nur 1600,-DM spendiert und seitdem halte ich dem 8051 die Treue. Und 
bezüglich Geschwindigkeit und Flash-Größe hatte ich auch noch keinen 
Grund zu wechseln.

Etwas ärgert mich jedoch, daß Atmel bisher nicht auch die 
AT89C4051-Serie mit ISP, internen Reset und Takt ausgerüstet hat. Kommt 
ja vielleicht noch.


Peter

Autor: mikki merten (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@peter
Wenn wir zu den Kunden mit 100k pro Monat Abnahme gehören würde, gäbe es 
mit Sicherheit sehr schnell ein AT80C4051 mit dem internen Takt-, 
Programmier- und RESET Optionen des AVR MEGA8. So richtig Eigeninitive 
für eine kontinuirliche Verbesserung (außer es führt zu Kostensenkung 
bei der Fertigung) entwickeln wohle alle Hersteller im Augenblick nicht.

Autor: Reiner (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Peter
Erstmal ist es wichtig die Namen der Leute hier richtig zu schreiben - 
ich heiße R'e'iner mit e. Hier posten schließlich auch Rainer mit a 
herum ;)

Zu den 5 Befehlen stimmt es, der Pic kann in 5 Befehlen solch eine 
Operation mit log. Verknüpfung nicht.
Aber davon mal ab. Ich will Dir deinen kleinen Lieblich nicht schlecht 
machen. Mikki bemerkte mal das man an jedem Mc was zu mäckern hätte und 
das stimmt auch.
Ich selbst bin, obwohl es villeicht so scheint, kein PIC-Freak. Ich hab 
nur viel mit denen gemacht. Mein Herz schlägt für den M16C. Ich fühl' 
mich in einer 68k Umgebung nunmal zuhause. Viel habe ich auch mit dem 
Z180 angestellt, aber das ist ja kein Microkontroller im Sinnes dieses 
Forums.


Reiner

Autor: Bernhard T (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo HDW zu deiner eigentlichen Frage: Ich glaube das geht ganz 
einfach, du brauchst nur den IORWF (oder) Befehl benutzen Bsp.:

MOVLW h'01'     ;wir wollen bit 1 setzen also:
IORWF h'06',1   ; setzte bit 1 xxxx xxx1 in Port B

MOVLW h'02'     ;wir wollen bit 2  setzen also:
IORWF h'06',1   ; setzte bit 2 xxxx xx1x in Port B

MOVLW h'04'     ;wir wollen bit 3  setzen also:
IORWF h'06',1   ; setzte bit 3 xxxx x1xx in Port B

Gruß Bernhard

Autor: Reiner (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Bernhard
einzelne Bits setzen/löschen geht so

bsf PORTB,3   ; setze Bit 3 am Portb

und

bcf PORTB,3   ; löschen Bit 3 am Portb

Reiner

Autor: Steffen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Wolfram,

ich denke mal Du willst die einzelnen Bits nacheinander also seriell 
ausgeben.

Das funktioniert so,

   rlf   0,1       ; durch fsr adressiertes Register um eine Stelle nach 
links rotieren
                   ; Bit 7 ist jetzt in c
   btfss c
   bcf   portb,5
   btfsc c
   bsf   portb,5   ; an portb,6 ausgeben

Das Ganze in einer Schleife 8 mal und dann weiter mit dem nächsten Byte.

MfG
Steffen

Autor: Steffen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Damit es gleich ohne Probleme geht PORTB groß schreinen. (Gewohnheit)

Autor: HDW (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das Rotieren ist mal eine Idee.

Ich habe mitterweile mit den Bit-Test-Befehlen hantiert und mein 
Goldwafer-Karten-Schloss übers Wochenende gebaut.
Mit dem Rotieren wäre das wohl sinnvoller gewesen, aber was solls.


mfg   Wolfram Hildebrandt

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.