Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Modulo MSSP Modulo SPI SSPSTAT - SPI SSPCON - SPI I/O en modo SPI Diagrama de tiempos El DS1302 Caracter sticas Byte de comando Control y transferencia Resumen de registros PIC modo SPI - DS1302 Trabajo a desarrollar: Programacin UART - DS1302 o Diagrama de conexiones Caracter stica de diseo n Diagramas de ujo del programa: Primera aproximacin o Diagramas de ujo del programa: Segunda aproximacin o Diagramas de ujo del programa: Tercera aproximacin o
Mauricio Lpez V. (Ingenier o a) Microcontroladores PIC Mayo, 2012 1 / 65
Modulo MSSP
Modulo SPI
Modulo MSSP
Modulo SPI
En el protocolo SPI, la seal de reloj, SCK, es suministrada por el maestro que n proporciona la sincronizacin y el control del inicio de la transmisin del dato. o o La velocidad de la transferencia de datos depende de la velocidad del reloj. El SPI es un protocolo Maestro-Esclavo con las siguientes caracter sticas:
Solo el dispositivo maestro puede controlar la l nea de reloj, SCK. Los datos no se transeren a no ser que el reloj sea programado. Todos los esclavos son controlados por el reloj, que est a su vez controlado por el a dispositivo maestro. El esclavo no puede manipular el reloj.
MSSP - SPI . . .
Mayo, 2012
3 / 65
Modulo MSSP
Modulo SPI
MSSP - SPI . . .
Mayo, 2012
4 / 65
Modulo MSSP
Modulo SPI
Modulo MSSP
Modulo SPI
La transferencia no inicia si el mdulo esclavo carga un dato en su registro o SSPBUF. Cuando el mdulo maestro realiza la transmisin de un dato, ste se almacena o o e en el registro SSPBUF y debe ser le antes de transmitir el siguiente dato. do
MSSP - SPI . . .
Mayo, 2012
6 / 65
Modulo MSSP
Modulo SPI
Para inicializar el modulo MSSP en modo SPI deben especicarse varias opciones, al programar de manera adecuada los bits de control en el registro SSPCON (SSPCON<5:0>) y SSPSTAT (SSPSTAT<7:6>). Estos bits de control permiten especicar:
- Modo Maestro (SCK es la salida de reloj). - Modo Esclavo (SCK es la entrada de reloj). - Polaridad del Reloj (estado de inactividad del SCK). - Momento de muestrear el dato de entrada (a la mitad o al nal de tiempo de salida del dato). - Transicin del Reloj (salida del dato en la transicin ascendente/descendente del o o SCK). - Velocidad del Reloj (slo en modo Maestro). o - Modo de seleccin de Esclavo (slo en modo Esclavo). o o
MSSP - SPI . . .
Mayo, 2012
7 / 65
Modulo MSSP
SSPSTAT - SPI
bit 7 : SMP (Sample bit). Muestreo del bit. Momento en el que se ingresa el bit en el registro SSPSR. SPI en modo Maestro
SMP = 1. Muestro del dato entrante al nal del tiempo de salida del dato. SMP = 0. Muestro del dato entrante a la mitad del tiempo de salida del dato.
bit 6 : CKE (SPI Clock Select bit). Bit selector del anco en la que se realiza la sincronizacin. o
CKE = 1. La transmisin ocurre en la transicin del estado activo al inactivo del o o reloj. CKE = 0. La transmisin ocurre en la transicin del estado inactivo al activo del o o reloj.
Nota: La polaridad del estado del reloj se establece con el bit CKP (SSPCON<4>).
Mauricio Lpez V. (Ingenier o a) MSSP - SPI . . . Mayo, 2012 8 / 65
Modulo MSSP
SSPSTAT - SPI
bit5:1 : D/A, P, S, R/W y UA: Bits para uso en comunicacin modo I2C. o Se programan en cero. bit 0 : BF (Buer Full Status bit). Bit de estado de buer lleno (slo en modo de o recepcin). o
BF = 1. Recepcin completa, SSPBUF lleno. o BF = 0. Recepcin incompleta, SSPBUF vac o o.
MSSP - SPI . . .
Mayo, 2012
9 / 65
Modulo MSSP
SSPCON - SPI
bit 7 : WCOL (Write Collision Detect bit). Bit que verica si a ocurrido una colisin(slo en modo de transmisin). o o o
WCOL = 1. Se escribe sobre el registro SSPBUF cuando an se encuentra u transmitiendo la palabra previa (Debe ser limpiada por software). WCOL = 0. No hay una colisin. o
bit 6 : SSPOV (Receiver Overow Indicator bit). Bit de sobrepasamiento. SPI en modo esclavo
SSPOV = 1. Se recibe un nuevo dato mientras el registro SSPBUF an conserva u la palabra anterior (El dato en SSPSR se pierde). El usuario debe leer el SSPBUF, inclusive si slo transmite datos, para evitar que se genere el sobrepasamiento o (Debe ser limpiada por software). SSPOV = 0. No hay una overow.
Mauricio Lpez V. (Ingenier o a) MSSP - SPI . . . Mayo, 2012 10 / 65
Modulo MSSP
SSPCON - SPI
bit 5 : SSPEN (Synchronous Serial Port Enable bit). Habilita el puerto serial sincrono.
SSPEN = 1. Habilita el puerto serial y congura los pin SCK, SDO, SDI, and SS como los pin del puerto serial. SSPEN = 0. Deshabilita el puerto serial y congura stos pins como pins de e entrada/salida.
Nota: Cuando se habilita, los pins deben congurase apropiadamente como entradas o salidas. bit 4 : CKP (Clock Polarity Select bit). Bit selector de la polaridad del reloj.
CKP = 1. El estado de inactividad para el reloj es el nivel alto. CKP = 0. El estado de inactividad para el reloj es el nivel bajo.
Mauricio Lpez V. (Ingenier o a) MSSP - SPI . . . Mayo, 2012 11 / 65
Modulo MSSP
SSPCON - SPI
bit3:0 : SSPM3:SSPM0 (Synchronous Serial port Mode Select bits). Estos bits indican en que modalidad se programa el PIC, en esclavo o maestro, as como el valor del oscilador.
SSPM3:SSPM0 = 0101. Modo esclavo SPI, pin SCK = reloj. Deshabilitado el control del pin SS. El SS puede ser usado como un pin de I/O. SSPM3:SSPM0 = 0100. Modo esclavo SPI, pin SCK = reloj. Habilitado el control del pin SS. SSPM3:SSPM0 = 0011. Modo maestro, reloj = salida del TMR2/2. SSPM3:SSPM0 = 0010. Modo maestro, reloj = FOSC/64. SSPM3:SSPM0 = 0001. Modo maestro, reloj = FOSC/16. SSPM3:SSPM0 = 0000. Modo maestro, reloj = FOSC/4.
Mauricio Lpez V. (Ingenier o a) MSSP - SPI . . . Mayo, 2012 12 / 65
Modulo MSSP
Modulo MSSP
MSSP - SPI . . .
Mayo, 2012
14 / 65
Modulo MSSP
Diagrama de tiempos
MSSP - SPI . . .
Mayo, 2012
15 / 65
Modulo MSSP
Diagrama de tiempos
MSSP - SPI . . .
Mayo, 2012
16 / 65
El DS1302
Caracter sticas
El DS1302
Caracter sticas
Descripcin o Pins para conectar el oscilador de cristal de 32.768 KHz. Ground o tierra. Reset. Entrada/Salida de datos. Reloj serial. Pins de suministro de energ a.
Circuito de conexin: o
El DS1302 . . .
Mayo, 2012
18 / 65
El DS1302
Caracter sticas
El DS1302 . . .
Mayo, 2012
19 / 65
El DS1302
Caracter sticas
El DS1302
El DS1302 contiene un reloj/calendario de tiempo real y 31 bytes de RAM. El ultimo d de la fecha del mes se ajusta automticamente para aquellos meses a a que tienen menos de 31 d incluye correccin de ao bisiesto. as, o n La operacin del reloj permite ambos formatos: 24 horas o 12 horas con o indicador de AM/PM. La interface del DS1302 con un microcontrolador se simplica usando una comunicacin serial s o ncrona. Slo se requieren tres l o neas para comunicarse con el Reloj/RAM:
RST o CE (Reset). I/O (L nea de datos). SCLK (Reloj serial).
Mauricio Lpez V. (Ingenier o a) El DS1302 . . . Mayo, 2012 20 / 65
El DS1302
Byte de comando
Byte de comando
Un byte de comando inicia cada transferencia de datos. El MSB (bit 7) debe ser un uno lgico. Si ste es cero y es escrito en el DS1302 o e lo deshabilitar. a El bit 6 especica el dato reloj/calendario, para un cero lgico, o dato RAM, o para un uno lgico. o Los bits de 1 al 5 especican el registro en particular a ser le o escrito. do El LSB (bit 0) especica una operacin de escritura (entrada) si tiene valor cero o lgico o de lectura (salida) si tiene valor uno lgico. o o
Mauricio Lpez V. (Ingenier o a) El DS1302 . . . Mayo, 2012 21 / 65
El DS1302
Control y transferencia
Control de reloj
Un ciclo de reloj es una secuencia de un frente ascendente seguido de un frente descendente. Para datos de entrada, los datos deben ser vlidos durante el frente ascendente a del reloj y para la salida de los bits del dato en el frente descendente del reloj. Si la entrada del bit RST CE es bajo, toda la transferencia de datos se termina o y el pin de I/O va a un estado de alta impedancia. En el proceso de encendido, el bit RST CE debe encontrarse en cero lgico o o hasta que VCC > 2V. Tambin, SCLK debe estar en cero lgico cuando el bit e o RST CE cambia a una estado uno lgico. o o
El DS1302 . . .
Mayo, 2012
22 / 65
El DS1302
Control y transferencia
Transferencia de datos
El DS1302 . . .
Mayo, 2012
23 / 65
El DS1302
Control y transferencia
El DS1302
Control y transferencia
La informacin de la hora y del calendario se obtiene al leer los bytes de los o registro correspondientes, un vez que stos ultimos se hayan congurado (al e escribir en ello) con los datos iniciales deseados. Los contenido de los registros de la hora y del calendario se encuentran en formato decimal codicado en binario (BCD). El registro del d de la semana se incrementa a medianoche. a Los valores que corresponden al d de la semana son denidos por el usuario, a pero deben ser consecutivos (es decir, si 1 corresponde al domingo, entonces 2 corresponde al lunes, etc.). Los datos de la hora y de la fecha con informacin ilgica causan una operacin o o o indeterminada.
El DS1302 . . .
Mayo, 2012
25 / 65
El DS1302
Resumen de registros
Registros de Direccin/Denicin o o
El DS1302 . . .
Mayo, 2012
26 / 65
El DS1302
Diagrama de conexiones
2 RA0 3 RA1
10 RE2 +5V 22 pf 4 MHz 22 pf +5V 1 Vcc2 2 X1 3 X2 4 GND Vcc1 5 SCLK 6 I/O 7 RST 8 Reloj Latch +5V RSTDS13 11 Vdd 12 Vss 13 OSC1 14 OSC2 15 RC0 16 RC1 17 RC2 18 SCK
RD6 29 RD5 28
RD427 RX TX 26 25
SDO 24 SDI 23
+ 1K
+10V
-10V
+ 1 C1+ Vcc 16 GND 15 T1OUT 14 R1IN 13 R1OUT 12 T1IN 11 T2IN 10 R2OUT 9 2 V+ 3 C1+ 4 C2+ 5 C26 V7 T2OUT 8 R2IN
+ -
1 2 3 4 5 6 7 8 9
+ -
Conectar al computador
MAX232
Mayo, 2012
28 / 65
Se desea utilizar un microcontrolador PIC16F877 para programar un dispositivo, reloj DS1302, mediante el protocolo SPI. El reloj debe iniciar con la fecha y la hora: primero de Enero de 2000 a las cero horas, cero minutos y cero segundos, que deben ser desplegados en un display LCD. El usuario podr actualizar la fecha y la hora con ayuda del teclado de una a computadora. El usuario podr reprogramar, en un proceso de modicacin, uno o varios de a o los parmetros de fecha y hora. a
Mayo, 2012
29 / 65
Para llevar a cabo el control del ujo del programa en la programacin del reloj o DS1302, de acuerdo al dato proporcionado por el usuario, dato, se requiere establecer un conjunto de banderas. En general se identican dos grupos de banderas:
- Las que controlan el proceso de captura de los datos, registro Rprogm. - Las que controlan el proceso de escritura en el DS1302, registro Yaprogm.
Mayo, 2012
31 / 65
- wrt hrs (bit Rprogm, 2 ): Captura de las horas (dato = H - wrt min (bit Rprogm, 1 ): Captura de minutos (dato = m - wrt dis (bit Rprogm, 0 ): Captura d de semana (dato = d a
- bit MSB (bit Rprogm, 6 ): Captura del nmero (bit MSB = 1 para nibble ms u a signicativo, bit MSB = 0 para nibble menos signicativo).
Mayo, 2012
32 / 65
- wds dis (bit Yaprogm, 0 ): Escritura de los d de la semana as (dato = d y dato = F = wds dis = 1).
- balmac (bit Yaprogm, 7 ): Captura del nmero (balmac = 0 no se ha terminado de u capturar los dos nibbles del nmero, balmac = 1 almacena los dos nibbles del u nmero en el registro correspondiente). u
Mauricio Lpez V. (Ingenier o a) Programacin UART - DS1302 . . . o Mayo, 2012 33 / 65
dato = ESC ?
NO
proc_ac =1?
SI
procact
dato = 'F' ?
NO
lecano
wrt_ano =1?
SI
lcdtano
Lee_dato
Sale
SI
00h --> Rprogm
NO NO
dato = 'P' ?
prgano 3
SI
NO
dato = 'A' ?
NO
lecmes
wrt_mes =1?
SI
lcdtmes
Lee_dato
SI
1 --> proc_ac
SI
1 --> wrt_ano
NO
dato = 'M' ?
Sale
Sale
NO
lecdia
wrt_dia =1?
SI
lcdtdia
Sale Sale
SI
1 --> wrt_mes 2
NO
Lee_dato
Sale
Sale
Mayo, 2012
34 / 65
dato = 'D' ?
NO
lechora
wrt_hrs =1?
SI
lcdthor
Lee_dato
Sale
SI
1 --> wrt_dia
NO
dato = 'H' ?
NO
lecmin
wrt_min =1?
SI
lcdtmin
Lee_dato
Sale
Sale
SI
1 --> wrt_hrs
NO
dato = 'm' ?
NO
lecdis
wrt_dis =1?
SI
lcdtdis
Lee_dato
Sale
Sale
SI
1 --> wrt_min
NO
dato = 'd' ?
NO
Sale
Sale
SI
1 --> wrt_dis
Sale
Mayo, 2012
35 / 65
NO
prgmes
wds_mes =1?
NO
prgdia
wds_dia =1?
NO
prghora
wds_hrs =1?
NO
prgmin
wds_min =1?
NO
prgdis
wds_dis =1?
SI
0 --> wds_dis
SI
0 --> wds_ano
SI
0 --> wds_mes
SI
0 --> wds_dia
SI
0 --> wds_hrs
SI
0 --> wds_min
NO
inisec
Esc_dato
Esc_dato
Esc_dato
Esc_dato
Esc_dato
Esc_dato
Sale
Mayo, 2012
36 / 65
Para llevar a cabo el eco a la Hyper Terminal se crea una subrutina: tr dato.
tr_dato
0 --> TXIF
NO
TXIF = 1 ?
Ya termin la transmisin ?
SI
Sale
Mayo, 2012
37 / 65
Mayo, 2012
39 / 65
Funciones de Lee dator : Verica que el dato capturado corresponda a la tecla de un nmero. u Si el dato corresponde a un nmero lleva a cabo el eco a la Hyper Terminal. u Si la lectura es del primer nmero (el ms signicativo, bit MSB = 1 ), almacena u a ste en el nibble ms signicativo del registro rgdato, y limpia las banderas e a bit MSB y balmac. Si la lectura es del segundo nmero (el menos signicativo, bit MSB = 0 ), u incorpora ste al nibble menos signicativo del registro rgdato y prende la e bandera balmac (permite transferir el registro rgdato al registro correspondiente, debido a que se termin la captura de los nmeros). o u
Mayo, 2012
40 / 65
Lee_dator
NO
Sale
SI
Realiza el eco a la Hyper Terminal.
tr_dato
Mayo, 2012
41 / 65
bit_MSB =1?
NO
bitlsb 1 --> balmac Para que posteriormente el contenido de 'rgdato' se transmita al registro correspondiente.
SI
Inicializa el registro 'rgdato'. 00h --> rgdato
dato .AND. 0Fh --> W Filtra la parte baja del cdigo ASCII del dato ledo. El nmero deseado. Incorpora en el nibble alto del registro 'rgdato' el nmero ledo. dato .AND. 0Fh --> dato rgdato .OR. W --> rgdato SWAP(dato) --> rgdato Sale Indica proceso no terminado. 0 --> balmac
0 --> bit_MSB
Sale
Mayo, 2012
42 / 65
MACRO vf int
Para vericar que cada parmetro de la fecha (ao, mes, d del me y d de la a n a a semana) y de la hora (las horas y los minutos) introducidos por el usuario se encuentren en los intervalo vlidos, y en su caso ajustar stos, se crea una a e MACRO llamada vf int, la cual se ayuda de la subrutina sb vf it. Intervalo de cada parmetro de la fecha y la hora: a
- Ao: Del 00 a 99 . n - Mes: Del 01 a 12 . - D del mes: Del 01 a 31 . a - D de la semana: Del 01 a 07 . a - Las horas: Del 00 a 23 . - Los minutos: Del 00 a 59 .
Note que el intervalo vlido del mes, d del mes y d de la semana se inicia con a a a el valor 01 , mientras que el resto de los parmetros con 00 . a
Mauricio Lpez V. (Ingenier o a) Programacin UART - DS1302 . . . o Mayo, 2012 43 / 65
MACRO vf int
Denicin de la MACRO: o
- vf int MACRO interna, rbit
Mayo, 2012
44 / 65
MACRO vf int
Funciones de la macro vf int: En los casos pertinentes (mes, d del me y d de la semana) se verica que el a a dato capturado tenga como valor m nimo el 01 . Ajustando a 01 en caso contrario. Vericar que cada parmetro introducido por el usuario no sobrepase el valor a superior vlido y en su caso ajustarlo a ese mximo. a a
MACRO vf_int (interva, rbit)
Establece la bandera indicadora si se debe verificar que 01 es el intervalo inferior. Verifica que cada parmetro cumpla con el intervalo vlido.
sb_vf_it
FIN MACRO
Mayo, 2012
45 / 65
Subrutina: sb vf it
sb_vf_it
bit_ban<0> =1?
NO
SI
Es rgdato = 0 ? rgdato = 0 ?
NO
SI
Actualiza con el valor mnimo (01h). 01h --> rgdato Sale
NO
SI
Sale int_sup --> rgdato Actualiza con el valor mximo.
Sale
Mayo, 2012
46 / 65
Respalda el acumulador, W.
W --> STORW
SI
procact
dato = 'F' ?
NO
lecano
NO
RCREG --> dato
SI
tr_dato
NO
Abortar todos los capturados? dato = ESC ?
dato = 'P' ?
Inicia proceso ? 3
prgano
NO
lecRpgr
SI
1 --> proc_ac Proceso activo.
SI
Limpia banderas controladoras de captura de los datos. Limpia banderas controladoras de escritura en el DS1302. 00h --> Rprogm
tr_dato
Respalda el acumulador, W.
STORW --> W
Sale
Mayo, 2012
47 / 65
SI
lcdtano
NO
Lee_dator
dato = 'A' ?
lecmes
NO
6 4
NO
SI
Habilita la captura de datos del ao. Para la captura del nmero ms significativo. Realiza el eco a la Hyper Terminal. 1 --> wrt_ano
balmac =1?
SI
rgdato --> rano 1 --> bit_MSB 0 --> wrt_ano
tr_dato
Actualiza registro que controla el valor del ao. Termina el proceso de captura de datos del ao. Datos listos para ser escritos en el DS1302. Indica proceso no terminado, para usarse en el siguiente proceso de captura.
Mayo, 2012
48 / 65
SI
lcdtmes
NO
Lee_dator
dato = 'M' ?
lecdia
NO
7 4
NO
SI
Habilita la captura de datos del mes. Para la captura del nmero ms significativo. Realiza el eco a la Hyper Terminal. 1 --> wrt_mes
balmac =1?
SI
vf_int (H'12', H'01')
Verifica que el dato del mes se encuentre en el intervalo vlido. Actualiza registro que controla el valor del mes. Termina el proceso de captura de datos del mes. Datos listos para ser escritos en el DS1302. Indica proceso no terminado, para usarse en el siguiente proceso de captura.
0 --> balmac
Mayo, 2012
49 / 65
SI
lcdtdia
NO
Lee_dator
dato = 'D' ?
lechora
NO
8 4
NO
SI
Habilita la captura de datos del da. Para la captura del nmero ms significativo. Realiza el eco a la Hyper Terminal. 1 --> wrt_dia
balmac =1?
SI
vf_int (H'31', H'01')
Verifica que el dato del da se encuentre en el intervalo vlido. Actualiza registro que controla el valor del da. Termina el proceso de captura de datos del da. Datos listos para ser escritos en el DS1302. Indica proceso no terminado, para usarse en el siguiente proceso de captura.
0 --> balmac
Mayo, 2012
50 / 65
SI
lcdthor
NO
Lee_dator
dato = 'H' ?
lecmin
NO
9 4
NO
SI
Habilita la captura de datos de las horas. Para la captura del nmero ms significativo. Realiza el eco a la Hyper Terminal. 1 --> wrt_hrs
balmac =1?
SI
vf_int (H'23', H'00')
Verifica que el dato de las horas se encuentre en el intervalo vlido. Actualiza registro que controla el valor de las horas. Termina el proceso de captura de datos de las horas. Datos listos para ser escritos en el DS1302. Indica proceso no terminado, para usarse en el siguiente proceso de captura.
0 --> balmac
Mayo, 2012
51 / 65
SI
lcdtmin
NO
Lee_dator
dato = 'm' ?
lecdis
NO
10 4
NO
SI
Habilita la captura de datos de los minutos. Para la captura del nmero ms significativo. Realiza el eco a la Hyper Terminal. 1 --> wrt_min
balmac =1?
SI
vf_int (H'59', H'00')
Verifica que el dato de los minutos se encuentre en el intervalo vlido. Actualiza registro que controla el valor de los minutos. Termina el proceso de captura de datos de los minutos. Datos listos para ser escritos en el DS1302. Indica proceso no terminado, para usarse en el siguiente proceso de captura.
0 --> balmac
Mayo, 2012
52 / 65
SI
lcdtdis
NO
Lee_dator
dato = 'd' ?
NO
4 4
NO
SI
Habilita la captura de datos de los das de la semana. Para la captura del nmero ms significativo. Realiza el eco a la Hyper Terminal. 1 --> wrt_dis
balmac =1?
SI
vf_int (H'07', H'01')
Verifica que el dato de los das de la semana se encuentre en el intervalo vlido. Actualiza registro que controla el valor de los das de la semana. Termina el proceso de captura de datos de los das de la semana. Datos listos para ser escritos en el DS1302. Indica proceso no terminado, para usarse en el siguiente proceso de captura.
0 --> balmac
Mayo, 2012
53 / 65
Subrutina: inreg
Para llevar a cabo la inversin de los ocho bits de un registro fuente a un registro o destino se crea la subrutina de inversin de bits o de reversin: inreg. o o
Mayo, 2012
54 / 65
Subrutina: inreg
Funciones de inreg: Lleva a cabo el intercambio de los bits (auxilindose de un contador, otrcont): a
MSB a7 a6 a5 a4 a3 a2 a1 LSB a0 rgfuen: registro fuente
a0 MSB
a1
a2
a3
a4
a5
a6
a7 LSB
Rota a la izquierda el registro fuente, para identicar el bit ms signicativo, y a rota a la derecha el registro destino, para inyectar el bit en la posicin ms o a signicativa.
MSB C rgfuen LSB
MSB C rgdest
LSB
Mayo, 2012
55 / 65
Subrutina: inreg
inreg
Limpia contador.
Rota a la izquierda para capturar el bit ms significativo. Rota a la derecha para inyectarlo al bit ms significativo.
Decrementa el contador.
NO
otrcont<3> =1?
SI
Sale
Mayo, 2012
56 / 65
MACRO esc_ctr (control, registro) Establece el comando con la constante del argumento. Establece el dato con el contenido del registro del argumento. Escribe dato (DataDS) en un registro (seleccionado por ComanDS) en el DS1302.
wrtds
FIN MACRO
Mayo, 2012
58 / 65
1) Habilitar el DS1302. 2) Liberar el SSPBUF y limpiar bandera de fin de transferencia de datos. 3) Mandar la palabra de comando, una vez que se han invertidos sus bits, y esperar a que finalice la transferencia. 4) Liberar el SSPBUF y limpiar bandera de fin de transferencia de datos. 5) Mandar la palabra de dato, una vez que se han invertidos sus bits, y esperar a que finalice la transferencia. 6) Liberar el SSPBUF y deshabilitar el DS1302, terminando la subrutina.
Mayo, 2012
59 / 65
Subrutina: wrtds
Tiene como parmetros de entrada: ComanDS y DataDS. wrtds #DEFINE RSTDS13 PORTC, 1
1 --> RSTDS13
Habilita el DS1302.
SSPBUF --> W
Libera el SSPBUF.
0 --> SSPIF
inreg
Realiza la reversin.
NO
SSPIF =1?
Ya termin la transmisin ?
SI
11
Mauricio Lpez V. (Ingenier o a) Programacin UART - DS1302 . . . o Mayo, 2012 60 / 65
Subrutina: wrtds
11
SSPBUF --> W
Libera el SSPBUF.
0 --> SSPIF
inreg
Realiza la reversin.
NO
SSPIF =1?
Ya termin la transmisin ?
SI
SSPBUF --> W Libera el SSPBUF.
0 --> RSTDS13
Deshabilita el DS1302.
Sale
Mauricio Lpez V. (Ingenier o a) Programacin UART - DS1302 . . . o Mayo, 2012 61 / 65
1) Habilitar el DS1302. 2) Liberar el SSPBUF y limpiar bandera de fin de transferencia de datos. 3) Mandar la palabra de comando, una vez que se han invertidos sus bits, y esperar a que finalice la transferencia. 4) Liberar el SSPBUF y limpiar bandera de fin de transferencia de datos. 5) Inicia la transmisin escribiendo sobre SSPBUF y esperar a que finalice la transferencia. 6) Almacena el dato recibido, una vez que se han invertidos sus bits. 7) Deshabilitar el DS1302, terminando la subrutina.
Mayo, 2012
62 / 65
Subrutina: redtds
Tiene como parmetros de entrada: ComanDS y DataDS. redtds #DEFINE RSTDS13 PORTC, 1
1 --> RSTDS13
Habilita el DS1302.
SSPBUF --> W
Libera el SSPBUF.
0 --> SSPIF
inreg
Realiza la reversin.
NO
SSPIF =1?
Ya termin la transmisin ?
SI
SSPBUF --> W Libera el SSPBUF.
12
Mauricio Lpez V. (Ingenier o a) Programacin UART - DS1302 . . . o Mayo, 2012 63 / 65
Subrutina: redtds
12
W --> SSPBUF
Inicia la transmisin.
2 NOP's
NO
SSPIF =1?
Ya termin la transmisin ?
SI
SSPBUF --> rgfuen Captura el dato ledo.
inreg
Realiza la reversin.
0 --> RSTDS13
Deshabilita el DS1302.
Sale
Mauricio Lpez V. (Ingenier o a) Programacin UART - DS1302 . . . o Mayo, 2012 64 / 65
NO
prgmes
wds_mes =1?
NO
prgdia
wds_dia =1?
NO
prghora
wds_hrs =1?
NO
prgmin
15
SI
0 --> wds_ano
SI
0 --> wds_mes
SI
0 --> wds_dia
SI
0 --> wds_hrs
15
wds_min =1?
NO
prgdis
wds_dis =1?
SI
0 --> wds_dis
SI
0 --> wds_min
NO
inisec
Sale
Mayo, 2012
65 / 65