Download - El Registro TMR0 - Código Para Temporizar 10 Milisegundos

Transcript
  • ::PICParteIIICaptulo7

    ComohacerunatemporizacinconelregistroTMR0

    El tiempoempleadoenuna temporizacinsepuedecalcularapartirdeunciclode instruccin (esdecir1instruccin por cada microsegundo, si estas trabajando con un XT de 4 Mhz), tambin necesitas el valordel Divisor de Frecuencia (el que seleccionabas con los Bit's PS2, PS1 y PS0), y finalmente con elcomplementodelvalorcargadoenTMR0(esdecir255TMR0),laecuacinquetepermiterealizarelclculoeslaquesigue...

    Temporizacin=Ciclodeinstruccin*(255TMR0)*DivisordeFrecuencia

    Vemosunejemplo...???

    Supontequedeseasunatemporizacinde10ms(10milisegundos),queeststrabajandoconunXTde4Mhz,yqueademsseleccionastecomoDivisordefrecuencia256(esdecirPS2,PS1,PS0=1,1,1).

    Pregunta...(comoenelsecundario...)

    CuleselvalorquesedebecargarenTMR0...???

    Loarreglaremosconunpasajedetrminos...

    255TMR0=Temporizacin(enmicrosegundos)/(1ciclo/us*Div.deFrec.)

    yreemplazandotendrs...

    255TMR0=10000us/(1ciclo/us*256)255TMR0=10000/(256ciclos)255TMR0=39,0625ciclos255TMR0~39ciclos

    EsosignificaqueenTMR0deberscargar25539=216(0xD8enhexa)yapartirdeallelTMR0contarlos39ciclos que faltan para desbordarse y producir la interrupcin, y el tiempo que tardar en hacerlo esaproximadamente10000us,osea10ms.

    Antesdeseguir,despejemosunpardedudas:

    1seg.=1000ms=1000000usy...1ciclos/useseltiempoempleadoenejecutarseunainstruccin

    ok..., sera bueno queme confirmes si lamayor temporizacin que se puede obtener haciendo uso de esteregistroes0,06528segundos,ser...???ahqueda...!!!

    Loque haremos ahora, ser codificar el ejemplo visto anteriormente, pero una vez producida la interrupcinencendemosunLED,luegovolvemos,temporizamos10msyenlaprximainterrupcin,loapagamos,esdecir,elLEDparpadearcada10ms,comoesobvio,nolovamosanotar,asqueslolosimularemosenMPLAB,(enrealidadsisenota,luegotecuentocomo).

    Bien,elcdigoeselsiguiente...

    Encabezado

    LIST P=16F84 #include

    Configuracindepuertos

    ORG 0x00

  • GOTO inicio

    ORG 0X04 Atiendolainterrupcin BTFSS PORTB,0 sielLEDestapagado GOTO LED voyaLEDyloenciendo BCF PORTB,0 sinoapagoelLED BCF INTCON,2 limpiolabanderaT0IF RETFIE regresohabilitandolainterrupcinLED BSF PORTB,0 enciendoelLED BCF INTCON,2 borrolabanderaT0IF RETFIE regresohabilitandolainterrupcin

    inicioBSF STATUS,5configurandopuertos CLRFTRISB puertoBessalida MOVLW 0x07 cargowcon00000111 MOVWF OPTION_REG elDivisor=256 BCF STATUS,5

    MOVLW 0XA0 cargowcon10100000 MOVWF INTCON habilitamosGIEyT0IE CLRFPORTB limpiamosPORTBtiempo MOVLW 0XD8 cargowcon216 MOVWF TMR0 lopasoaTMR0NADA BTFSC TMR0,7 mequedohaciendonada GOTO NADA hastaqueTMR0desborde,yentonces GOTO tiempo volveracargarTMR0

    END

    Aquvamos...

    ORG0X04Atiendolainterrupcin

    AquvendremoscuandosedesbordeelTMR0,esdecircuandoseproduzcalainterrupcinynoharemosunaISRapartecomolohicimosanteriormente,atenderemoslainterrupcindirectamenteaqu.

    El cdigoquesiguees comodiceel comentario, se tratadeverificar siRB0esta1 (esdecir si el LEDestaencendido),ycomodecomienzonoloest,iraGOTOLED,ahloenciende,luego...

    BCFINTCON,2limpiolabanderaT0IF

    Estoesloquedebemostenerencuentaparasalirdeunainterrupcin,borrarlabanderaqueindicaalmicroquehubounainterrupcin,onosquedaremossiempreenlarutinadeservicio.Finalmentecon...

    RETFIE

    habilitamosnuevamentelainterrupcin.

    Pasemosahoraalaetiquetainicio,loprimeroqueharemossercambiardebancoyluegoconfigurarelpuertoBcomosalida,yaquvienelonuevo...

    MOVLW0x07cargowcon00000111MOVWFOPTION_REGelDivisor=256

    VeamosqueBit'sestamosconfigurandoenOPTION_REG

    LosBit's7y6no losutilizamosporahora,T0CS=0(TMR0estemporizador),T0SE=0 (no seusa),PSA=0(PrescalerasignadoaTMR0),PS2,PS1,PS0=1,1,1(Prescaleres256),enconclusin00000111=0x07yesloquecargamosenelregistroOPTION.

    AhoracambiamosdebancoyhabilitamoslasinterrupcionesGIE,yenespecialT0IE,queeslainterrupcinpordesbordamientodelregistroTMR0,luego...

  • CLRFPORTBlimpiamosPORTB

    Loquevieneahoraesprepararlatemporizacin,ydelosclculosquehicimosdebamoscargar216enTMR0yapartir de ah esperar a que este registro se desborde y produzca la interrupcin, entonces hacemos esojustamente...

    tiempoMOVLW0XD8cargowcon216MOVWFTMR0lopasoaTMR0

    tiempoeslaetiquetaendondecargarelregistroTMR0cadavezquequierahacerunatemporizacin,y0xD8es216enhexadecimal

    NADABTFSCTMR0,7mequedohaciendonadaGOTONADAhastaqueTMR0desborde,yentoncesGOTOtiempovolveracargarTMR0

    Laverdadesqueyanotengonadaquehacer,sinoesperaraquedesbordeelTMR0,asesquehiceunbuclealcuete,conBTFSCTMR0,7estasprobandosielBit7deTMR0esta0,ycomoyasabemosqueestara1,puesah te quedas dando vueltas en ese bucle mientras el tiempo pasa, hasta que de repente se produce unainterrupcin,luegovas,laatiendesycuandoregresascaesen...

    GOTOtiempovolveracargarTMR0

    paraquecomiencesatemporizarnuevamente,esdecirrecargarTMR0con216paraluegoquedarteenelbucleaesperarlainterrupcin.

    Ahorapasemosalomejordetodoesto,LasimulacinenMPLAB,allvamos...