einfache PIC-Übungsprogramme Schreibe in MPLAB für das PIC-Übungsboard 01 mit dem PIC16F88 folgendes Programm, assembliere und dokumentiere dieses, schreibe es anschließend mittels dem Programmiergerät PICKIT2 in den PIC und präsentiere es. Verwende den vordefinierten Header. Skizziere ein Flussdiagramm, zur leichteren Umsetzung und zum besseren Verständnis. RA0 bis RA3 Eingänge, RA4 Ausgang, RB0 bis RB7 Ausgänge. Anmerkung: Masken werden mit bitweisen Operationen wie AND-, OR- oder XOR- Verknüpfungen gebildet! 1. Inkrementieren Unterprogramm Warte500ms für eine Warteschleife von ca. ½s. Warte500ms aufrufen, Wert von PortB um eins erhöhen (inkrementieren), Warte500ms aufrufen, Wert von PortB um eins erhöhen (inkrementieren), das soll solange weiter gehen bis PortB den Wert Dezimal 128 erreicht hat, nach einem nochmaligen Aufrufen von Warte500ms soll das Hauptprogramm wieder von Anfang 2. Linksschieben Unterprogramm Warte5ms für eine Warteschleife von ca. 5ms. auf PortB Dezimal 1 ausgeben, RA1 solange abfragen, bis er Low ist, PortB um eine Stelle nach links schieben, nach der letzten Stelle darf es keinen leeren Zustand (d. h. PortB = 0, wo keine LED leuchtet) geben (Carry-Bit?), danach soll das Hauptprogramm wieder mit der RA1-High-Abfrage 3. Nibbles vertauschen, Port komplementieren Unterprogramm Warte3s für eine Warteschleife von ca. 3s auf Port B Binär 10100101 ausgeben Nibbles auf PortB vertauschen (swapf), PortB komplementieren (comf), auf PortB Binär 10101111 augeben, Nibbles auf PortB vertauschen (swapf), PortB komplementieren (comf), danach soll der Ablauf (das Programm) stoppen (Sprung auf sich selbst). Seite 1 wis; HTL Wien 10
4. Alle 3 Tasten hintereinander gedrückt Unterprogramm Warte6ms für eine Warteschleife von ca. 6ms. RA1 (PortA, Bit1) solange abfragen bis er High ist, RA2 solange abfragen, bis er High ist, RA3 solange abfragen, bis er High ist, auf PortB Dezimal 17 ausgeben, RA2 solange abfragen, bis er High ist, 5. Addieren Unterprogramm Warte1s für eine Warteschleife von ca. 1s. Warte1s aufrufen, zum Wert von PortB Dezimal 2 addieren, Warte1s aufrufen, zum Wert von PortB Dezimal 2 addieren, das soll solange weiter gehen bis PortB den Wert Dezimal 64 erreicht hat, nach einem nochmaligen Aufrufen von Warte1s soll das Hauptprogramm wieder von Anfang an 6. Rechtsschieben Unterprogramm Warte8ms für eine Warteschleife von ca. 8ms. auf PortB Dezimal 128 ausgeben, RA3 (PortA, Bit3) solange abfragen, bis er High ist, Warte8ms aufrufen, RA3 solange abfragen, bis er Low ist, Warte8ms aufrufen, PortB um eine Stelle nach rechts schieben, nach der ersten Stelle darf es keinen leeren Zustand (d. h. PortB = 0, wo keine LED leuchtet) geben (Carry-Bit?), danach soll das Hauptprogramm wieder mit der RA3-High-Abfrage 7. Gleichzeitiges Drücken aller 3 Tasten Unterprogramm Warte2s für eine Warteschleife von ca. 2s. PortA in Variable speichern (über W), Abfrage ob Bit 1 in Variable High ist, wenn nein, Rücksprung zum Hauptprogrammbeginn, Abfrage ob Bit 2 in Variable High ist, wenn nein, Rücksprung zum Hauptprogrammbeginn, Abfrage ob Bit 3 in Variable High ist, wenn nein, Rücksprung zum Hauptprogrammbeginn, auf PortB Dezimal 129 ausgeben, Warte2s aufrufen, Seite 2 wis; HTL Wien 10
8. Multiplizieren Unterprogramm Warte2s für eine Warteschleife von ca. 2s. auf PortB Dezimal 10 ausgeben Warte2s aufrufen, den Wert auf PortB mit 2 multiplizieren (1 mal nach links schieben), das PortB soll noch 3 mal mit 2 multipliziert werden, dazwischen immer Warte2s aufrufen nach einem nochmaligen Aufrufen von Warte2s soll das Hauptprogramm wieder von Anfang an 9. Subtrahieren Unterprogramm Warte750ms für eine Warteschleife von ca. 3/4s. auf PortB Dezimal 140 ausgeben, Warte750ms aufrufen, vom Wert von PortB 4 subtrahieren, Warte750ms aufrufen, vom Wert von PortB 4 subtrahieren, das soll solange weiter gehen bis PortB den Wert 0 erreicht hat, nach einem nochmaligen Aufrufen von Warte750ms soll das Hauptprogramm wieder von Anfang 10. Ausmaskierung löschen Unterprogramm Warte5s für eine Warteschleife von ca. 5s auf PortB Binär 10011101 ausgeben, RA2 (PortA, Bit2) solange abfragen, bis er High ist, Bit RB4 und RB5 mittels einer Maske (bitweise Operation) löschen, Warte5s aufrufen, Bit RB1 und RB6 mittels einer Maske (bitweise Operation) löschen, Warte5s aufrufen, 11. Ausmaskierung komplementieren Unterprogramm Warte6s für eine Warteschleife von ca. 6s auf PortB Binär 01100111 ausgeben, Bit RB0 und RB3 mittels einer Maske (bitweise Operation) komplementieren (negieren), Warte6s aufrufen, Bit RB2 und RB7 mittels einer Maske (bitweise Operation) komplementieren (negieren), Warte6s aufrufen, 12. Dividieren Unterprogramm Warte2s5 für eine Warteschleife von ca. 2,5s. auf PortB Dezimal 160 ausgeben Warte2s5 aufrufen, den Wert auf PortB durch 2 dividieren (1 mal nach rechts schieben), das PortB soll noch 4 mal durch 2 dividiert werden, dazwischen immer Warte2s5 aufrufen nach einem nochmaligen Aufrufen von Warte2s5 soll das Hauptprogramm wieder von Anfang an Seite 3 wis; HTL Wien 10
13. Dekrementieren Unterprogramm Warte250ms für eine Warteschleife von ca. 1/4s. auf PortB Dezimal 235 ausgeben, Warte250ms aufrufen, Wert von PortB um eins verringern (dekrementieren), Warte250ms aufrufen, Wert von PortB um eins verringern (dekrementieren), das soll solange weiter gehen bis PortB den Wert 0 erreicht hat, nach einem nochmaligen Aufrufen von Warte250ms soll das Hauptprogramm wieder von Anfang 14. Sound Unterprogramm Warte500us für eine Warteschleife von ca. 1/2ms RA1 (PortA, Bit1) abfragen, ob er High ist, wenn ja, Ablauf (Programm) stoppen (Sprung auf sich selbst), RA4 setzen, Warte500us aufrufen, RA4 löschen, Warte500us aufrufen, 15. Ausmaskierung setzen Unterprogramm Warte4s für eine Warteschleife von ca. 4s auf PortB Binär 01101100 ausgeben, RA3 (PortA, Bit3) solange abfragen, bis er High ist, Bit RB1 und RB2 mittels einer Maske (bitweise Operation) setzen, Warte4s aufrufen, Bit RB6 und RB7 mittels einer Maske (bitweise Operation) setzen, Warte4s aufrufen, 16. Taste entprellen Unterprogramm Warte5ms für eine Warteschleife von ca. 5ms RA1 (PortA, Bit1) solange abfragen, bis er Low ist, auf PortB Dezimal 237 ausgeben, RA2 (PortA, Bit2) solange abfragen, bis er High ist, RA2 (PortA, Bit2) solange abfragen, bis er Low ist, Seite 4 wis; HTL Wien 10
17. Links-/Rechtsschieben Unterprogramm Warte5ms für eine Warteschleife von ca. 5ms auf PortB Binär 00001000 ausgeben, RA1 (PortA, Bit1) abfragen, ob er High ist, RA2 (PortA, Bit2) abfragen, ob er High ist, Abfrage solange wiederholen, bis RA1 oder RA2 High ist, wenn RA1 High ist, RA1 solange abfragen, bis er Low ist, PortB um eine Stelle nach links schieben (Carry-Bit vorher löschen), Rücksprung zur RA1-Abfrage wenn RA2 High ist, RA2 solange abfragen, bis er Low ist, PortB um eine Stelle nach rechts schieben (Carry-Bit vorher löschen) Rücksprung zur RA1-Abfrage Seite 5 wis; HTL Wien 10