Interrupt - Programmierung für den PIC12F675daten.schule.at/dl/Interrupt.pdf · list p=12f675 ;...

13
W. Prechelmacher: Interrupt-Programmierung für den PIC12F675 htl donaustadt Interrupt - Programmierung für den PIC12F675 Ein Interrupt ist eine asynchrone Unterbrechung des "normalen" Programmablaufs. Wenn ein Interrupt auftritt, wird der Befehl (bzw. die Befehle) ab Adresse 0x004 (="Interrupt-Vektor", Startadresse der Interrupt-Routine) ausgeführt (meistens ein Sprungbefehl in die eigentliche Interrupt-Service-Routine). Diese Unterbrechung wird durch bestimmte interne oder externe Ereignisse ausgelöst, wie z.B. das Überlaufen eines Timer-Registers oder eine steigende Taktflanke an einem bestimmten Port-Pin. Folgende Interruptquellen existieren für den PIC12F675: • External Interrupt GP2/INT • TMR0 Overflow Interrupt • GPIO Change Interrupts • Comparator Interrupt • A/D Interrupt (PIC12F675 only) • TMR1 Overflow Interrupt • EEPROM Data Write Interrupt Tritt eines dieser Interruptereignisse auf, so wird ein entsprechendes Flag-Bit zur Anzeige des Interrupt- Ereignisses gesetzt. Damit auch tatsächlich ein Interrupt ausgelöst wird, darf der Interrupt nicht maskiert sein (maskiert bedeutet, die maskierte Interruptquelle kann keinen Interrupt auslösen) Interrupts global aktiviert sein. Maskierung von Interrupts: Jede Interrupt-Quelle kann über ein entsprechendes Enable-Bit ein- oder ausgeschaltet (maskiert) werden. Manche Interrupt-Quellen sind in Gruppen zusammengefasst, wobei die ganze Gruppe ebenfalls über ein Enable-Bit ein/ausgeschaltet werden kann. Über das Global Enable Interrupt Bit (GIE) können auch alle Interrupts ein/od GPIF , lag) le) ) ) er ausgeschaltet werden. Interrupt on Change (IOC): alle IOC ein/aus: GPIE IOC-Flag für alle IOC: Port-Quellen: IOC-GPx Port-Enable-Bit: IOCx Peripheral Interrupts: (PEI) alle PEI ein/aus: PEIE Timer1: TMR1IF (Flag) TMR1IE (Enable-Bit) Comparator: CMIF (F CMIE (Enab A andler: ADIF (Flag) ADIE (Enable EEPROM: EEIF (Flag) EEIE (Enable) Timer0 Interrupt: (T0I) T0IF (Flag), T0IE (Enable-Bit) D-W External Interrupt: (INT INTF (Flag) INTE (Enable-Bi) 1/13 INTCON-Register: 7 6 5 4 3 2 1 0 GIE PEIE T0IE INTE GPIE T0IF INTF GPIF PIE1-Register: 7 6 5 4 3 2 1 0 EEIE ADIE CMIE TMR1IE IOC-Register: 7 6 5 4 3 2 1 0 IOC5 IOC4 IOC3 IOC2 IOC1 IOC0 PIR1-Register: 7 6 5 4 3 2 1 0 EEIF ADIF — CMIF TMR1IF

Transcript of Interrupt - Programmierung für den PIC12F675daten.schule.at/dl/Interrupt.pdf · list p=12f675 ;...

Page 1: Interrupt - Programmierung für den PIC12F675daten.schule.at/dl/Interrupt.pdf · list p=12f675 ; define processor type #include  ; include processor spezific definitions

W. Prechelmacher: Interrupt-Programmierung für den PIC12F675 htl donaustadt

Interrupt - Programmierung für den PIC12F675 Ein Interrupt ist eine asynchrone Unterbrechung des "normalen" Programmablaufs. Wenn ein Interrupt auftritt, wird der Befehl (bzw. die Befehle) ab Adresse 0x004 (="Interrupt-Vektor", Startadresse der Interrupt-Routine) ausgeführt (meistens ein Sprungbefehl in die eigentliche Interrupt-Service-Routine). Diese Unterbrechung wird durch bestimmte interne oder externe Ereignisse ausgelöst, wie z.B. das Überlaufen eines Timer-Registers oder eine steigende Taktflanke an einem bestimmten Port-Pin. Folgende Interruptquellen existieren für den PIC12F675:

• External Interrupt GP2/INT • TMR0 Overflow Interrupt • GPIO Change Interrupts • Comparator Interrupt • A/D Interrupt (PIC12F675 only) • TMR1 Overflow Interrupt • EEPROM Data Write Interrupt

Tritt eines dieser Interruptereignisse auf, so wird ein entsprechendes Flag-Bit zur Anzeige des Interrupt-Ereignisses gesetzt. Damit auch tatsächlich ein Interrupt ausgelöst wird, darf

• der Interrupt nicht maskiert sein (maskiert bedeutet, die maskierte Interruptquelle kann keinen Interrupt auslösen)

• Interrupts global aktiviert sein.

Maskierung von Interrupts: Jede Interrupt-Quelle kann über ein entsprechendes Enable-Bit ein- oder ausgeschaltet (maskiert) werden.

Manche Interrupt-Quellen sind in Gruppen zusammengefasst, wobei die ganze Gruppe ebenfalls über ein Enable-Bit ein/ausgeschaltet werden kann.

Über das Global Enable Interrupt Bit (GIE) können auch alle Interrupts ein/od

GPIF

,

lag) le)

)

)

er ausgeschaltet werden.

Interrupt on Change (IOC):alle IOC ein/aus: GPIE IOC-Flag für alle IOC: Port-Quellen: IOC-GPx Port-Enable-Bit: IOCx

Peripheral Interrupts: (PEI)alle PEI ein/aus: PEIE Timer1: TMR1IF (Flag) TMR1IE (Enable-Bit) Comparator: CMIF (F CMIE (EnabA andler: ADIF (Flag) ADIE (EnableEEPROM: EEIF (Flag) EEIE (Enable)

Timer0 Interrupt: (T0I) T0IF (Flag), T0IE (Enable-Bit)

D-W

External Interrupt: (INT INTF (Flag) INTE (Enable-Bi)

INTCON-Register: 7 6 5 4 3 2 1 0

GIE PEIE T0IE INTE GPIE T0IF INTF GPIF

1-Register:

1/13

PIE1-Register: 7 6 5 4 3 2 1 0

EEIE ADIE — — CMIE — — TMR1IEPIR

7 6 5 4 3 2 1 0 EEIF ADIF — — CMIF — — TMR1IF

IOC-Register: 7 6 5 4 3 2 1 0

— — IOC5 IOC4 IOC3 IOC2 IOC1 IOC0

Page 2: Interrupt - Programmierung für den PIC12F675daten.schule.at/dl/Interrupt.pdf · list p=12f675 ; define processor type #include  ; include processor spezific definitions

W. Prechelmacher: Interrupt-Programmierung für den PIC12F675 htl donaustadt

Vorbamit Interrupts in einem Programm verwendet werden können, müssen die entsprechenden Register NTCON0, PIE1, PIF1, IOC) sorgfältig initialisiert werden:

Aktivieren der gewünschten Interrupts n Interrupts UND die Enable-Bits der zugehörigen Interrupt-Gruppen

n auf 0

normalerweise ALLE Interrupt-Flags vor Aktivieren der Interrupts auf 0

3.

Ab bBeim A(Interru zweigt, von wo in den meisten Fällen die eigentliche Interrupt-Service-Routine (ISR) angesprungen wird.

rupt-Quelle festgestellt und der Interrupt entsprechend behandelt.

rviced:

• The GIE is cleared to disable any further interrupt

n address is pushed onto the stack

4h

Once in the Interrupt Service Routine, the source(s) of the interrupt can b s. The interrupt flag bit(s) must be cleared in software before re-enabling interrupts to avoid multiple interrupt requests.

or two-cycle instructions.

ereiten von Interrupts: D(I

1. Die Enable-Bits der gewünschte(z.B. TMR1IE UND PEIE) werden gesetzt, alle nicht gewünschten Interrupt-Enable-Bits müssegesetzt werden!

2. Rücksetzen aller Interrupt-Flags Das Auftreten eines Interrupt-Ereignis wird auf jeden Fall durch das Setzen des entsprechenden Flag-Bits angezeigt, selbst wenn der zugehörige Interrupt oder alle Interrupts maskiert (ausgeschaltet) sind. Deswegen solltenzurückgesetzt werden!

Globales Einschalten der Interrupts durch Setzen des GIE-Bits Ab diesem Zeitpunkt können auftretende, nicht maskierte Interrupt-Ereignisse den Programmablauf unterbrechen.

ar eiten eines Interrupts uftreten eines Interrupts wird (falls Interrupts zu gelassen sind), automatisch auf Adresse 0x004 pt-Vektor) ver

In der ISR wird üblicherweise die Inter

Der Rücksprung aus der ISR erfolgt ähnlich wie der Rücksprung aus einem Unterprogramm mit dem Befehlretfie.

Im Gegensatz zu normalen Unterprogrammen sind bei Interrupt-Service-Routinen allerdings einige Besonderheiten unbedingt zu beachten!

(Auszug aus dem Datenblatt) When an interrupt is se

• The retur

• The PC is loaded with 000

e determined by polling the interrupt flag bit1

For external interrupt events, such as the INT pin, or GP port change interrupt, the interrupt latency2 will be three or four instruction cycles. The exact latency depends upon when the interrupt event occurs. The latency is the same for one

The return from interrupt instruction, RETFIE, exits interrupt routine, as well as sets the GIE bit, which re-enables unmasked interrupts.

1 polling ... Abfragen

2/13 2 latency ... Wartezeit

Page 3: Interrupt - Programmierung für den PIC12F675daten.schule.at/dl/Interrupt.pdf · list p=12f675 ; define processor type #include  ; include processor spezific definitions

W. Prechelmacher: Interrupt-Programmierung für den PIC12F675 htl donaustadt

Beisp;*****;* PROGRAMM: Interrupt on Change * ;*********************************************************** list p=12f675 ; define processor type #include <p12f675.inc> ; include processor spezific definitions of SFRs ;* Configuration of PIC *********************************************** __CONFIG _CP_OFF & _CPD_OFF & _BODEN_OFF & _MCLRE_OFF & _WDT_OFF & _PWRTE_ON & _INTRC_OSC_NOCLKOUT ;* General Purpose Registers (GPR's) *********************** cblock 0x20 ;definition of data block at 0x20 inner_delay_counter outer_delay_counter endc ;* Start of Program **************************************** org 0x000 ; processor reset vector goto Initialize ; jump to initialize code section org 0x004 ; interrupt vector goto ISR ;* Initialize Section *********************************************** org 0x005 ; Start of Programm Memory Vector Initialize: movlw B'00000111' ; Comperator off banksel CMCON movwf CMCON movlw B'00000000' ; all pins as digital I/O banksel ANSEL movwf ANSEL movlw B'00001111' ; gp4/5 as output (LED), gp3 as input (switch) banksel TRISIO movwf TRISIO movlw B'00100000' ; set gp5, clear gp4 banksel GPIO movwf GPIO movlw B'00000000' ; EEIE | ADIE | x | x | CMIE | x | x | TMR1E disable interrupts banksel PIE1 movwf PIE1 movlw B'00001000' ; enable IOC of Port3 (Switch) banksel IOC movwf IOC movlw B'00001000' ; GIE | PEIE | T0IE | INTE | GPIE | T0IF | INTF | GPIF ; enable only port change interrupt banksel INTCON movwf INTCON banksel INTCON bsf INTCON, GIE ; enable global interrupts ; Main Routine **************************************************************** main: nop ; Befehle des Hauptprogramms nop ; Befehle des Hauptprogramms nop ; Befehle des Hauptprogramms ; ... goto main ; END Main Routine *************************************************************

iel für eine einfache Interrupt-Service-Routine ******************************************************

3/13

Page 4: Interrupt - Programmierung für den PIC12F675daten.schule.at/dl/Interrupt.pdf · list p=12f675 ; define processor type #include  ; include processor spezific definitions

W. Prechelmacher: Interrupt-Programmierung für den PIC12F675 htl donaustadt ; START: Interupt Service Routine ***********************************************

ch condition !!!

_key_release:

ISR: movlw b'00110000' ; invert LED0, LED1 banksel GPIO xorwf GPIO ; this resets GPIO mismat

D'100' movlw call delay ; wait 100 ms for debouncing wait_for

w D'100'

a :

CONON, GPIF ; reset IOC Flag

In ervi ***************************

banksel GPIO ; test if switch is released btfss GPIO,3 goto wait_for_key_release movl call delay ; wait 100 ms for debouncing le ve_int banksel INT bcf INTC retfie ; return from Interrupt ; END terupt S ce Routine ************************ routine *********************************************************

movwf outer_delay_counter

movwf inner_delay_counter

elay_counter inner_delay_loop

ay_counter ay_loop

routine ***********************************************************

end

; START delay Subdelay: outer_delay_loop: movlw D'100' inner_delay_loop: decfsz inner_d goto decfsz outer_del goto outer_del return ; END delay Sub

4/13

Page 5: Interrupt - Programmierung für den PIC12F675daten.schule.at/dl/Interrupt.pdf · list p=12f675 ; define processor type #include  ; include processor spezific definitions

W. Prechelmacher: Interrupt-Programmierung für den PIC12F675 htl donaustadt Im angege n bene Beispielprogramm wird ein Interrupt-On-change-Interrupt für Port GP3 (Taster des PICkit 1)

ruck sollen per Interrrupt-Routine die LEDs 0 und 1 invertiert werden.

d cti werden:

riert igita usgänge – LEDs)

• alle Interruptquellen bis auf IOC deaktiviert (PIE1-, INTCON1-Register)

• alleine den IOC des Port 3 zugelassen (IOC-Register)

egister)

esteht in diesem einfachen Beispiel aus einer leeren Endlosschleife.

uf GP3 auf (Tasterdruck), so wird vom PIC automatisch:

erren

ichert (für Rücksprung)

der Interupt-Routine werden (durch Programmcode)

• die LEDs invertiert

mmierer nicht von GPIO liest (oder nach GPIO schreibt3), bleibt die derung aktiv, d.h. nach Verlassen der Interrupt-Service-Routine wird der IOC sofort !

Lesen von GPIO durch den Befehl xorwf GPIO erledigt.

change pins, the values are compared with the old read of GPIO. [...] The user, in the Interrupt

clear the interrupt in the following manner: read or write3 of GPIO. This will end the mismatch condition.

mismatch condition will continue to set flag bit GPIF. Reading GPIO will the mismatch condition and allow flag bit GPIF to be cleared.

• das IOC-Flag (Bit GPIF im INTCON-Register) zurückgesetzt

Mit dem retfie-Befehl wird vom PIC automatisch

• das GIE-Bit gesetzt (wieder Zulassen aller Interrupts)

• das Programm mit dem nächsten Befehl nach dem Interrupt-Aufruf fortgesetzt.

eingerichtet: Bei jedem Tasterd

er Initialize-Se onIn

• onfi udie Ports k g (D ler Eingang – Taster bzw. digitale A

• abschließend Interrupts global zugelassen (GIE-Bit im INTCON-R

Das Hauptprogramm b

Tritt ein IOC a

• das GIE-Bit gelöscht (sp weiterer Interrupts)

• die Adresse des nächsten auszuführenden Befehls am Stack gespe

• die Programmausführung an der Adresse 0x004 fortgesetzt (Startadresse des Interrupt-Programms)

In

• das Prellen, das Loslassen des Tasters und neuerliches Prellen beim Loslassen abgewartet ACHTUNG: Solange der PrograInterrupt-Aufforwieder ausgelöst Im Programm-Beispiel wird das (Auszug aus demDatenblatt)For enabled interrupt-on-

lastvalue latched on theService Routine, can a) Any b) Clear the flag bit GPIF. A end

5/13

3 Auszug aus dem Datenblatt: All write operations are read-modify-write operations. Therefore, a write to a port implies that the port pins are read, this value is modified, and then written to the port data latch. d.h. Jede Schreiboperation ist automatisch auch eine Leseoperation!

Page 6: Interrupt - Programmierung für den PIC12F675daten.schule.at/dl/Interrupt.pdf · list p=12f675 ; define processor type #include  ; include processor spezific definitions

W. Prechelmacher: Interrupt-Programmierung für den PIC12F675 htl donaustadt

6/13

Page 7: Interrupt - Programmierung für den PIC12F675daten.schule.at/dl/Interrupt.pdf · list p=12f675 ; define processor type #include  ; include processor spezific definitions

W. Prechelmacher: Interrupt-Programmierung für den PIC12F675 htl donaustadt

7/13

Page 8: Interrupt - Programmierung für den PIC12F675daten.schule.at/dl/Interrupt.pdf · list p=12f675 ; define processor type #include  ; include processor spezific definitions

W. Prechelmacher: Interrupt-Programmierung für den PIC12F675 htl donaustadt

AANNDD

8/13

Page 9: Interrupt - Programmierung für den PIC12F675daten.schule.at/dl/Interrupt.pdf · list p=12f675 ; define processor type #include  ; include processor spezific definitions

W. Prechelmacher: Interrupt-Programmierung für den PIC12F675 htl donaustadt

Timer-Interrupt Der PIC12F675 bestitzt zwei interne Timer, d.h. Zähler, die ihren Takt von einem Prozessor-internen oder wahlweise externen Takt erhalten. Bei jeder Taktflanke wird das Zähler-R um 1 inkrementiert. egister

Für die Interrupt-Programmierung interessant ist, dass jeder der beiden Timer beim Überlauf von FFh nach 00h (Timer0) bzw. FFFFh nach 0000h (Timer1) einen Interrupt erzeugen kann. Ereignisse, die in einem Programm regelmäßig auftreten sollen (und das sind fast alle Ereignisse), können so über einen regelmäßigen Timer-Interrupt ausgelöst werden.

Timer 0 ist ein 8-Bit-Zähler mit einem vorschaltbaren 8-Bit-Teiler für den Zählertakt. Das Taktsignal stammt entweder vom internen Takt CLKOUT (d.h. ein Taktzyklus pro "normalen" Befehl) oder von einem externen Takt am Pin T0CKI (Pin5 bzw. GP2)

9/13

Die Auswahl der Taktquelle für den Timer (intern oder extern) erfolgt über das Bit T0CS4. Über das Bit PSA4) kann ausgewählt werden, ob der 8-Bit-Vorteiler ("Prescaler") vom Timer-Takt (oder alternativ vom Watchdog-Timer5) verwendet wird. Die Teilerrate des Vorteilers lässt sich über die Bits PS2:PS04) im Bereich 1:2 bis 1:256 einstellen (siehe nebenstehende Tabelle). Das Zählerregister TMR0 lässt sich im laufenden Programm lesen oder beschreiben, sodass auch individuelle Startwerte für den Zähler vorgegeben werden können. 4 im OPTION_REG Register 5 Der Watchdog-Timer kann zur Überwachung von Deadlock-Situationen im Programm verwendet werden.

Page 10: Interrupt - Programmierung für den PIC12F675daten.schule.at/dl/Interrupt.pdf · list p=12f675 ; define processor type #include  ; include processor spezific definitions

W. Prechelmacher: Interrupt-Programmierung für den PIC12F675 htl donaustadt

mer0 soll jede 1 ms ein Interrupt ausgelöst werden. Beispiel: Über den Ti

max. erzielbare Verzögerung ohne Vorteiler: TMR0MAX·TCLKOUT=256·1µs=256µs

→ erforderliche Vorteiler-Rate: 1ms/256µs = 3,90625 → nächsthöhere Rate 1:4 gewählt

Das Timer0-Register TMR0 wird jetzt nur noch alle TCLKOUT·4 = (1µs·4)= 4µs inkrementiert.

max. erzielbare Verzögerung mit 1:4-Vorteiler: TMR0MAX·(TCLKOUT·4)=256·(1µs·4)=1,024ms

Um exakt 1 ms Verzögerung zu erzielen, darf der Timer0 nur 1ms/(TCLKOUT·4) = 1ms/4µs=250 mal inkrementiert werden, bevor ein Überlauf den Timer0-Interrupt auslöst.

→ Das Timer0-Register TMR0 muss also am Beginn jeder Periode mit dem Wert (256-250) = 6 initialisiert werden.

Verwendung des internen Takts: TCLKOUT=1µs

Vorbereitung des Interrupts:

OPTION.T0CS = 1 ( internen Takt CLKOUT verwenden)

OPTION.(PSO:PS2) = 001B (Vorteiler 1:4)

er0-Interrupt zulassen ... alle anderen Interrupts maskieren!)

INTCON0.GIE = 1 (alle Interrupts zulassen)

In der Interrupt-Routine:

OPTION.PSA = 0 (Vorteiler verwenden)

INTCON.TOIE = 1 (Tim

INTCON.T0IF = 0 (Timer0-Flag rücksetzen)

TMR0 = 6 6) (Zählregister initialisieren)

TMR0 = 6 setzen (Zählregister neu initialisieren ... Timer läuft sofort weiter)

eigentliche Interrupt-Behandlung

INTCON.T0IF rücksetzen (sonst wird Interrupt sofort wieder ausgelöst)

Beispiel: Wie groß ist die durch Timer0 max. erzielbare Verzögerung (bei Verwendung von CLKOUT)

1:256-Vorteiler → TMR0MAX·(TCLKOUT·256)=256·(1µs·256)=65,536ms

Initialisierungswert verwendet werden, da beim Beschreiben des TMR0-Registers der Zähltakt 6 Tatsächlich sollte 6+2=8 als

10/13 automatisch vom PIC für 2 Perioden unterbrochen wird.

Page 11: Interrupt - Programmierung für den PIC12F675daten.schule.at/dl/Interrupt.pdf · list p=12f675 ; define processor type #include  ; include processor spezific definitions

W. Prechelmacher: Interrupt-Programmierung für den PIC12F675 htl donaustadt

Timer 1 t. ist ein 8-Bit-Zähler mit einem vorschaltbaren 8-Bit-Teiler für den Zählertak

Im Timer- ird ein externes S : Bit TMR1CS8). Der Zähle r Teilungsraten zwischen 1:1 und 1:8 zur Verfügung stellt (eins

Bei Verwendung eines externen Taktsignals kann der Takt mit d iert werden (T1SYNC=0)8,9.

Bevor das h über ein Gate geblockt werden:

a. Blocken des Takts per Software: TMR1ON8=0

b. Freigeben des Takts per Software: TMR1ON=1

Nur in diesem Fall (b.) kann der Takt per Hardware (Signal an T1G) geblockt werden:

VerwenZur Aktivierung des Timer1-Interrupts ist folgendes notwendig:

1. PIE1.TMR1IE=1 (Timer-Interrupt freigeben) 2. INTCON.PEIE=1 (Gruppe der peripheren Interrupts freigeben) 3. INTCON.GIE=1 (Interrupts global freigeben)

Zusätzlich sollte vor dem Freigeben des Interrupts das Timer1-Interruptflag gelöscht werden (PIE1.TMR1IF=0) und die Timer1-Zählregister initialisiert werden! (z.B. TMR1H:TMR1L = 0000h)

Mode stammt der Zähltakt vom internen Systemtakt (Befehlstakt), im Counter-Mode wignal über den Pin OSC17 zugeführt (Auswahlrtakt wird über einen Vorteiler geführt, de

tellbar über T1CKPS1:T1CKPS08).

em Systemtakt synchronis

Taktsignal an das 16-Bit-Zählerregister TMR1H:TMR1L gelangt, kann es noc

8 TMR1GE = 1 → T1G steuert das Takt-Gate: (T1G=0: Takt freigegeben, T1G=1: Takt geblockt)

dung von Timer1 als Interrupt-Quelle:

7 Über die Anschlüsse OSC1/OSC2 kann man mit einem 32kHz-Schwingquarz auch ein entsprechendes Taktsignal zur Ansteuerung des Timer1 erzeugen (T1OSCEN8=1). Ohne Quarz schwingt der "LP-Oszillator" (siehe Skizze) hingegen mit etwa 37kHz. Dieser Oszillator arbeitet auch, wenn der PIC im SLEEP-Modus ist! 8 Register T1CON

per 9 Bei nicht-synchronisierten Eingangstakt läuft der Zähler auch im SLEEP-Modus weiter und kann bei Überlauf den Prozessor Interrupt "aufwecken" (wake-up). 11/13

Page 12: Interrupt - Programmierung für den PIC12F675daten.schule.at/dl/Interrupt.pdf · list p=12f675 ; define processor type #include  ; include processor spezific definitions

W. Prechelmacher: Interrupt-Programmierung für den PIC12F675 htl donaustadt Beispiel: Über den Timer1 soll jede 0,5s ein Interrupt ausgelöst werden. Interner Takt FOSC/4 → Grundperiode 1µs ohne Vorteiler: FFFFh ·1µs = 65536 µs =65,536ms nötiger Vorteiler: 500ms / 65,536ms = 7,629 → 1:8 gewählt Timer1-Takt mit Vorteiler: 8·1µs =8µs erzielbare Verzögerung mit Vorteiler: 8 · 65,536ms = 524 ms (= max. Verzögerung Timer1) Anzahl der notwendigen Timer1-Inkrementierungen: 500ms/8µs=62500 notwendige Vorinitialisierung von TMR1H:TMR1L = (65536-62500)=3036D = 0B:DCH

12/13

Page 13: Interrupt - Programmierung für den PIC12F675daten.schule.at/dl/Interrupt.pdf · list p=12f675 ; define processor type #include  ; include processor spezific definitions

W. Prechelmacher: Interrupt-Programmierung für den PIC12F675 htl donaustadt

13/13