Maskinnära programmering 6B2266
Maskinnära programmering 6B2266
Maskinnära programmering 6B2266
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