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.

Lösta programexempel med PIC16F628<br />

INT Interrupt, RB0/INT-pinnen<br />

External interrupt, yttre interrupt på pinnen RB0/INT genereras av en positiv eller<br />

negativ flank ( 0..1 / 1..0 ). Valet av flanktyp gör man med bit INTEDG i OPTIONregistret.<br />

Positiv flank gäller om INTEDG=1; och negativ flank om INTEDG=0;.<br />

Tänds lysdioden när man trycker på knappen så fungerar interruptet ...<br />

( Finns det någon som idag vet vad ”Killroy was here” betyder? )<br />

/* exint62x.c External interrupt turns on light */<br />

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

#include "int16Cxx.h"<br />

#pragma config |= 0x3ff0<br />

#pragma origin 4<br />

interrupt int_server( void )<br />

{<br />

int_save_registers<br />

if( INTF == 1 ) /* test if it is the INT-interrupt? */<br />

{ /* this time it's obvius that it is! */<br />

PORTA.2 = 1; /* Lightdiode on to show "Killroy was here" */<br />

INTF = 0; /* Reset INT-flag before leaving */<br />

}<br />

int_restore_registers<br />

}<br />

void main( void )<br />

{<br />

/* the main program */<br />

CM0=1; CM1=1; CM2=1; /* no comparators at PORTA */<br />

TRISB.0 = 1; /* RB0/INT is input */<br />

TRISA.2 = 0; /* RA2 output to lightdiode */<br />

PORTA.2 = 0;<br />

INTEDG = 0; /* interrupt on negative going edge */<br />

INTE = 1; /* local enable */<br />

GIE = 1; /* global enable */<br />

while( 1 ) nop();<br />

}<br />

15

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

Saved successfully!

Ooh no, something went wrong!