CAPÍTULO 24

DS1307, RELOJ-CALENDARIO EN BUS IZC

En muchos proyectos es necesario trabajar en tiempo real.  por lo que en...
372 IVIJCRDCONIROLADOR PIC 161-784. DESARROLLO DE PROYEJCTOS na RA-MA

Ir Almacena los datos en formato BCD para que se pu...
cas-MA CAPÍTULO 24: DS 1307, RELOJ-CALENDARIO EN BUS I2Ç 373

 

051307 no se actualizarán en caso de fallo de la_ alirnen...
374 MICROCONTROLADOR PICl6I-'84. DESAILROLLO DE PROYECTÚS e ELA-MA

deben conexionarse unas resistencias con la ñnalidad d...
'15 ! Ot-MA

CAPÍTULO 24: 051307. RELOJ-CALENDARK) EN BUS I2C 375

El formato de todos [os datos está en BCD. 
El bit 7 de...
3 76 NIICROCONTROLADOR PIC 161784. DESARROLLO DE PROYECTOS © Ria-Ma

24.5 ESCRITURA EN EL DS1307

La transferencia de dato...
entra CAPÍTULO 24: 031307, RELOLCALENDARIO EN BUS I2C 377

t Dcspués el maestro lee los datos de los registros.  La direcc...
H8 MICR( XIÍIWFROI . ADOR PIC I ÓFM.  DESARROLLD DE PROYECTOS  FPA-MA

 

call 12C_EnviaStan ;  Envia condición de Start. ...
ñ IEA-RNA

movwf
movlw

movwf
clrf'

clrf
clrf
;  call
' return

DiaSemana

.4

Anho

Hora

Minuto

Segundo

DS 1307 Esrri...
380 MICROCONTROLADOR PIC l6F3-4. DESARROLLO DE PROYELTOS o Iza-MA

. úúútúlíiúilúlhtñlhlalahtnl tâtltltttüllllálúlkilailü#...
;DRAMA CAPÍTULO 2,4; D530?,  RELOJ-CALENDARIO EN BUS [2C 331

 

:    IIIÚQIÍHFÚ#Ilrlllllklíilil$ll**11H51¡*CMF*Il*Fil#Ill...
382 MICROCONTROLADOR PICI6FS4. DESARROLLO DE FROYECTOS

McnsajeJueves

DT "Jueves ",  0x00
Mensaievieznes

DT "Viemos ",  ...
nua-MA CAPÍTULO 24: DSIEO? , RELOJ-CALENDARIO FN BUS IZC 383

Ittlw Mensajelurmio ;  Mes 0x06

rctlw Mensajelulio ; Mes 0x...
384 MICROCONTROLADOR PlCl6F34. DESARROLLO DE PROYECTOS

movlw ! T1001 1000' ;  Las ãntenupciones se dñbãi habilitar despué...
É IEA-MA

CAPÍTULO 24; 051301 RELOJ-CALENDARIO EN BUS I2C

; Sübmtina "Sêsvíciohltemrpcion" - ---- ------v--------~-------...
336 MICROCÚNTROLADOR PICi 61584. DESARROLLO DE PROYECÍ' OS c;  RA-Má

 

;  Si no está en puesta eo hora está cn &mcionami...
t-RA-hiá CAPÍTULO 24: 081307, RELOJ-CALENDARIO EN BUS IZC 387
call LCD__Byte ;  visualiza rechazando : :em de las.  decena...
388 WCRÚCONFROLADOR ? IC16F34, DESARROLLU DE PROYFCTOS

fisualízaAnho
btfss F_AjustaAnh-: ›
goto EncíendeAnho
btfss Intenn...
tina-Mn CAPÍTULO 24'.  031307_ RELOJCALENDARIO EN BUS I2C 339

ApagaMinutos

call LCD_DosBspaciosB1ancos ;  visualiza dos ...
390 NHCROCONTROLADOR PIC l 6F84. DESARROLLÚ DE.  PROYECTOS @j RA-MA

 

call LClíLMcnsaje
return

"PuestaEnHora"

çEs un r...
eita-Im (ÍAPÍTULU 27.4: DSÚOT,  RELOJ-CALENDARIO EN BUS l2(' 391

í
; Para comprender el ftmcionarniento de esta subrutina...
392 MICROCONTROLADOR PICIÚFM_ DESARRULID DE PROYECTOS

;  íímciommiento normal.  En este caso hay que realizar tres operac...
cum CAPÍTULO 24: DS 1307, RELOJ-CALENDARIO EN BUS [ZC 393

"incrementar"

SI
; Es un rebote? 

NO

   
 
 
     
   

 

¡...
394 WCROCONTROLADOR PlClúF84. DESAFLROLLO DE PROYECTOS

;  Lo guarda. 
; ; Ha superado su valor máximo? 

; Lo izúcialjza ...
cru-sm CAPÍTULO 24: DSI307, RELOJ-CALENDARIO EN BUS I2C 395

sublw 0x12 ;  ;Ha superado su valor máximo? 

btfsc STATUS, C...
Próximos SlideShares
Carregando em…5
×

Microcontrolador pic16 f84 desarrollo de proyectos

374 visualizações

Publicada em

capitulo 24 - ds1307 relogio i2c

Publicada em: Engenharia
0 comentários
0 gostaram
Estatísticas
Notas
  • Seja o primeiro a comentar

  • Seja a primeira pessoa a gostar disto

Sem downloads
Visualizações
Visualizações totais
374
No SlideShare
0
A partir de incorporações
0
Número de incorporações
3
Ações
Compartilhamentos
0
Downloads
3
Comentários
0
Gostaram
0
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

Microcontrolador pic16 f84 desarrollo de proyectos

  1. 1. CAPÍTULO 24 DS1307, RELOJ-CALENDARIO EN BUS IZC En muchos proyectos es necesario trabajar en tiempo real. por lo que en este capítulo se explicará una forma muy sencilla de haccrlo. 24.1 EL RELOJ-CALENDARIO DS1307 El E8130? es un reloj en tiempo rca! RTC (Real Time Clock) con líneas de conexión a un bus l2C. Este circuito integrado es un poderoso reloj y calendario dc tiempo real, que cumple perfectamente con muchas de las necesidades nonnales en 1a adquisición y registro del tiempo. Sus características más destacadas Son: ' t ' . X2 VBAT GND Figura 24-] Patilfczje de! reloj-calendario 031307 o Fabricado por Dallas Semiconduc-toxv twwwdalsemicom , en encapsulado de 8 pines (figura 24d) o E] DSl307 es un reloj y calendario de tiempo real que cuenta los segundos, los minutos, las horas, los dias dc la semana (lunes, manos, eta), los dias del mes, los meses y los años, válido hasta el año 2100.
  2. 2. 372 IVIJCRDCONIROLADOR PIC 161-784. DESARROLLO DE PROYEJCTOS na RA-MA Ir Almacena los datos en formato BCD para que se pueda tiabajar directamente con ellos. I Tiene 56 bytes de RAM no volátil para almacenamiento de datos. *I En su pin SQWFOUT proporciona una onda cuadrada programablc. a Tiene una circuitcría interna de “respaldo” para alirnentación cn caso de fallo de la alimentación principal, por tanto, es capaz de mantener el tiempo y la fecha actualizados aún cuando el sistema este apagado. -I Se puede alimentar entre 4,5 a 5,5 V, siendo su valor tipico 5V. Ii Posce un bajo consumo. menos a 500 nA en el modo de respaldo. t Utiliza un cristal de cuarzo propio de 32.763 Hz para lograr ticmpos exactos y no depender de] microcontrolador. w El último dia del mes es automáticamente ajustado a 28, 29, 30 ó 31 días según corresponda, tiene en cuenta los años bisiestos. Ir Puede trahajar en fan-nato europeo de 24 horas o el americano de 12 con indicador dc AM/ PM. -I Se activa cuando recibe 1a dirección válida indicada cn la ti gura 24-2. MSB LSB EÉIIIIEIII i-Dirección del esclavo (Slave Addressl-i _ Bit de LecturaIEscrilura L Bit de Start Bit de Reconocimiento -- Figura 24-2 Dirección de1DS1307 como esdavo en bus 12C 24.2 CONEXIÓN DE ua 031307 A UN PIC16F84 La ñgura 24-3 ilustra un posible esquema de conexión con un microcontrolador- P1Cl6FS4A. Los pines SDA y SDL del DSl307 se concctan a dos líneas del pucrto A del microcontrolador conformando el bus l2C. Las rcsistencías de Pull-Up tienen el valor característico de 4k7. El DS1307 tiene su propio cristal de cuarzo de 32.768 Hz para lograr tiempcs cxactos y no depender del microcontrolador. Un condensador ajustable opcional se puede poner en paralelo con el cristal para ajustar el tiempo a valores exactos. Para este ajuste será necesaria la medida con osciloscopio dc 1a señal cuadrada del pin SQW/ OUT del DS1307. En la mayoría de las aplicaciones, la prccisión del DS1307 y del cristal son suficientes y este condensador no cs necesario. Si falla 1a alimentación principal, el DS1307 pasa a alimentarse de la bateria de respaldo BTl, manteniendo la información del tiempo y la fecha mientras 1a alimcntación principal se mantenga apagada. Si esta bateria no se utiliza, los datos de calendario del
  3. 3. cas-MA CAPÍTULO 24: DS 1307, RELOJ-CALENDARIO EN BUS I2Ç 373 051307 no se actualizarán en caso de fallo de la_ alirnentación. El valor de esta bateria debe estar comprendido entre los 2 y 3,5 V. Puede usarse cualquier tipo de pila, aunque el fabricante recomienda una bateria de lítio de a1 menos 48 mAh que garantiza una conservación de la información en el DSl307 para más de 10 años. N32 SEG UNDOS R4 220 (105 y B'I_'1 son opcionales Figura 24-3 Conexión de rm DS 1 307 a un PIC] 617' 8A La salida de onda cuadrada dcl DSl307 (SQW/ OUT) se conecta a 1a linea de interrupción RBD/ INT del microcontrolador. El programa de control del PIC1684A debe configurar esta señal cuadrada con una frecuencia de 1 Hz para que el microcontrolador sea interrumpido una vez por segundo. La salida de esta línea cs en drenador abierto siendo necesaria una resistencia de Pull-Up para su conecto funcionamiento. El diodo LED Dl parpadeará al ritmo de los segundos. La puesta en hora de este reloj digital se realiza mediante los pulsadores "MODO" c "INCRENIENTAR" que se conectan a pines 7 y 6 del Puerto B. Su funcionamiento se basa en interrupción por cambio en la línea del Puerto B. En serie con estos pulsadores
  4. 4. 374 MICROCONTROLADOR PICl6I-'84. DESAILROLLO DE PROYECTÚS e ELA-MA deben conexionarse unas resistencias con la ñnalidad de que no cortocircuiten las líneas RB6 y RB7 cuando se envia datos al módulo LCD y a la vez se active estos pulsadores. 24.3 REGISTROS DEL DS1307 La figura 24-4 : nuestra el mapa de direcciones de la memoria RAM del DSl307. Los registros del calendario se localizar) en las direcciones 00h hasta la 07h. Desde la 08h hasta la 3Fh hay 56 posiciones de memoria RAM que pueden ser utilizadas para almacenar datos. 00h 01 h. 02h 03h 04h 05h 06h 07h 08h SECON DS MINUTES HOURS YEAR í-_íl CONTROL 3Fh Figura 24-4 Mapa de memoria de1DS1307 El valor del tiempo y calendario se obtiene mediante 1a lectura de los registros apropiados. La figura 24-5 muestra los registros del reloj y calendario en dctalle, a destacar: leitrleneleitsl Bit4|Bit3iBit2iBit1iBitüi 1o sEcoNDs sEcoNDs 1o M| NUTES d MINUTES HOURS H " DAY 1o DATE DATE x LMQSTH MONTH YEAR Figura 24-5 Regismsrá' de! 051307
  5. 5. '15 ! Ot-MA CAPÍTULO 24: 051307. RELOJ-CALENDARK) EN BUS I2C 375 El formato de todos [os datos está en BCD. El bit 7 del registro 00h es el bit de puesta cn marcha Clock Hair (CH): o Si CH=0, pone en marcha el reloj. o Si CH= l, impide el funcionamiento del reloj, el cual permanecerá parado. El formato de las horas puede seguir el modelo americano o el europeo controlado por el bit 6 del registro 02h (Bit 12124). o Si (Bit 12/24) = 0, elige el modo europeo de 24 horas (0.23 h). o Si (Bit 12/24) = 1. elige cl modo americano de 12 horas (l. .12h). En el modo americano dc [2 horas, el bit 5 (AJP) del registro 02h es el bit que determina si la hora es AM (bit AXP = 0) o PM (bit AJP = l). En el modo europeo de 24 horas, el bit 5 es cl de mayor peso de las decenas de hora. El contenido del registro 07h controla 1a señal euadrada dei pin SQWKOUT tal como se explica a continuación. 24.4 REGISTRO DE CONTROL El registro dc control dcl DS1307 está en la posición 07h y se utiliza para el gobíemo de 1a onda cuadrada que se obtiene en el pin SQW/ OUT. El significado dc sus bits es: à! Bits 0 y l, RS (Rate Select). Estas bits ñjan la frecuencia de la onda cuadrada cuando está habilitada según la tabla 24-1. Ê l Hz i 4.096 Hz 8.192 Hz 32.768 Hz Table 24-1' Frecuencia de ! a onda cuadrada por ! a paüíla SQ W/ OIJT Bit 4, SQWE (Square Wave Enable). Habilita la onda cuadrada de salida: o Si SQWE = 0, en e] pin SQW/ OUT no hay una onda cuadrada. o Si SQWE = 1, cn el pin SQW/ OUT hay una onda cuadrada. Bit 7, OUT (Output Control). Indica el nivel lógico de 1a salida SQWHOUT cuando esta dcshabilitada la onda cuadrada (es decir si SQWE = 0): o Si OUT = 0, el pin SQW/ OUT está a “0”. o Si OUT = l, el pin SQWIOUT está a “l”. Así, por ejcmplo, para generar una onda cuadrada de l Hz por el pin SQWE, la palabra de control seria 500010000' (SQWE = I, RSI = RSO = 0)-
  6. 6. 3 76 NIICROCONTROLADOR PIC 161784. DESARROLLO DE PROYECTOS © Ria-Ma 24.5 ESCRITURA EN EL DS1307 La transferencia de datos desde el microcontrolador al DS1307 sigue el procedimiento de escritura de] maestro al csclavo de un bus 12C ya conocido y esquematizado en la figura 24-6. La transferencia de datos se efectua cn el siguiente orden: o Primero el microcontrolador maestro envia ia condición de Start. 0 Luego envia la dirección del DSl307 (Slave Address) en modo escritura que es la b'11010000' o D0h. o A continuación el maestro envia un puntero con la primera dirección del registro a escribir (Word Address). 0 Después se transmitem los datos a escribir. La dirección del registro a escribir se incrementa automáticamente. o Cuando termina de escribir el microcontrolador maestro envia 1a condición de Stop. Slave Address Word Address (n) Data (n) Data (M1) Data (MX) usa Lss MSB LSB MSB LSB Mes LSB MSB LSB SDA E 1 101090 o n xxxxxxxx n xxxxxxxx na __ n xxxxxxxx nn o- ¡ x x s: x z n. e . É a s: e s e ã e lã U3 Figura 24-6 Protocolo de escritura de¡ maestro sobre e¡ DSI307 24.6 LECTURA DEL 031307 La lectura de los datos del DSl307 por parte del microcontrolador sigue el procedimiento de lectura del esclavo por parte del maestro ya conocido y esquematizado en la figura 24-7. La transferencia de datos se efectúa en cl siguiente Orden: Slave Address Data (n) Data (n-tl) Data (nd-Z) Data (nr-X) (Fm-n z--N-'F-ñ e rÉ-*Híx mma MSB LSB MSB LSB MSS LSB MSS LSB MSB LSB SUA XXXXXXXX __ Ill¡ I- | s: :z x z s: z n. Ê s e e a e Ia g STAR Figura 24- 7 Protocolo de factura de¡ 081307 por parte de¡ maestro o Primera el microcontrolador trtaesno envia la condición de Start. 0 Luego envia la dirección del DS1307 (Slave Address) en modo lectura que es la b'1 1010001* o Dlh.
  7. 7. entra CAPÍTULO 24: 031307, RELOLCALENDARIO EN BUS I2C 377 t Dcspués el maestro lee los datos de los registros. La dirección del registro a leer se incrementa automáticamente. o Por último el microcontrolador maestro envia 1a condición de Stop. El primer registro ieído será el señalado en la última operación anterior realizada. Si este dato se desconoce, primero habrá que realizar una operación de escritura para conocer exactamente el valor de este puntero, de forma similar como sc explico para el termômetro DS l 624. 24.7 LIBRERÍA DE SUBRUTINAS El protocolo dc escritura y lectura cn cl 051307 se concreta cn las siguientes subrutinas de control descritas en la librería DS 1 307INC: o “DS1307_lnicializa". Configure la scñal cuadmda que gencra cl DSl307 en su pin SQW/ OUT a l Hz. o “DS1307_Lee". Lcc las variables de tiempo del DS1307 y las guarda en los registros de tiempo correspondicntes (Anho, Mes, Día, ctc. ). 0 “DSl307_Escribe". Carga los datos de los registros dc tiempo (Anho, Mes, etc), dentro del DS 1307. o “DS1307_Carga[tiicial". Realiza una carga inicial en los registros internos del rcloj-calendario DS1307 a fecha: Lunes, 1 de Enero de 2004 a las 0:00:00. - Illleànllikt ' ' ill illlltttllttt à ! F , Iiiíitáíikkiüililllllúk sllllithliltltlk** Llbrer-la $$* llilhlíllf$àll t$$* 11!* *lüllillli Z Estas subrutinas permitem¡ realizar las tareas de manejo del reloj-calertdario osrsor. ;Este dispositivo transmite 1a información via serie a naves de un bus l2C. l ; IIittidliti**ÚÍHKÍG**$901!! !IlíllülültltlltllttitátiltRIF$#$l| $$üillItlullüiltüüttúilllvtlikltllti$llil CBLOCK Anho ; Guaidaelafro Mes ; Guardaelmes Dia güuardaeldra. Bissexuais: güuardaeldiadelesemanazhmesmtc. Hora ; Guardalashmas Mirante ; Guardalosmimrtott Segundo ; G1wdaIossegLurdos. ENDC bslíiüLDireoci-anlêscriatta EQU 0x00 ; DireeCiÓndeIDSISOT DS13ü7_D EQU 031331 ; Submtina "os 1307_Inicialíza" _-. .._. _.. ..___ ____________ . ..- ; CtmñguralaseñalcuadxudatpsegenmeIDSISMmSUpÂnSQW/ OUT: : lHz. asisorgniciariza
  8. 8. H8 MICR( XIÍIWFROI . ADOR PIC I ÓFM. DESARROLLD DE PROYECTOS FPA-MA call 12C_EnviaStan ; Envia condición de Start. movlw DS130'? __DineccionEscrítura ; Indica al DSl307 que el byte a escribir, call I2C_EnviaByle ; está en la posición 07h, que corresponde movlw 0x07 ; al control de 1a señai cuadmda. call I2C_EnViaByte movlw b'O0010000' ; Escribe en el registro de control para call I2C__Envi: a.Byte ; configurar onda cuadrada de] DS130? a l Hz. call I2C__EnviaS10p ; Termina de enviar datos. tem! !! ; Submtixxa "DS1307_Lec" ------------------------------------------------------- -- ; Se leen las variables de tiempo del 051307 y se guardam en kos registros conespondientcs. gIIlS1307_Lee bcf I2C_U1timuBytcLcer call [2C_EnviaStarl ; Envia condición de Start. movlw DSl30?_DireccionEscrimra ; IIIdi-: :a al DS 1307 que el primer byte call I2C_Bnviai3yte ; a leer está en 1a posición 00H, que corresponde movlw 0x00 ; a los segundos; call I2C_Envia. Byte call l2C_EnviaStop : Envia condición de Stop. ; Ahora va a leer 61051307. call l2C_EnviaSmn ; Envia condición dc Start. movlw DS1307_Direcci0nLectura call I2C_EnviaByte caí! I2C_LeeByte ; Lee los segundos. movwf Segundo ; L0 carga en el registro correspondíente. call I2C_LeeByw ; Lee el resw ciclos registros utilizando movwf Minuto ; el mismo procedimicnto. call I2C_LeeByt›e movwf Hora call I2C_LeeByte movwf DiaSenwna call I2C__LecByte movwf Dia call [2C__LecByte movwf Mes hsf I2C_U1timoByteLeer ; Para tennmar. call I2C_LeeByte movtvf Anho call I2C_EmIiaSt0p ; Acaba de leer. return ; Submtina "DSl307_Cazga. Enicial“ -------------------------------------- -- : Rcalim una carga inicial en los registros internos dei Maj-calendario DS 1307 a fecha ; Lunes, 1 de Enero de 2004 a las 0:00:00. DS l 307_Cargn[nicia1 movlw . l ; Inicializa todos los datos del reloj: año, mes, movwf Dia ; dia, día dela semana. hora, minuto y segundo. movwf Mes
  9. 9. ñ IEA-RNA movwf movlw movwf clrf' clrf clrf ; call ' return DiaSemana .4 Anho Hora Minuto Segundo DS 1307 Esrribc CAPÍTULO 24: DSI 30?. RELOJ-CALENDARIO EN BUS T2C ; Inicializa en el año 2004. ; Después 1o grab: : en el 051307 para ; ponerlo en marcha. É Subrutina "DSl307_Escribe" ---------------------------------------------------------- -- Carga los datos de los registros Anho, Mes, etc. , dentro del DSl307. DS l307_Escribe call movlw call Inovlw call movf call movf call movf call movf call movf call movf call movf call call retum I2C_EnviaSta11 DSl307_DireocionEseri tura I2C_EnviaByte 0x00 I2C_EnviaByte SegundmW I2C_EnviaByte MinutojW l2C__EnviaByte HoPcLW IZCjÉUViaByIe DiaScmanzLW [2C__Enx= iaByte Di a. W I2C_EnviaByto MesNv' l2C_EnviaByte Anl1o, W I2C_EnviaBytc I2C_EnviaStop ; Envia condición de Start. ; hidica al DSIBOT que el primer byte a escribir ; está en 1a posicíón 00h que corresponde ; a los segundos. ; Pesa los segundos de 1a memoria del PICIÕFS4A a] ; 531307. ; Y sc repite el proceso para el resto. ; Termina de enviar datos. 24.8 PROGRAMA DEL RELOJ CALENDARIO DIGITAL 379 La figura 24-3 muestra cl esquema de un reioj digital y calendario basado cn el DSl307 y controlado por un microcontrolador PIC E6F84A. Su funcionamiento se detalla en los comentarios de] documentado programa de control que se expone a continuación y en los diagramas descriptivos que se intercalan. A partir de este esquema y este programa es tãcil implementar proyectos basados en reloj-calendario de tiempo real tales como temporízadores programables, Cronômetros, programadores de tiempo, etc. Por ejcmplo cn cl capítulo 18 se explica un temporizador programable facilmente adaptable a este dispositivo.
  10. 10. 380 MICROCONTROLADOR PIC l6F3-4. DESARROLLO DE PROYELTOS o Iza-MA . úúútúlíiúilúlhtñlhlalahtnl tâtltltttüllllálúlkilailü# áiàtútttútúúüúúüâláti#titltilúluhkúàulllúáãtlá 3 . _. ; Programa para un reloj digital en tiempo real con puesta en hora. Visualize¡ los datos de] ; reloj en formato: "Dia Mes Año" (Primera línea) ; ”Díakde_1a_Scmana i-íoraszMinutoszsegrmdos", (Segunda línea) ; (por ejemplo " 7 Dícíemb. 2004" (Francia línea). ; "Mattos 8:47:39" (Segunda línea). ; La actualizado: : del reloj se consigo-e lcyendo e] chip 1331307, que es un reloj y ; calendario en tiempo real compatible con bus l2C. É El 081307 se conñgura para que genero una serial cuadrada de un 1 Hz por su pin SQW/ OUT. ; Esta señal se aplica al pin de interrupción INT del PIC16F84A de manera que generis. una ; interrupción cada segundo, que es cuando realiza la lectura de] 051307 y la visualiza. à La "PuestaEnHora" se logra mediante dos pulsadores: "MODO" e "INCREMENTARW ; Su modo de operación es: ; 1° Pulsa MODO, los "Años" se ponen intermitente y se ajustar¡ mediante el ' puísador INCRENEEÍNTAR. É 2° Pulsa MODO y pasa a ajustar los "Meses" de forma similar. ; 3° Se va puisando MODO secuenciaimente para ajustar del modo anteriormente ; explicado los días dei mes, los días de la Semana, ias horas y los minutos. ; 4° Pulsa MODO y se acabó la "PuestaEnI-Iora", pasando a visualización nomial. É Cuando se ajusta una variable de tiempo, esta debe aparecer en intennitencia. É Los pulsadores MODO e INCREMENTAR se conectan a líneas de] Puerto B y su ; ñmcionamiento se bass. en mtemnnción por cambio en la linea del Puerto B: a ; ZONA DE DATOS It-*It&articulam; um*Heat: :at*: ins#asat#tl*itnas: :*INI*: uma: !H: nactrádtaelcttsttnkaràáàttàtáal-#à _CONFIG _CP__OF'F & _WDT_OFF 8a _PWRTE_ON 8: _XT_0SC LIST P= t6F84A INCLUDE <PE6FS4AJNC> CBLOCK 0x0C Amália: ;Registro auxiliar. lntemaitencia - ', Para lograr la intermitencia. ; Si es 0 apaga en iniernairmcia. FIagsAjusbe ; Guarda ! os ñags para eatabiecer los ENDC ; ajustesdcciia. mes, año, hora, ete. #DEFINE ModoPulsador PORTBJ ; Los pulsadores se conectam a estos #DEFINE hicrementarPuísador PORTBJS - ; pines dcl Puerto B. #DEFINE _DS1307 PORTB,0 ; La onda madrada al pin RBOHIrtI'. #DEFINE F_AjusteAnho Fiagmjuatej ; Flags para los diferentes modos de #DEFINE FjtjusneMes Flagsàjusteá ; ajusta. #DEFINE F_AjustcDia Fiagmjustej #DEFINE [Ajusteüiasemana Plagsájustel #DEFINE Fjtjuatei-lora FlagsAjusteJ #DEFINE F__AjusteMinmo nagsajuszen
  11. 11. ;DRAMA CAPÍTULO 2,4; D530?, RELOJ-CALENDARIO EN BUS [2C 331 : IIIÚQIÍHFÚ#Ilrlllllklíilil$ll**11H51¡*CMF*Il*Fil#Illtáàil**t! !!$i= üü$íilllliàlttiltlitüüiküflii ORG 0 gota Inicio ORG 4 goto Scrviciolntenupcion "Inicio" - Prepara módulo LCD. - configura entradas PIC: o Lineas de pulsadc res. . Entrada onda ouadrada. configura onda cuadrada del 081307 que interrumpirá al PIC una vez cada segundo. LEI D513D7 estaba antes aumentado por 1a bateria BT1? "AntesConBateria" SI gModo 'RespalrioW "Ds130?_CargalniciaI": Imciaüza todas las variables ele tiempo (años. meses, ele. ) y las escriba an el 031307. Habilíta ras ínterrupcionea de! PIC. "PuestaEnHoraResefz Pane el raio] em hora por primera Ve: "Principal" Pesa a modo de Bain Consumo. Espera las interrupclonea. Figura 24-8 Diagrama dejhjo principal de¡ reloj digital Habilita las interrupcionea de¡ PIC. Mensajes addwf ? CLP Mmajeítmes DT "Linus 2h98 MensajeMartes DT 'Marcas ", 0x00 MensajeMiezmies DT "Ia/ Iim. 'ZOxOO
  12. 12. 382 MICROCONTROLADOR PICI6FS4. DESARROLLO DE FROYECTOS McnsajeJueves DT "Jueves ", 0x00 Mensaievieznes DT "Viemos ", 0x00 MensajeSabado DT "Sabado ", 0x00 MensajeDomingo DT "Domingo ", 0x00 MensajeEn-: ro DT" Enero", 0x00 MensajcFebrero DT "Febrero", 0x00 MensajeMarm DT" Marzo ", 0x00 McnsajeAbril DT" Abril ", 0x00 MensajeMayo DT" Mayo ", 0x00 MensajcJunio DT " Junio", 0x00 MensajeJuilo DT " Julio ". 0x00 MensajeAgoato DT " Agosto ", 0x00 MensajeSeptietnbre DT "Septiem", 0x00 MensajcOctixhre DT "Octubre ", 0x00 MensajeNovietnbtc DT "Noviembf, 0x00 MonsajeDi-ciembre DT "Diciemb. ", 0x00 MensajeBlanoo DT " ", 0x00 Diassetnana addwf PCL, F nop retlW Mensaj eLunes retlw MensajcMartes rctlw MensajeMicrcoíes retlw MensajeJueves retlw Mensajevimes retlw MensajeSabado retlw MensajcDomingo Meses addwf PCL, F nop zatlw MensajeEncro retiw MensajeFebrero retiw MensajcMarzo retlw MensajeAbríl rctlw McnsajcMayo ; Ooho espacios cn bianca. ; No hay dia 0 de la semana. Empiczan cn ; cl dia l dc ia semana (Lunes), ; Día 2 de la semana. ; Dia 3 dc Ia setnana, ; Dia 4 de la semana. ; Dia 5 de la semana. ; Día 6 de la semana. ; Dia 7 de ia semana. ; No hay mes. 0x00. ; Empiczan an el mas i (Enero). ; Mes 0x02 ; Mes 0x03 ; Mes 0x04 ; Mes 0x05 @J ! UL-Md
  13. 13. nua-MA CAPÍTULO 24: DSIEO? , RELOJ-CALENDARIO FN BUS IZC 383 Ittlw Mensajelurmio ; Mes 0x06 rctlw Mensajelulio ; Mes 0x07 retlw MensajeAgosto ; Mes 0x08 retlw MensajeSeptimnbrc ; Mes 0x09 nop ; Mes OxOA (Como el DS] 307 trabaja en BCD, nop ; Mes 0x08 estos meses se rellenan con nop ; Mes ÚXÚC "nop"). nop ; Mes 0x01? nop ; Mes ÚxOE nop ; Mes ÚxOF retlw MensajeOctubrc ; Mes 0x10 retlw MensajeNoviembre j. Mes 0x11 rctlw MensajeDiciembm ; Mes Ux 12 F inTablas ; Estas tablas y mensajes se sitúan al principio de] programa con e! propósito que no ; supere la posición DFFh dc: memoria ROM de programa_ De todas formas, cn caso de que ; así fuera, se visualizada cl siguiente mensaje de error cn el proceso de ensamblado: IF [FinTablas > OxFF) ERROR "Atenciónz La tabla ha superado el tamaño dela página de los" MESSG "primatas 256 by1es de nmmoria ROM. NO funcionará correctamente. " ENDIF ; lnstmcciones de inicialización. - -------- --- -------------------------------- -- - Inicio call IgCDJnicializa bsf ST ATUSRPO ; Acceso banco I. bcf 0PT10N_REG. NOT_R EPU '. Se activar¡ 13s resistencias de PuH-Lfp del Puerto B. bsf ModoPulsador : Los pulsadores se configuram como entrada. bsf lncrementarPulsador bsf OndaCuadrada__DSl307 bcf OPTIOBLREUJNTEDG ; Intcrrupcíón INT activa por flanco de bajada. bcf STATUSRPU › . - Acceso banco o. clrf F lagsAjustc ; Inicializa todos los tlags de Ia puesta en hora. call DSl307__Inícia1i2-3 ; Conñgma la señal cuadrada que genera el ; 081307 en su pin SQW/ OUT a 1 Hz. ; Ahora Ice el bit 7 de los segundos para saber el estado anterior dcl rcloj antes del ; reset. Este bit es el CH (Controk Halt) y permite poner en marcha (CH=0) o parar el ; reloj (CH=1). Tras la lectura pueden ocurrir dos casos: ' - Si CH está a “O” quiere decir que antcziormenle el reloj ya se ha puesto en hora alguna vez y está en modo "respaldo". Es decir, ha fallado la alimentación y el DS1307 sc está alimentando por Ia bateria conectada al pin "VBAT", aunque el reloj no se visual ice en 1a pantalla. Por tanto, no debe ínicializame porque se corrompería el contenido dcl ; DSl307 qu: : ya está en marcha. - Si CH está a “l" quiere decir que estah: : parado y es la primera vez que se pane cn hora. cal¡ DSl307_Lee ; Lee los segundos en el DS] 307 y comprueba el btfss Segunda? ; vaior del bi! CH. Si es “l” salta toda la gozo AntesConBatez-ia ; inícialización de los registros y la puesta ; en hora irlicial. call DS1307_Carga1nicía1 ; Realiza 1a carga inicial a l Enero de 2004.
  14. 14. 384 MICROCONTROLADOR PlCl6F34. DESARROLLO DE PROYECTOS movlw ! T1001 1000' ; Las ãntenupciones se dñbãi habilitar después movwf INTCON ; de ! a sarga inicial de! DSIBG? , cai¡ PLLesIaEnI-Iazalleset ; Puesta cn hora por primera vez. goto Principal AnmsConBateria movlw 121001 1000' ; Habilite¡ las interrupcíozles INT, RB! y 1a mvwf INTCON ; galera! GIE. ; La sección "Principal" es de urantenhniento. Pass a¡ modo ¡tposo y sólo espera las inxermpciones ; procedentesde Ia línea "SQWIOLTW del 081307 que se produce: : cada segundo en funcionamento ; normal ycada S00 ms cuando está en la "PuestaEnHat-a". Principal sleep goto Pximipal "Serviciolntarrupcion" S¡ cHa interrumpido Ia onda cuadrada à dewswov? "Reloj": Lee sl 081307 y visualiza NO ! os valores en la pantalla. gHan interrumpido los No pufsadoras? Sl ; Está pulsado "MODOW SI 'PuestaEnHoraT Co nega de pues/ ta an hora del registo Ftagsâjuste. ; Está pulsado s! "INCREMENTARW LRBB? "lncrerrtentarñ incrementa la "Finlntemxpcicw variabte da tiempo cofrespondiente. Limpia flags da reconocirmanlo de | as intarmpciones. Retumo da Ia interrupción Figura 24-9 Diagrama dejiujo de Ia submtina de servicio a ! as inierrupcianes É INA-MA
  15. 15. É IEA-MA CAPÍTULO 24; 051301 RELOJ-CALENDARIO EN BUS I2C ; Sübmtina "Sêsvíciohltemrpcion" - ---- ------v--------~------------~ Ênmia qué ha producido Ia interrupción y ejecnta la subiutina de atención correspondiam. Seriviciolntenupcion btfsc JNTCONJNTF ; Si es una itaim-apoio: : procedente de la onda call Reloj ; cuadrada del DS [307, actualiza la visualización. htíiss INICONRBIF' ; Si es una imemlpción RBI, !ee los pulsacloros. _ goto Finlnterrupcâon btfss ModoPulsado: ; @Está paesionado el pulsadot de "MODOW call PuestaErñíora ; Si, pasa a panel: en hora. btñss IncrcmentarPiúsador; gPulsado "INCREMENTARW call incrementar ; Si, pasa a intraocular e] registro de tiempo Ftnlmenupcion ; correspondiam. bcf INTCONBBII? ;Limpia los flogs de reoonocimiemo de 1a bcf INTCONJN TF ; interrupcióirl. retñe ; Está en Sl Poesia En Hora? "Lea_DS130 7" "DS13u7_Lee": Lea en al 081307 - se prepara para interrumplr cada las variables de tiempo 500 ms y lograr Ia intermiie ncia. actualizadas (año. mas. etc). - Conmuta e¡ flag de la interrniten cia. "ActuaIizaRelof "Visualizaiãeloif visualiza Ia lectura del reloj en la panlalla. Figura 24-!0 Diagrama de fujo de ia submarina Reloj í " ' 9- n-H--h-_u-e-n-e--ho-b--u--v-h : EmsobnünmñtñzaheregímMAnhmEogDígDhSmmaHomMhumySegmdo ; hymdoábslmanavésdoíhamlseajeaaxdêbiduhpüicimdchmxmcióaoe ; lueñâ-uiahdnàe! liggimprowúcdelpiwâüWzñüWdelbstâmyschacmeefadoalph ' ; RBWÊNTÚHÍ FICHSFMA. “ . : Edaànmapciónocmecadasegmdoaimámvianñzàcíóomrmuycadasüoaiwá ; envpuenaenhanoonelolsjetivodecansegukiaimafmimmh 385
  16. 16. 336 MICROCÚNTROLADOR PICi 61584. DESARROLLO DE PROYECÍ' OS c; RA-Má ; Si no está en puesta eo hora está cn &mcionamiento normal, por tanto. se limita a leer ; el DS1307 y a visualizar 1a hora. iieloj movf FiagsAjustizF ; Sino está cn puesta en hora se limita a 13%: : STATUSZ ; iecr el 081307. goto Im_DSl307 ; Si está eo algún modo de ajuste debe intemimpir cada 500 ms para lograr la intcrmitencía ; alternando la intenupcion por flanco de subida o de bajada. Esto lo Consigue mediante la ', opcración XOR dcl fiag [NTEDG con un "l", lo cual intricrte este hi1 cada vez qu: : ejecuta 1a ; ÍHSÍTUCCÍÚII_ y por tanto oonmuta entre flanco ascendente y descendente. bsf STATUSRPO ; Acceso al Banco l. movlw 13401000000' ; El bit NTEDG está cn cl lugar 6 dei registro. xotwf OFHON_REG, F bcf STATUSRPO ; Acceso al Banco 0. ; Adema. : complementa el registro [ntonnitenoia para que se produzca ia intermitencia ; cada 500 míliscgimdos cuando está on la pucsta en hora. comf Intermitcnciaf goto ActualizaRcloj ; visualiza cl reloj y sale. LccLDS l 307 ; No está en ningún modo do ajuste, Sino en funcionamento normal de rcloj y pasa a leer los ; registros dcl reioj-calcndario DSBO? a través dcl bus l2C. Los registros del E8130? ya ; !mbajan en toi-mato BCD, por tanto. no hay quc hacer ningún lipo de conversion al leerlos. call DS] 307_Lcc ActualizaReloj ; Estas dos insmiccionos se pueden ; can VisualizaReloj ; obviar, ya que a continuación efectivamente ; return ; ejccuta la subrutina VisualizaRcloj y ; retoma. ; Subrutina "VisualízaR-eíof* ----------------------------------------------- ---- ; Visuaiiza el rcloj eo fomiato "Dia Mes Año" (Primera Línea. ) ' "Día_de_la_Semana HoraszMínutootScg-undos", (Segunda Linea). É Por ejemplo " 7 Dicicmb. 2004" (Primera Línea). ; "Mortes 8:47:39" (Segunda Línea). ; La variable ajustada debe aparecer en intcrmitencia. Esto sc iogra con ayuda dc cualquier ; bit dci registro hitermitcnoia que comnuta cade 500 ms en la subrutína Reloj. iisuaiízakeioj call LCD_Lineai ; Se sitúa en la primera linea. btfss F_AjustcDia ; ;Está cn ia puesta ea hora? goto EnciendeDia ; No. Pausa a visualización nonnal. btfrss Intcnnitenciaü ; Si. Pasa a intcnnítcncía si procede. goto ApagaDia ; Apaga en la. intcimitoncia. EnoiendeDia movl' Dia, W ; Lo visualiza, El 1351307 ya 1o da cn BCD.
  17. 17. t-RA-hiá CAPÍTULO 24: 081307, RELOJ-CALENDARIO EN BUS IZC 387 call LCD__Byte ; visualiza rechazando : :em de las. decenas. goto VisuaIizaMes ApagaDia call LC D__DosEspaciosBlanoos ; Visualize¡ dos espacios en bianca. "Visualize Reloj" Sitúa el cursor al principio de Ia primera línea en Ia panialla. &Está en . LSe debe Puesta En Hora? encendeir en Ia intermiiencia? _ _ V __ ; Flag E"°'°"deD'3 --- inlermitencia = encendido visualiza el dia del mes en la pantalla "Apagama" __ _ _ __ 'LC D_DosEspaoiosBlanco5": vmumzaMe-s - visualiza dos espacios en blanm en Ia pantalla. dando sensacuún 5 de variable apagada. (De forma similar para: mes. año. días, dia de Ia semana. hora y minuto). "VisualizaSegundos' Visualize¡ los segundos en Ia pantalla. fiigura 24-1¡ Diagrama defhgo de la subi-urina VisuafiizaReloj VisualizaMes ' cell LCD_UnEspacic-Blanco ; Visualize un espacio en blanco. bliiis F__AjusteMes ; &Está en la puesta en hora? goto EnciendeMes ; No. Visualizado: : normal. btfss lntermitencíap ; Si. lnterrnitencia si procede. goto ApagaMeá ; Apaga en la intermitencía. EnciendeMes movf Mes, W ; Lo visualiza. call EscribeMes goto VísualízaAnho ApagaMes movlw MensajeBlanoo cali LCD_Mensaje ; Visualize varios espacios en blanoo.
  18. 18. 388 WCRÚCONFROLADOR ? IC16F34, DESARROLLU DE PROYFCTOS fisualízaAnho btfss F_AjustaAnh-: › goto EncíendeAnho btfss Intennitmwiap 30W 3133883111110 EnciendeAnho call LCD_UnEspacioB1nnco mavlw 0x20 call ÍJCDJÊYÉE movf Anhaia¡ call LCDJBytGCOmpIEKO goto VisuaIímDiaSemana Apagammho nxovbw MmsajeB-lanoo call LCD_Mensaje VísxudizaDiaSmmna cai: LCD_Linea2 btfss [Ajustebiasemana goto Enci btfss Intemnimncízgo goto Emi mcwf DiaSenmnegW cal¡ BacribeDi/ &Sanana goto Vimüzal-Iaras movlw cai! LCILMensaje em Lama# C851 39:3' - . - Í* 1 : :WN- '= " . em _ _ ! wa ¡Lágusàc-_Minnto _ guto - Ima _ lmznnirmcçagü _ 39m Apàglalirmtos- movf hzlínatmw um LCDJiyteCmrmlem goto V' ' gsmdos ; ¡', Está en 1a puesta en hora? ; No. Visualización normal. ; Si. lntamútmcía si procede. ; Apaga en 1a intezmitencia_ ; Visualize¡ un espacio eu Blanco. ; Visualiza ei "zúxx", del não "dos mil . ..“. ; Visualizavazios espacios cn bianca. ; Se sitáamhscgzmdalínea. ;gñstáeniapmsmmhoraü : No. vísnlizaciónnormaí. ;sí. lnàamítawiasiprocade. ;Apagaentaintmnitmcim ; Invisnaliza ; Viutslizavaríosespacioscnblasaçn ; gàatfenlnpuesumhotàti ' . zNmvuuaíiwaciénnatmá. . ' v* : :Apm _A @vagmàmishàxg ' " _-- - _ ; *f* para ; gñstáçzihpuasiamhomç 'Ê' ! IA-MA
  19. 19. tina-Mn CAPÍTULO 24'. 031307_ RELOJCALENDARIO EN BUS I2C 339 ApagaMinutos call LCD_DosBspaciosB1ancos ; visualiza dos espacios en bianca. ;Vismíizaseglmdos movlw 'z' ; Envia "z" para separar datos. call LCD__Caracter movf SegundoM' ; visualiza segundos. cai¡ LCD__BylnaCo1-npleto return É Submtíxm "EscñbcDiaS-: nlanzfl ---------------------------------------- -- ; Escribe el dia de la semana eu ! a posicióu actual do la pantalla, utilizando la tahla ; "Bassi-Liana". Simone que ei Lunes es el dia i y e] Domingo e] 7. ; En el registro W se le introducc cl dia de la sen-nana numérico y en ! a pamalla aparece el ; dia de la serrana en letras. Así por ejemplo si [W)=0xO2 en la pantalla aparecerá. "Martes". ;Primero comprueba que no ha superado el valor máximo para evitar problemas de saltos ; erráticos con 1a llamada "call DiasSemana", en caso de una lectura dcfbctuosa de este ; dato por pane del 1381307. EscribeDiaSemana sublw 0x07 ; ,gl-Ia superado su valor máximo? btfsc STATUSIJ goto LIamada__a__DiasSemana movlw 0x01 ; Lo micíaliza si ha superado su valor máxiano. movwf DiaSemana L1a1nada__a_DiasSemana movf DiaSemaxIaLW call Diassemaxla call LCD__Mensaje return ; Submtina "Escribemes" -- ---- ---- ----------------- ------------ : Escribe el mes de! año en 1a posición actual de 1a pantanal, utilizando la tabla "kisses". :Primera: corapmeba que no ha superado el valormáxinmo para evitarpiohleatzas @saltos ; arráticos con la llaxmda "call Mosca". en caso de una lectura dcfechzosa de estedato ; pomada dcl DSIJÚT. 2311331307 uabajaenscoyrambiambimonauuainsmesmprobamqxxeae ; sohcionaoonmmoarrectadistríbwióndclamblfmesesí àscribeMes sublw 0x12 ; (Ha superado su valor máxilno? (Disse-Nani que btfsc STATUSÇ ' ; trabaja en BCD) ' goto llazrxada__a_Meses movlw 0x01 ; Lo inicializa s¡ ha superado su valor nzávdmo. movwf Mes limaadajjdeses _ - movl' Mes, W ' ; Retorna el resultado cn el registro W. call Meses
  20. 20. 390 NHCROCONTROLADOR PIC l 6F84. DESARROLLÚ DE. PROYECTOS @j RA-MA call LClíLMcnsaje return "PuestaEnHora" çEs un rebote? "PuestaEnHoraReset" NO El ffag de Intermilencia se posiciona. para apagar Ia pantaila al principio de Ia puesta en hora. &Estaba antes ajustando minutos y por tanto ha terminado ya Ia puesta en = h o @Termma ' S' "Funcionamientmormal" . ora, . puesta en hora? ' '- óEgaba antes en _Hsuaüzadón norma¡ NO - configura interrupción por y por tanto empieza ahora la puesta en "arm de balada' . - Inicializa fla s de a' ste “0737 Sl úEmpueza - g fu t? ” _í puesta en hora? Posicione los fiags del "Ajustasiguientei NO registro FiagsAjuste para que se ajuste la variable de tiempo correspondiente a los años. Inicializa los segundos a cero. Posiciona los flags del reglãtfü FIagsAjuste para que "DSi 3O7_EscrIbe": Graba las variables de . tiempo auustadas en el i 081307. se ajuste Ia siguiente variable de tiempo. "FanPuestaEnHgraÍ _ __ "Vnsuallzaiíeioj": visualiza e¡ rolo¡ en pantalla. Espera que deja de pulsar "MODO". ; Slgue pulsado? NO Figura 24-1 2 Diagrama deflujo de 1a submtina PuesxtaEnHora ; Subxutixm "PuestaEnHora" ----------- --~ ---------------------------- ---- 2 Subrutina de atención a la ioterrupción producida por e! pulsador MODO que pune en hora el ; reioj. Cada vez que pulsa se desplaza el “P” a üavés del registro FiagsAjustc, pasando a ; ajustar secuenciaimentc: años, meses. días, días de la semana, horas y minutos.
  21. 21. eita-Im (ÍAPÍTULU 27.4: DSÚOT, RELOJ-CALENDARIO EN BUS l2(' 391 í ; Para comprender el ftmcionarniento de esta subrutina hay que saber que el registro FlagsModos ; oonticnc 5 flogs que permite diferenciar cada uno de los ajustes de registros de tietnpo: ; - "F__AjusüeAnho": bit 5 de FlagsAjuste, para ajustar 10s años, ; - "F_AjusteMes”: bit 4 de FlagsAjuste, para ajusta: los meses. ; - "F__AjusteDia": bit 3 de FlagsAjuste, para ajustados días del mes. ; - "F_AjusteDiaSemana": bit 2 de FlagsAjuste, para ajustar los días de la semana. . ; - "F_AjusteHora": bit 1 de FlagsAjuste, para ajustar las horas. ; - "F_AjusteMinuto": bit 0 de FlagsAjuste, para ajustar los minutos. ; Así pues el contenido del registro FIagAjuste identifica los siguientes ajustes: ; - (FlagsAjuste)= b'U0l00UÚU'. Está ajustando el registro Anho (Atlas). ; - (FlagsAjuste)= b'0OD1000U'. Está ajustando el registro Mes. ; - [FlagsAjuste)= b'0G001000'. Está. ajustando el registro Dia. ; - (Flagsájusteklzfüüüüül 00'. Está ajustando cl registro Diasetnana (Lunes, Martes, etc). ; - (FlagsAjuste)= b'0000O0l0'. Está ajustando el registro Hora. ; - (F1agsAjuste)= =b'0O00000l'. Está ajustando e] registro Minuto. : - [FiagsAjuste)r-=1:t'0t)00l)[)00'. Está, en visualizaeión normal del reloj en tiempo real. ; Pueden ocurtir tres casos: ^ › Que pulse "MODO" estando en modo de wrisualizaeión nomtal identificado porque (FlagsAjuste]= b'000O0(i0'. En este caso debe activar ei flag F_A_i usteAnho, es decir, carga (F lagsAjuste)= b'00l00000', ya que cl flag F_AjusteAnho es el bit S de] registro ; FlagsAjuste. - Que pulse " MODO" estando ya en Ia puesta en hora, en cuyo caso debe pasar al ajuste del siguiente registro de tiempo. Éslo 1o hace mediante un desplazarniento a derechos. Asi por ejemplo, st antes estaba ajustando los meses, es decir: _ (FlagsAjuste)= b'O0Dl0000', pasará a (F lagsAjuste]= b'0000lO0ü' que se identifica ; como ajuste de los días del mes. - Que pulse "MODO" estando en el último ajuste correspondiam: : a los minutos. ; (FlagsAjuste)= b'0Ú0OO0Dl'. pasará a (HagSAjuStekHOOOOOÚOUL indicando que la ' puesta en hora ha tertninado y pasa a visualizador¡ normal del rolo_ i en tiempo real. imeslaEnHora call Retardo_20tns ; Espera a que se estabiiice el : nivel de tensión. btfsc ModoPulsadot ; Si es un rebote sale fuera. goto FinPuestaEnI-Iora PuestaEoHoraReset ; A1 pulsar "MODO" se apaga la variable de clrf Emermiteocia ; tiempo que se va a ajustar. btfsc F__AjusteMixiuto ; Si antes estaba en ajuste de minutos es que goto FunoíonamientoNormal ; ha tenniuado. Graba datos eu el DSi 307 y sale. movf FlagsAjusleE ; Si antes estaha en funcionamiento normal ahora btfss STATUSZ ; pasa a ajustar el año. goto Ajustasiguiente ; Sino pasa a ajustar la variable de tiempo siguiente. bsf F_AjusteAnho ; Pasa a ajustar el año. clrf Seguindo ; inioializa contador de segundos. goto FinPuestaEnHora Ajustasigttiente ; Desplaza un uno a la derecha del registro bcf STATUSE ; FlagsAjizste para ajustar secueneialtnente cada nf FiagsAjustef ; uno de los registros de tiempo: año, mes, dia, goto FinPuestaEnHora ; dia de la sanar-ia, hora y minuto. ; Lo siguiente se ejecutn si ya ha acabado el ajuste de la hora, es decir, pasa a
  22. 22. 392 MICROCONTROLADOR PICIÚFM_ DESARRULID DE PROYECTOS ; íímciommiento normal. En este caso hay que realizar tres operaciones: › S o l o l u J 9 Fija: 1a intemspción INT saiu por flanco de bajada. Inicializar a cera todos 10s Haga de ajuste contenidos en (Fiagmjuste). Escríbir el 1351307 con ! os datos de las variables de tiempo contenidas en la memoria RAM del microconlmlador. FmcionamientoNonnal bsf STATUSJRPÚ bcf OPTIONJZEGJNTEDG ; AccesoalBancol. bcf STATUSRPÚ ; Acceso nl Banco 0. clrf' FlagsAjuste ; Inicializa los Haga de qiuste. call DS l307_Escribe ', Graba 30s datos en e! DS 1307. FmPuesmEnI-lora cal¡ VisualizaRgloj büs ModoPulsador goto FinPuestaEnHara return ; visualiza los datos de] reluj digital. ;Altera espera deja de pulsar. ; Submtina "Incrementar" ------------- -- ----------------------------------- -- É Submtina de atención a Ia intermpción por cambio de la línea RBó ai cual se ha ; conectado el pulsador "INCREMENTAR". : Incrementa según corresponda Ima sola de las siguientes variables: (Anho), mes), ; (Día), (Diasemanm), (Hora) o (Minuto). [amamentar call Retardo__20ms btfsc lncrammtarPulsador; Si es un rebote sale ñaera. goto Finlncremenlnr btfsc F_Ajusu-. Anha call btüc F_Ajus1eMes call hmtexmntameses btfsc F_Ajus¡eDia call IncmmmtaDias htfsc [Ajusteüiasemam call & btfsc &Ajustel-Iura cai! Incmnemalíoxas btfsc FJàjustaMixmm call- ms movlw UHIIIIII' movwf htexmitencin _ call Visuaiizallcloj ; Vietnã: : : mientras espera qua: dqie call Rcmrdojoüms ; de' pulsar. ' btfàs innremcntaa-Puisador; mientras pmnammca pulando goto lncretnerrtar ; imrementalá el dígito. ; Interrupción WT activa por ñanco de bajada. : Espera a que se estabilice el nível de tensíón. ; Viatalízasiempre sit¡ RNMA
  23. 23. cum CAPÍTULO 24: DS 1307, RELOJ-CALENDARIO EN BUS [ZC 393 "incrementar" SI ; Es un rebote? NO ¡Estaba aiustando al año? "incrementaAnho": incrementa Ia variable de tiempo (torres-pendiente a los años y ajusta en BCD. (De forma similar para los meses, dias, dias de Ia semana, horas y minulos). (La subrutina "PuasiaEnHora" irnpide Posicione nag de ¡ntermitencia para que sa está ajustando más da una que visualice siempre miantras vriable de tiempo a Ia vez). incrementa. "visuaiizaRelofü visualiza al ralo] en Ia pantalla. "Retardo_2U0ms': incrementa sl se mantiene pulsado esta tiempo. asigue pulsado? Seguira incrementando "Finincremenzar" No mientras siga pulsado. Figura 2413 Diagrama defluja de Ia subi-urina Incrementar w-à-í--r-n-II-I--n-I-n--n-I-dr-I--à-: u--n-w-n- , Í incrementa el valor d: 1a variable Mímica. Si supeni nos 0x59, lo rcaertea. ;Esiaeixicrementosedabeiuiiwen BCDpa-a elle utiliza IasumninaAjustsBÇD. imf Minuto¡ _ : incrementa 10a minima. moirf Minmíuw ; Lo pasa aBCD. can Ajweaco
  24. 24. 394 WCROCONTROLADOR PlClúF84. DESAFLROLLO DE PROYECTOS ; Lo guarda. ; ; Ha superado su valor máximo? ; Lo izúcialjza si ha superado su valor máximo. ; incrementa las Horas. ; Ahora hace el ajuste BCD. ; Lo guarda. ; ¡gl-Ia superado su valor máximo? ; Lo iniciaiiza si ba superado su valor máximo. ; Subrutina "IncrementaDiasSemana" -------- --- ------------- -- ----- --- ------ -- ', ;Ha superado su valor màdzmo? ; Lo iuicializa si ha superado su valor máximo. ; Incrementa. ,' Ahora hace el ajuste BCD. ; Lo guarda. ; ; Ha superado su valor máximo? ; Lo irúcializa si ha superado su vaior nxáxjmo. ; Subrulina "Incrementameses" - ------ --- -------------- ~-- -------------- --- ~~~~ -- ; Incrementa. ; Ajuste. a BCD. mwwf Minuto sublw 0x59 btfss STATUSJZÍ clrf Minuto reium ; Suhrutina "Incnammtal-Ioras" ----------------- --- -------------- -~ lncrementaI-Ioras incf Horaf movf Homw call › AjusteBCD movwf Hora subiw 0x23 btüs sTATUsp clrf Hora return IncrementaDiasSm-xaaxma incf DiaSemanaf movf Díasemanmw suhlw f? btfsc STATUS! ) gato FinmcretnentaDiasSemana movlw .1 movwf Diasemmm Finlncreamemaüiassemana retum ; Subnnina "Incremzntzfmias" ----------------------------------------------- -- IncrementaDias íncf Dia, F movf Dia, W call AjusteBCD movwf Día sublw 0x3 E btfsc STATUSÇ goto FinlncrementaDias movlw . i movwf Dia Finlncrementaüias 113mm lncreIncntaMeses incf Mesl" mcwf MesNu' call AjusteBCD movwf Mes ; LoguardzL (Ê RA-NM
  25. 25. cru-sm CAPÍTULO 24: DSI307, RELOJ-CALENDARIO EN BUS I2C 395 sublw 0x12 ; ;Ha superado su valor máximo? btfsc STATUS, C goto FinmcrementaMeses movlw . l ; Lo inicializa si ha superado su valer máximo. movwf Mes FinInmementaMescs return ; Subrutina "Incrernentaàxnhos" -------------------------------------- --- ; incrementa el valor de 1a variable (Anhos). Cuando llega a 0x30 (BCD), lo reselea. ;Es decir, líega hasta el año 203 0, que se ha considerado suficientemente alto. ; Este incremento se debe realizar en BCD para clio utiliza la subrutína AjusteBCD. mcrementaAnhos incf AnhcgF ; Incrementa. movf Anhcgw z Ahora hace e¡ ajuste BCD. call AjusteBCD movwf Anho : Lo guarda. sublw 0x30 ; ;Ha superado su valor máximo? btfss STATUS, C ; Si no nega a su máximo sale. cltf Anho ; Lo iuicíalíza si ha superado su valor máximo. retum ; Subrutina "AjusteBCD" -------------------------------------------- --- ; Esta suhmtína pasa a BCD el dato de entrada. Pam clio detecta si las unidades superam ; el valor "9“. cn cuyo caso le suma: : 6 para pasarlo a BCD. Por ejemplo, si previamente ; [Minuto)=0x19, al incrementarle resulta (MmutoFDxlA que no es un código válido BCD, sí se ; le suma 6 resulta (IVIinuwkOXIA-Füxüü-“Oúü que es un código válido BCD. : Entrada: En (w) el código a oonvertir ; Salidaz En (W) el código convertido cn BCD. AjusIeBCD movwf Auxiliar ; Guarda cl valor dei número a convertir. andlw b'0000l Ill' ; Se queda con su parte haja. subiw .9 ; Cnmprucba si pasa de nueva. btfsc STATUS, C goto NoSuperaNueve mnvlw .6 ; S1', lo ha superado, por Io muito le suma 6. addwf AuxiliamF NoSuperaNueve movf Auxilizmw ; Retorna el resultado en el registro W. return INCLUDE <BUS__I2C.1N(I> ; Subrutinas de control del bus l2C. INCLUDE <DS1307JNC> ; Subrutinas de control de] DS1307. INCLUDE <RETARDOS . IN C> INCLUDE <LCD*4BIT.1NC> INCLUDE <LCD__MENS. INC> END

×