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.

Denna scen avser att belysa hur ett huvudprogram ( Du läser en bok ) via en<br />

händelse ( telefonen ringer ) som genererar ett interrupt ( avbrott ) blir avbrutet så att<br />

ett annat program, avbrottsprogrammet, utför en lämplig avbrottsrutin ( Du talar i<br />

telefon ).<br />

Avbrottsprogrammet blir i sin tur avbrutet och får då i stället utföra en annan<br />

avbrottsrutin ( att ta ärendet vid ytterdörren ).<br />

Om interruptmöjligheten inte fanns, om telefonen saknade ringsignal och ytterdörren<br />

saknade dörrklocka, skulle Du gång på gång "oroligt" behöva avbryta läsningen av<br />

boken för att lyfta telefonluren och fråga "är det någon där?", "är det någon där?",<br />

och att öppna ytterdörren för att se efter om någon står utanför och väntar?<br />

Detta kallas för Polling, avsökning.<br />

Det är lätt att inse att Interrupt många gånger är att föredra framför Polling. De allra<br />

flesta mikrostyrkretsar har därför försetts med mer eller mindre utvecklade<br />

mekanismer för interrupt.<br />

Global och Local enable<br />

Om Du vill läsa din bok i lugn och ro utan att bli avbruten kan Du sätta på dig<br />

öronproppar. Telefonen eller dörrklockan kan då ringa hur mycket som helst utan att<br />

bli "betjänade". Du har omöjliggjort interrupt, Disable interrupt. Tar Du bort<br />

öronpropparna har Du åter möjliggjort interrupt, Enable interrupt. Detta kallas för<br />

att på global nivå enable/disable interrupt, Global enable.<br />

Du har även möjlighet att på lokal nivå enabla/disabla interrupt, Local enable. Till<br />

exempel kan Du på lokal nivå disabla telefonen genom att dra ur telefonjacket. Då<br />

kommer Du fortfarande att kunna höra dörrklockan.<br />

( detta målande exempel har jag lånat av en kollega, Robert Meyer )<br />

PIC-processorernas interruptmekanismer<br />

Interruptkällor, globalt, regionalt(?) och lokalt enable<br />

PIC16F87x processorerna har upp till 15 olika interruptkällor. PIC16F628 har tio. De<br />

enablas lokalt med "flaggor" som finns i registren INTCON, PIR1 och PIR2.<br />

Eftersom de alla finns definierade som bitvariabler i respektive processors includefil<br />

så behöver man inte hålla reda på i vilket register och i vilken bitposition de olika<br />

flaggorna finns.<br />

Den lokala enablebiten heter som källan, men med tillägg av bokstaven E på slutet<br />

( tex. external interrupt INT har enableflaggan INTE ).<br />

Interrupt enablas globalt med flaggan GIE ( Global interrupt enable ) som finns i<br />

registret INTCON. Vid start har processorn interrupt disablat.<br />

I INTCON finns även en flagga PEIE ( Peripheral interrupt enable ) som enablar<br />

registren PIE1 och PIE2. Man kanske kan kalla detta för "regionalt enable"?<br />

Observera således att tex CCP1E ( i PIE1 ) sammanlagt enablas på tre ställen.<br />

1) CCP1E=1;, 2) PEIE=1; och 3) GIE=1;.<br />

12

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

Saved successfully!

Ooh no, something went wrong!