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.
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