Prof. Dr. Sven-Hendrik Voß Wintersemester 2015 Technische Informatik (Bachelor), Semester 2 Termin 10, 08.12.2015 Maschinenorientierte Programmierung
Seite 2 Timer- und Counter-Programmierung Maschinenorientierte Programmierung Wintersemester 2015 Inhaltsverzeichnis Themen und Termine Lernziele Unterschied Timer und Counter Timer und Counter im 8051 Betriebsarten von Timer und Counter Timer-Programmierung Timer SFR Timer/Counter 1 in Modus 1 Timer/Counter 1 in Modus 2 Programmierung des Timers Beispielprogramm Zusammenfassung
Seite 3 Timer- und Counter-Programmierung Maschinenorientierte Programmierung Wintersemester 2015 Themen und Termine - Seminaristischer Unterricht Seminaristischer Unterricht (SU) im Raum B-321, dienstags 08:00-09:30 Uhr Termin Datum Themen 1 06.10. Organisatorisches, Einführung Rechnerarchitekturen 2 13.10. Befehlsausführung und Organisationsprinzipien 3 20.10. Adressierung und Maschinenprogrammierung 4 27.10. Programmiermodell des 8051 Mikrocontrollers 5 03.11. Assemblersyntax des 8051 6 10.11. Assemblersyntax des 8051 7 17.11. Betriebsmodi und Interfacing des 8051 8 24.11. I/O Port-Programmierung, Umgang mit Instruktionen und Programme 9 01.12. Interrupt-Programmierung 10 08.12. Timer- und Counter-Programmierung 11 15.12. Aufbau und Programmierung von seriellen Kommunikationsschnittstellen 12 22.12. Benutzung der seriellen Schnittstelle, Timer, Interrupts 13 05.01. Praxisbeispiele 14 12.01. Praxisbeispiele 15 19.01. Hardwarenahe Programmierung in C 16 26.01. Ausgewählte Themen der Maschinenprogrammierung 17 02.02. Klausur 18 09.02. Klausurrückgabe und Besprechung
Seite 4 Timer- und Counter-Programmierung Maschinenorientierte Programmierung Wintersemester 2015 Lernziele Nach diesem Termin sollten Sie... die Funktionalität von Timer/Counter kennen die prinzipiellen Vorgänge bei der Timer-Programmierung verstanden haben Programme unter Benutzung von Timern schreiben können
Seite 5 Timer- und Counter-Programmierung Maschinenorientierte Programmierung Wintersemester 2015 Unterschied Timer und Counter Was ist ein Timer? Worin unterscheidet sich ein Counter? Counter (Zähler) Einheit, die Binärzahlen generiert diese Binärzahlen folgen einer bestimmten Zählreihenfolge dies wird durch einen eingehenden Impuls ausgelöst Timer (Zeitgeber) Zähler, die Impulse zählen falls die Pulse Clock -Impulse sind, dann zählen die Timer eine Zeit somit: Generierung einer definierten Zeitspanne möglich
Seite 6 Timer- und Counter-Programmierung Maschinenorientierte Programmierung Wintersemester 2015 Anwendung von Timer und Counter Wozu das Ganze? Nützliche Anwendung bei: Generierung von Zeitverzögerungen (vgl. Programmlaufzeiten) Messung von Pulsdauer oder Zeitintervallen Zählen von Impulsen oder Ereignissen Generierung und Auswertung von PWM-Signalen Generierung eines Baudraten-Taktes für internen seriellen I/O Port Erzeugung von Interrupts...
Seite 7 Timer- und Counter-Programmierung Maschinenorientierte Programmierung Wintersemester 2015 Timer und Counter im 8051 8051 verfügt über zwei Timer/Counter: Timer/Counter 0 und 1 Timer/Counter (Zeitgeber/Zähler) Doppelfunktion Einsatz (programmierbar) als Ereigniszähler (Counter, extern getaktet) als Zeitgeber (Timer, intern getaktet) Timer/Counter 0 und 1 sind (fast) identisch einziger Unterschied: nur Timer/Counter 1 kann Sendetakt für serielle Schnittstelle generieren
Seite 8 Timer- und Counter-Programmierung Maschinenorientierte Programmierung Wintersemester 2015 Betriebsarten von Timer und Counter Timer Betriebsart Zählregister wird durch internen Takt hochzählt Inkrementierung um 1 bei jedem internen Taktzyklus (Erinnerung: 1 Maschinenzyklus besteht aus 12 Oszillatorimpulsen) bei Oszillatorfrequenz f = 12MHz entspricht das einem Schritt pro 1µs Counter Betriebsart Zählregister wird durch fallende Flanke an externem Eingang (T0, P3.4 für Timer 0, T1, P3.5 für Timer 1) einen Schritt hochgezählt Erkennung der Flanke benötigt 2 Maschinenzyklen bei Oszillatorfrequenz f = 12MHz entspricht das 2µs externe Takterkennung von maximal 500kHz
Seite 9 Timer- und Counter-Programmierung Maschinenorientierte Programmierung Wintersemester 2015 Betriebsarten von Timer und Counter Programmierung der Timer erfolgt über SFRs (TMOD und TCON) jeder Timer hat auch zwei SFRs ausschließlich für sich selbst (THx/TLx) THx/TLx sind Zählregister (High und Low Byte) 4 Betriebsmodi Modus 0: 5 Bit Teiler (Low-Byte) und nachgeschalteter 8-Bit-Zähler Modus 1: 16-Bit-Counter/Timer (Low- und High-Byte) Modus 2: 8-Bit-Counter/Timer mit automatischem 8-Bit-Reload Modus 3: Timer bildet 2 unabhängige 8-Bit-Timer (nur Timer 0)) Modus 1 und 2 sind die zwei wichtigsten (Betriebsarten 0 und 3 aufgrund Kompatibilität zu älteren Mikrocontrollern)!
Seite 10 Timer- und Counter-Programmierung Maschinenorientierte Programmierung Wintersemester 2015 Betriebsarten von Timer und Counter Funktion: Zeitgeber (Timer) - Interne Takt zählen Internes Taktsignal Timer Interrupt z.b. 256 z.b. 256 Funktion: Zähler (Counter) - Externe Pulse zählen Impulseingang T0 / T1 Gate Signal INT0 / INT1
Seite 11 Timer- und Counter-Programmierung Maschinenorientierte Programmierung Wintersemester 2015 Betriebsarten von Timer und Counter Wichtige Steuereingänge für Timer/Counter 8051 Eingänge für externe Interruptquellen oder Gate Signal für Timer Eingänge für Counter alternativ auch normale Ein-/ Timer 0 Ausgabe-Ports für Primärmodus Timer 1
Seite 12 Timer- und Counter-Programmierung Maschinenorientierte Programmierung Wintersemester 2015 Timer-Programmierung Funktionsweise Timer zählen stets aufwärts von Null oder einem programmierten Anfangswert beim Übergang des Maximalwertes auf 0 im Zählregister (Überlauf) wird Interrupt-Flag TF0/TF1 gesetzt Bit kann Interrupt auslösen oder zyklisch abgefragt werden (Polling-Verfahren) Spezialfall Auto-Reload ein Byte des Zeitgebers Anfangswert, anderes Byte zählt vom Anfangswert jeweils bis zum Maximalwert Neuladen des Anfangswert aus dem anderen Byte bei Ablauf zyklisches Fortsetzen ohne Programmeingriff Methode zur Erzeugung eines unabhängigen, periodischen Signals mit einstellbarer Periode
Seite 13 Timer- und Counter-Programmierung Maschinenorientierte Programmierung Wintersemester 2015 Timer-Programmierung Programmierung über TCON und TMOD Funktionsweise der Timer/Counter 0 und 1 wird durch die SFRs TCON und TMOD gesteuert Timer Control Register (TCON) startet und stoppt Timer/Counter und beinhaltet deren Überlaufbits Timer Mode Register (TMOD) definiert die grundlegenden Einstellungen und den Modus der beiden Timer/Counter jeder Timer/Counter enthält zwei 8-Bit-Register TL0/TH0 bzw. TL1/TH1 Achtung beim Beschreiben der SFRs: TCON ist bitadressierbar, TMOD ist nicht bitadressierbar!
Seite 14 Timer- und Counter-Programmierung Maschinenorientierte Programmierung Wintersemester 2015 Timer SFR Special Function Register TCON an Adresse 88h, bitadressierbar Reset Wert 00h enthält Flags zur generellen Steuerung der Timer/Counter und Interrupts Timer 0/1 Control Register TCON MSB TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0 LSB beeinflussen die Funktion von Timer/Counter 0 und 1 steuern die Interrupts INT0 und INT1 TF1 Timer 1 Overflow Flag: wird bei Überlauf des Timer/Counter gesetzt und beim Sprung zur Interrupt Routine gelöscht TR1 Timer 1 Start-/Stopbit (Run): schaltet Timer 1 ein (1) oder hält ihn an (0) TF0 Timer 0 Overflow Flag: wird bei Überlauf des Timer/Counter gesetzt und beim Sprung zur Interrupt Routine gelöscht TR0 Timer 0 Start-/Stopbit (Run): schaltet Timer 0 ein (1) oder hält ihn an (0)
Seite 15 Timer- und Counter-Programmierung Maschinenorientierte Programmierung Wintersemester 2015 Timer SFR Special Function Register TCON Timer 0/1 Control Register TCON MSB TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0 LSB beeinflussen die Funktion von Timer/Counter 0 und 1 steuern die Interrupts INT0 und INT1 IE1 IT1 IE0 IT0 Interrupt 1 Request Flag: wird bei externem Interrupt /INT1 gesetzt und bei Ausführung des Interrupts gelöscht Interrupt 1 Typ: Wert 1 für Flankentriggerung Interrupt wird ausgelöst bei einer Negativ-Flanke an /INT1, Wert 0 für Pegeltriggerung Interrupt wird ausgelöst solange LOW-Pegel an /INT1 anliegt Interrupt 0 Request Flag: wird bei externem Interrupt /INT0 gesetzt und bei Ausführung des Interrupts gelöscht Interrupt 0 Typ: Wert 1 für Flankentriggerung Interrupt wird ausgelöst bei einer Negativ-Flanke an /INT0, Wert 0 für Pegeltriggerung Interrupt wird ausgelöst solange LOW-Pegel an /INT0 anliegt
Seite 16 Timer- und Counter-Programmierung Maschinenorientierte Programmierung Wintersemester 2015 Timer SFR Special Function Register TMOD an Adresse 89h, nur byte-adressierbar Reset Wert 00h legt die Betriebsarten der Timer/Counter 0 und 1 fest Timer 0/1 Mode Register TMOD MSB Gate C/T M1 M0 Gate C/T M1 M0 LSB steuern Arbeitsweise von Timer 1 steuern Arbeitsweise von Timer 0 Gate aktiviert = 1, dann Timer-/Counter-Freigabe bei High-Signal an Eingang P3.2 für Timer 0 (/INT0) bzw. P3.3 für Timer 1 (/INT1); deaktiviert = 0, dann keine Abhängigkeit von externer Freigabe C/T Counter oder Timer Auswahlbit, Wert 1 für Counter-Betrieb (ext. Takt an P3.4 für Timer 0 bzw. P3.5 für Timer1); Wert 0 für Timer-Betrieb (int. Takt mit Osz.-Frequenz : 12) M1, M0 Auswahl der 4 Timer Modi 0, 1, 2, 3
Seite 17 Timer- und Counter-Programmierung Maschinenorientierte Programmierung Wintersemester 2015 Timer/Counter 1 in Modus 1 Modus 1: 16-Bit-Counter/Timer P3.5 T1 OSC C/T=0 :12 TL1 TH1 C/T=1 0 1 Gate C/T M1 M0 Gate C/T M1 M0 0=open 1=close 8 Bit 8 Bit P3.3 /INT1 TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0 16-Bit Timer, ohne Autoreload entspricht dem Modus 0 mit 16 Bits anstelle von 13 (5+8) Zähler ist auf TL1 und TH1 aufgeteilt und wird inkrementiert ist 8-Bit Zählregister TL1 abgelaufen, wird 8-Bit-Zählregister TH1 weitergezählt (Timer Flag wird high, wenn FFFFh 0h) nach einmaligem Zählvorgang muss Timer neu gestartet werden
Seite 18 Timer- und Counter-Programmierung Maschinenorientierte Programmierung Wintersemester 2015 Timer/Counter 1 in Modus 2 Modus 2: 8-Bit-Counter/Timer mit automatischem 8-Bit-Reload P3.5 T1 P3.3 /INT1 OSC 8 Bit C/T=0 :12 TL1 C/T=1 1 0 Gate C/T M1 M0 Gate C/T M1 M0 0=open 1=close TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0 TH1 8 Bit Reload 8-Bit Autoreload Timer Low Byte TL1 wird zum Zähler und inkrementiert High Byte TH1 enthält 8-Bit Nachladewert bei Überlauf wird Zählregisters TH1 nach TL1 kopiert Zählvorgang beginnt neu Nachladevorgang verändert TH1 nicht
Seite 19 Timer- und Counter-Programmierung Maschinenorientierte Programmierung Wintersemester 2015 Timer/Counter 0 oder 1 P3.5 T1 P3.4 T0 P3.3 /INT1 P3.2 /INT0 OSC C/T=0 :12 TL1 TH1 externer Zähltakt externe Steuerung Hardwareeingänge TMOD C/T=1 Gate C/T M1 M0 Gate C/T M1 M0 NOT TCON OR AND TL0 Timer 0 TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0 TH0 Timer 1
Seite 20 Timer- und Counter-Programmierung Maschinenorientierte Programmierung Wintersemester 2015 Programmierung des Timers Schritt-für-Schritt Anleitung für das Programmieren einer Zeitverzögerung (Modus 0 oder 1) 1. Lade den Wert in das TMOD Register, der angibt, welcher Timer (Timer 0 oder Timer 1) benutzt werden soll und in welchem Modus (0 oder 1) TMOD z.b. mit Wert 00000001b (Timer 0, Modus 1 (16-Bit Modus)) 2. Lade Register TL und TH mit einem Anfangswert 3. Starte den Timer TRx auf 1 setzen 4. Timer-Flag TFx beobachten (Polling, Interrupt), um Timerstatus zu ermitteln Polling beispielsweise mit JNB TFx, Ziel 5. Stoppe den Timer 6. Lösche das TF Flag für die nächste Runde (nur beim Polling) 7. Geh zurück zu Schritt 2 und Lade TH und TL wieder Achtung: Für die Behandlung mit Interrupts sind zusätzliche Schritte erforderlich, so z.b. die globale Freigabe, dann die Freigabe des Timer Interrupts im IE-Register, etc.
Seite 21 Timer- und Counter-Programmierung Maschinenorientierte Programmierung Wintersemester 2015 Programmierung des Timers Schritt-für-Schritt Anleitung für das Programmieren einer Zeitverzögerung (Modus 2) 1. Lade den Wert für Modus 2 in das TMOD Register und definiere welcher Timer (Timer 0 oder Timer 1) benutzt werden soll TMOD z.b. mit Wert 00100000b (Timer 1, Modus 2 (8-Bit Auto-Reload)) 2. Lade Register TH mit einem Anfangswert 3. Starte den Timer TRx auf 1 setzen 4. Timer-Flag TFx beobachten (Polling, Interrupt), um Timerstatus zu ermitteln Polling beispielsweise mit JNB TFx, Ziel 5. Lösche das TF Flag (nur beim Polling) 6. Geh zurück zu Schritt 4, da Modus 2 automatisch nachlädt und zwischendurch nicht gestoppt werden muss
Seite 22 Timer- und Counter-Programmierung Maschinenorientierte Programmierung Wintersemester 2015 Behandlung der Zählerwerte Berechnung der Zähler-Anfangswerte (TH1, TL1 oder TH0, TL0) wovon abhängig? Ideen für eine mathematische Formel zur Berechnung?
Seite 23 Timer- und Counter-Programmierung Maschinenorientierte Programmierung Wintersemester 2015 Beispielprogramm Beispiel für eine Timer-Programmierung 1 MOV TMOD, #01 Sprung: MOV TL0, #11110010b 3 MOV TH0, #11111111b CPL P1.5 5 ACALL Delay SJMP Sprung 7 Delay: SETB TR0 9 Nochmal: JNB TF0, Nochmal CLR TR0 11 CLR TF0 RET 1. Welche Werte nimmt das Zählregister nach Initialisierung wie oben an? 2. Wievielen Zählzyklen entspricht das? 3. Was für eine Frequenz wird schließlich hier umgesetzt? (Annahme: 12 MHz Referenztakt)
Seite 24 Timer- und Counter-Programmierung Maschinenorientierte Programmierung Wintersemester 2015 Zusammenfassung Heute haben Sie gelernt... wie ein Programm ohne Verwendung von Zählschleifen definierte Zeiten generieren kann wie externe Impulse gezählt werden können wie man die Timer Peripherie-Komponente des 8051 in Betrieb nimmt
Seite 25 Timer- und Counter-Programmierung Maschinenorientierte Programmierung Wintersemester 2015 Ausblick auf nächste Stunde In der nächsten Stunde widmen wir uns... einigen Grundlagen der Kommunikationstechnik der Programmierung der seriellen Schnittstelle dem Einsatz der seriellen Schnittstellen des 8051 Mikrocontrollers
Seite 26 Timer- und Counter-Programmierung Maschinenorientierte Programmierung Wintersemester 2015 Hinweise zum Selbststudium Zur Vertiefung wird empfohlen... MOP-Skript (Kapitel noch nicht fertig) M. Mazidi, J. Mazidi, R. McKinlay: The 8051 Microcontroller and Embedded Systems Using Assembly and C, Prentice Hall, ISBN 013119402X
Seite 27 Timer- und Counter-Programmierung Maschinenorientierte Programmierung Wintersemester 2015 Kritik Nun sind Sie dran: Kritik: Was funktioniert gut / was schlecht? Anregungen Wünsche Verbesserungsvorschläge in Bezug auf Inhalt und Organisation der Vorlesung