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
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
Hm. Das ist ja nicht so schön. Vielleicht wird das ja mal iregendwann geändert.
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
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
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.
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
@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
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
@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.
@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
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
@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
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
Damit es gleich ohne Probleme geht PORTB groß schreinen. (Gewohnheit)
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
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.