Codificando Interrupciones Externas

Post on 30-Sep-2015

214 views 0 download

description

Interrupciones Externas

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