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