Codificando Interrupciones Externas
-
Upload
guillermo-quinteros -
Category
Documents
-
view
213 -
download
0
description
Transcript of Codificando Interrupciones Externas
-
::PICParteIIICaptulo4
Codificandointerrupciones
Yaestoyderegresonuevamente,yaverquinmesigue...queestavezharunprogramaqueamuchoslespuederesultarbobo,asque...anocriticar,queyaloadvert...
Comenzamos...???
Bien,elprogramaconsisteenpreparartodoparaelencendidodeunLEDqueconectaremosenRB1,perocomodije,sloprepararemos todo,porque luegoharemosdormiralmicrohastaque interrumpamossusueoparaatenderunpulsador conectadoaRB0/INT,momentoenel cualdeberencenderel LED,y regresaradormirnuevamente,ycuandovuelvasapresionenarelpulsadorharemosqueloapagueyotravezlodespacharemosadormir.
Estoyalohicimosanteriormente,sloqueahoraloharemosconinterrupciones,ok...???
Allvamossss...!!!
Encabezado
LIST P=16F84 #include
Configuracindepuertos
ORG 0x00 GOTO inicio ORG 0x04 GOTO ISR ORG 0X05
inicioBSF STATUS,RP0configurandopuertos MOVLW 0x01cargawcon00000001 MOVWF TRISB RB0/INTesentrada BCF OPTION_REG,6seleccionamosflancodescendente BCF STATUS,RP0
Habilitacindeinterrupciones
BSF INTCON,GIEhabilitamostodaslasinterrupciones BSF INTCON,INTEqueseaninterrupcionesexternas CLRFPORTB limpioelpuertoBsueo SLEEP GOTO sueoDulcessueos...!!!
Rutinadeserviciodeinterrupciones
ISR BTFSC PORTB,0verificamosquesueltenelpulsador GOTO ISR
BTFSC PORTB,1 yahoras,sielledesta1 GOTO off_led ireaoff_ledparaapagarlo BSF PORTB,1 sino,enciendoelLED BCF INTCON,INTFborrobanderadeinterrupcin RETFIEoff_led BCF PORTB,1 apagoelLED BCF INTCON,INTFborrobanderadeinterrupcin RETFIE
END
-
Desdenuestrosprimerostutorialeshemosalcanzadoaconocervariasdelasinstruccionesqueseencuentranenestetrozodecdigo,raznporlacualnolasdescribir,asesquevamosporaquelloqueestenrojo...
ORG0x04GOTOISR
Laprimeralneaeselvectordeinterrupcin,ycuandostaseproduzca,elcdigodeprogramaapuntaraestadireccin y continuar con la siguiente instruccin, es decirGOTO ISR, la cual es un salto a ISR (Rutina deServiciodeInterrupciones)paraatenderdichainterrupcin.
ConfiguramoselpuertoB,comohabrsnotado,hemosconfiguradoRB0/INTcomoentradayelrestodelosbitscomosalida,luego...
BCFOPTION_REG,6seleccionamosflancodescendente
Enlapginaanteriordijimosquepodamosseleccionarelflancoconelcualseproducirlainterrupcin,puesesoesloqueestamoshaciendoconestainstruccin,entoncesvamosalregistroOPTIONyponemoselBIT6a"0"deestemodolainterrupcinseproducircuandosueltenelpulsador.
Ahorapasamosalomsinteresante,lahabilitacindelasinterrupciones...
BSFINTCON,GIEhabilitamostodaslasinterrupcionesBSFINTCON,INTEqueseaninterrupcionesexternas
Observaquelahabilitacindeinterrupcionessehaceenelbanco0yaqueelRegistroINTCONseencuentraenestebanco.Bien, En la primera lneahacemosunahabilitacingeneral de todas las interrupciones, hacemosGIE=1, en la segunda lnea, habilitamos interrupciones externas, hacemos INTE=1, recuerda que la banderapara la interrupcin por el pin RB0/INT es INTF, no lo olvides, pues esta cambiar cuando la interrupcin seproduzcayluegodeatenderladeberemosvolverlaacero.
LoquevieneahoraessimplementelimpiarelpuertoB,yluego...
sueoSLEEPGOTOsueo
SLEEPeslainstruccinqueponealmicroenestadodebajoconsumo,escomoquetodosedetieneystepasaamododereposo,(consultaelsetdeinstruccionesparamayordetalle...)debhaberpuestosimplementeSLEEPpero veamos, si se ejecutara la instruccin SLEEP el micro entrara en reposo hasta que se produce lainterrupcin, lo cualdijimosanteriormentequeescomouna llamada (uncall), cuando regreseseencontrarconGOTOsueoylovolveremosadormir.
Teimaginas...???sinopusiramoselGOTOsueo,cuandoregresedelainterrupcinpasaraalaISR(Rutinadeserviciodeinterrupcin),ylopeordetodo,esqueloharasinqueseproduzcalainterrupcin,grandolordecabeza...!!!
Perobueno,ahoranosquedamosadormirconelmicrohastaqueunchicotraviezoactiveelpulsadordeRB0/INT...Felicessueosssss...!!!!
chicomalo...!!!,quesiempremeponesaprueba,Yaveoquenopudisteesperarypresionasteelpulsador...
Deacuerdo...sabesadondemellevaste...???justoa...
ORG0x04GOTOISR
Entoncesvamoshaciaall,ahoratedarparaquetengas,guardesyrepartas...
Loqueviene,eslarutinadeserviciodeinterrupcinISRycomenzamosconun...
ISRBTFSCPORTB,0verificamosquesueltenelpulsadorGOTOISR
-
ISRnoesunainstruccin,sinolaetiquetaqueatiendelainterrupcin(pudehaberpuestorut_servuotracosa,en fin...).ConBTFSCPORTB,0, prevenimos los rebotes, no se si eranecesario yaque seleccionamos flancodescendente para este pin, pero por si las moscas lo puse, en realidad suele pasar que cuando se libera elpulsadorsegeneraunapequeachispa,lacualyaconocemoscomoreboteelctrico,slolopuseporprevencin.
Ahorasiatenderemoslainterrupcin,comenzandopor...
BTFSCPORTB,1
BTFSCPORTB,1esprobarsielsegundobit(Bit1dePORTB)esten0,esdecirsielLEDestapagadoysaltarunlneasiesas.
En leccionesanterioresutilizamosun registro llamadocont conel cual sabamossi el LEDestabaprendidooapagado,yaqutienesunaformadeoptimizaresecdigo,esperoquenotepierdasconesto...!!!
Bien...comorecininiciamos,elLEDestapagado,porlotantosaltamosunalneaypasamosa...
BSFPORTB,1
esdecirhacemosRB1=1 (prendemosel LED).Perfecto, la interrupcinya fueatendida,peroahoradebemoshabilitarladenuevoas permitimosque sevuelvaaejecutar, y como tenemosunnicopulsadorel cualmecambilabanderaINTF,deberemosborrarlanuevamente,asesque...
BCFINTCON,INTFborrobanderadeinterrupcin
ObviamentealproducirselainterrupcinsehizoGIE=0paradarnoslugaraatenderla,entonces...
RETFIE
yahoraGIE=1, las interrupciones estn nuevamente habilitadas la bandera de RB0/INT est lista para unanuevainterrupcinyretornamosa...
sueoSLEEPGOTOsueo
yesperaraquepulsesRB0,puessiyalohicistehabrsidoporsegundaveza...
ORG0x04GOTOISR
prevenimoslosrebotesyluegovamosa...
BTFSCPORTB,1
esdecir,pruebaysaltasielBit1dePORTBescero,ycomoestavezelLEDestprendido...simplementeharsun...
GOTOoff_ledireaoff_ledparaapagarlo
unsaltoalaetiquetaoff_led...
off_ledBCFPORTB,1sino,apagoelLED
nosesirequiereexplicacinperobueno,ponesaceroelBit1dePORTB.Finalmente...
BCFINTCON,INTFborrobanderadeinterrupcinRETFIE
Ahoraestamoslistosparacomenzardenuevo...
tegust...???,bieeeenn,aplausosparaquienlogrcomprender...
-
yahoralapreguntadelmilln...
quepasconelmapadememoria...???,dondesedefinieronlasposicionesdememoriaparalosregistrosTRISB,PORTB,el registroOPTION..???yel INTCON...???,dondedemoniossedefinieronestasposicionesdememoriaquesupuestamentedebenestarenelencabezado...???
Nomedigasquenotepercatastedeeso...!!!:O
Larespuestalatendremosenelprximotutorial,yporlamismaweb...ahnosvemosssss...!!!
:o))