El Registro TMR0 - Código Para Temporizar 10 Milisegundos
-
Upload
guillermo-quinteros -
Category
Documents
-
view
5 -
download
1
description
Transcript of El Registro TMR0 - Código Para Temporizar 10 Milisegundos
-
::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...