21.12.2013 Views

Maskinnära programmering 6B2266

Maskinnära programmering 6B2266

Maskinnära programmering 6B2266

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

Några interruptkällor<br />

Namn Register Kommentar<br />

INT INTCON External interrupt, RB0/INT-pinnen<br />

TMR0 INTCON TMR0 Overflow interrupt<br />

RBI INTCON interrupt on change PORTB RB.0...RB.3<br />

ADI PIE1 AD-converter interrupt (PIC16F87x)<br />

TXI PIE1 USART Transmitter interrupt<br />

RCI PIE1 USART Reciever interrupt<br />

CCP1I PIE1 CCP1 Capture/Match interrupt<br />

CCP2I PIE2 CCP2 Capture/Match interrupt (PIC16F87x)<br />

TMR2I PIE1 TMR2 PR2 Match interrupt<br />

TMR1I PIE1 TMR1 Overflow interrupt<br />

Interruptrutin<br />

När en interruptkälla, som är enablad, begär interrupt så anropas interruptrutinen.<br />

Denna har alltid en fast adress i programminnet ( 0x0004 ). För att vara säker på att<br />

interruptrutinen får rätt adress skriver man den först, före main():<br />

Med raden interrupt int_server( void ) ger vi interruptrutinen namnet<br />

int_server och definierar den på samma sätt som en vanlig funktion.<br />

#include "16F874.h"<br />

// #include "16F628.h"<br />

#include "int16Cxx.h"<br />

#pragma origin 4<br />

interrupt int_server( void )<br />

{<br />

int_save_registers<br />

/* interrupt routine */<br />

int_restore_registers<br />

}<br />

void main( void )<br />

{<br />

/* the main program */<br />

/* local enable */<br />

/* global enable */<br />

/* something that causes the interrupt */<br />

}<br />

I interruptrutinen gäller automatiskt att fortsatta interrupt är disablade, GIE=0;. ( Om<br />

man skriver GIE=1; inuti interruptrutinen, kan nya händelser även avbryta<br />

interruptrutinen, så gör inte detta ).<br />

Till skillnad mot en vanlig funktion så vet man aldrig var i huvudprogrammet man<br />

befinner sig när interruptet sker och interruptrutinen anropas. Interruptet kanske sker<br />

mitt i ett vilkorsuttryck. När huvudprogrammet sedan får tillbaka kontrollen från<br />

interruptrutinen, och får chansen att utvärdera vilkorsuttrycket, så vill det till att<br />

interuptrutinen inte har förändrat några flaggor eller register!<br />

13

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!