| |
|
PIC16F877 |
|
|
|
|
|
Beispiel mit dem PIC16F887 von Microchip
Mit diesem Beispiel in Assembler kann man acht LEDs bei PORTC einschalten. Für den PIC16F87X-Microcontroller muss man bei der Initialisiereung sehr viel aufpassen.
Die Analoge-Eingänge des Microcontrollers sind per "default" aktiviert. Und PORTC kann nur nach dem Befehl BANKSEL TRISC konfiguriert werden.
8 LEDs eingeschaltet (PicBoard 16F887 von MAW Engineering)
Damit der Microcontroller programmiert werden kann, muss man das Programm mit der Entwicklungsumgebung "MPLAB IDE" kompilieren, runterladen und dann
laufen lassen. In der unten stehenden Abbildung sieht man die Ausgangslage für den Test:
Für die Erstellung des Projektes soll man den ASM-Code kopieren und kompilieren:
Beispiel: Lauflicht mit dem PIC16F887 von Microchip
Das Beispiel zeigt beim PORTC ein Lauflicht von links nach rechts und dann von rechts nach links. Damit die LED nicht zu schnell eingeschaltet werden,
steht die Subroutine wait_10ms zur Verfügung. Diese Subroutine wartet 10 ms.
Wie funtioniert diese Subroutine?
Diese Subroutine verwendet die Funktion wait_50us, die 200 mal mit einer Schleife ausgeführt wird (siehe Variable 'k' und Befehl DECFSZ). Diese Funktion wait_50us besteht grundsätzlich aus 100 NOP, die 50 us Wartezeit
erzeugen können.
Man muss beachten, dass die Wartezeit vom Quarz des Mikrocontrollers abhängig ist. Bei 8 MHz benötigt ein NOP genau 0.5 us (1/8MHz * 4). Mit 100 NOP ist die Wartezeit sehr
einfach zu berechnen, und zwar: 100 * 0.5 us= 50 us.
Wennn man die Wartezeit von 50 us mit der Schleife 200 mal ausführt, bekommt man eine Wartezeit von genau 10ms.
Beispiel: Taste überprüfen und dann LEDs einschalten mit dem PIC16F887 von Microchip
Mit diesem Beispiel werden acht LEDs bei PORTC einschaltet, wenn die Taste bei RB0 (PORTB) betätigt wird.
Für die Programmierung muss man folgende Punkte berücksichtigen:
1) RB0 von PORTB muss als Eingang definiert werden
2) PORTC muss als Ausgang konfiguriert werden
Das Programm besteht aus einer Schleife (siehe WHILE_1), die konstant RB0 überprüft.
Sobald die Taste betätigt wird (RB0=1), wird der Befehl BTFSS (Bit Test Skip if Set) den
Eingang RB0 überprüfen und dann direkt den Befehlt GOTO MAIN ausführen.
Nach diesem Befehl werden dann die 8 LEDs eingeschaltet (siehe MAIN-Schleife).
| |
|
|
|