Radfahrer
14.10.2009, 12:17
Hallo und dies ist auch mein 1. Beitrag.
Ich habe mit PICs bereits ein wenig herumgespielt und die eine oder andere Schaltung damit realisiert.
Ich programmiere in Assembler, um die PICs besser kennenzulernen, auch wenns zeitaufwändig ist.
Allerdings immer auf einem sehr einfachen Niveau, ich erarbeite mir noch Grundlagen.
Wie z.B.:
Ich möchte die internen Pull-UP-Wiederstände an GPIO3&4 nutzen.
; Initialisierung des Controllers
Zeile 1 bsf STATUS,RP0 ; Auswahl Bank 1
Zeile 2 call 0x3FF ; Laden des Kalibrierungswertes aus der letzten Speicherstelle
Zeile 3 movwf OSCCAL ; Neuladen der Kalibrierungswerte für den internen Takt
Zeile 4 movlw B'00111000' ; 3,4,5 = Eingang 0,1,2 = Ausgang
Zeile 5 movwf TRISIO ; Schieben des geladenen Wertes in das Register TRISIO
Zeile 6 CLRF ANSEL ; Deaktivieren der A/D-Wandler
Zeile 7 bcf OPTION_REG, 7 ; pull-up master Ermöglicht Pull-Ups zu schalten
Zeile 8 movlw B'00110000' ; Bei GPIO4&5 int. Pull-Ups zuschalten
Zeile 9 movwf WPU ; WPU = WEAK PULL UP Register
Zeile 10 bcf STATUS,RP0 ; Auswahl Bank 0
Zeile 10 clrf GPIO ; Löschen aller Ausgänge
Zeile 11 clrf INTCON ; Abschalten aller Interrupts und Löschen der Flags
Das Programm als Ganzes läuft.
Ziehe ich (mit einem Schalter) GPIO3 (hat einen externen Pull-Up) auf "0", dann funktioniert die Schaltung wie gewünscht.
Zeile 7, 8 und 9 sind die entscheidenden, neuen Befehle.
Damit soll es möglich sein, wenn GPIO4 oder 5 auf "0" gezogen werden, dass das Programm so weiterarbeitet, als wenn GPIO3 auf "0" gezogen werde.
Mit GPIO3 gehts, mit GPIO4 oder 5 nicht.
Woran liegts?
Die Eingangsabfrage sieht übrigens so aus:
HAUPT
btfss GPIO,3 ; Abfragen des Einganges GPIO3, ob Taster gedrückt wird
goto HandyLöschen ; Wenn Taste gedrückt, springe zur Marke "HandyLöschen"
btfss GPIO,4 ; Abfragen des Einganges GPIO3, ob Taster gedrückt wird
goto HandyLöschen ; Wenn Taste gedrückt, springe zur Marke "HandyLöschen"
btfss GPIO,5 ; Abfragen des Einganges GPIO3, ob Taster gedrückt wird
goto HandyLöschen ; Wenn Taste gedrückt, springe zur Marke "HandyLöschen"
Nein ; Wenn nicht gedrückt, dann von Abfrage von vorne
goto HAUPT ; Und wieder von vorne!
Bis dann,
Peter W.
Ich habe mit PICs bereits ein wenig herumgespielt und die eine oder andere Schaltung damit realisiert.
Ich programmiere in Assembler, um die PICs besser kennenzulernen, auch wenns zeitaufwändig ist.
Allerdings immer auf einem sehr einfachen Niveau, ich erarbeite mir noch Grundlagen.
Wie z.B.:
Ich möchte die internen Pull-UP-Wiederstände an GPIO3&4 nutzen.
; Initialisierung des Controllers
Zeile 1 bsf STATUS,RP0 ; Auswahl Bank 1
Zeile 2 call 0x3FF ; Laden des Kalibrierungswertes aus der letzten Speicherstelle
Zeile 3 movwf OSCCAL ; Neuladen der Kalibrierungswerte für den internen Takt
Zeile 4 movlw B'00111000' ; 3,4,5 = Eingang 0,1,2 = Ausgang
Zeile 5 movwf TRISIO ; Schieben des geladenen Wertes in das Register TRISIO
Zeile 6 CLRF ANSEL ; Deaktivieren der A/D-Wandler
Zeile 7 bcf OPTION_REG, 7 ; pull-up master Ermöglicht Pull-Ups zu schalten
Zeile 8 movlw B'00110000' ; Bei GPIO4&5 int. Pull-Ups zuschalten
Zeile 9 movwf WPU ; WPU = WEAK PULL UP Register
Zeile 10 bcf STATUS,RP0 ; Auswahl Bank 0
Zeile 10 clrf GPIO ; Löschen aller Ausgänge
Zeile 11 clrf INTCON ; Abschalten aller Interrupts und Löschen der Flags
Das Programm als Ganzes läuft.
Ziehe ich (mit einem Schalter) GPIO3 (hat einen externen Pull-Up) auf "0", dann funktioniert die Schaltung wie gewünscht.
Zeile 7, 8 und 9 sind die entscheidenden, neuen Befehle.
Damit soll es möglich sein, wenn GPIO4 oder 5 auf "0" gezogen werden, dass das Programm so weiterarbeitet, als wenn GPIO3 auf "0" gezogen werde.
Mit GPIO3 gehts, mit GPIO4 oder 5 nicht.
Woran liegts?
Die Eingangsabfrage sieht übrigens so aus:
HAUPT
btfss GPIO,3 ; Abfragen des Einganges GPIO3, ob Taster gedrückt wird
goto HandyLöschen ; Wenn Taste gedrückt, springe zur Marke "HandyLöschen"
btfss GPIO,4 ; Abfragen des Einganges GPIO3, ob Taster gedrückt wird
goto HandyLöschen ; Wenn Taste gedrückt, springe zur Marke "HandyLöschen"
btfss GPIO,5 ; Abfragen des Einganges GPIO3, ob Taster gedrückt wird
goto HandyLöschen ; Wenn Taste gedrückt, springe zur Marke "HandyLöschen"
Nein ; Wenn nicht gedrückt, dann von Abfrage von vorne
goto HAUPT ; Und wieder von vorne!
Bis dann,
Peter W.