Vous êtes sur la page 1sur 65

Sistemas Digitales III

1
1
2
2
3
3

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: Programaci´on UART - DS1302 Diagrama de conexiones Caracter´ıstica de dise˜no Diagramas de flujo del programa: Primera aproximaci´on Diagramas de flujo del programa: Segunda aproximaci´on Diagramas de flujo del programa: Tercera aproximaci´on

Mauricio L´opez V. (Ingenier´ıa)

Microcontroladores PIC

Mayo, 2012

1 / 65

Modulo MSSP

Modulo SPI

Modulo MSSP en modo SPI

El modulo MSSP en modo SPI es un protocolo s´ıncrono que permite a un dispositivo maestro iniciar la comunicaci´on e intercambio de datos c on un dispositivo esclavo.Modulo MSSP Modulo SPI Modulo MSSP en modo SPI El SPI permite la transmisi´on y recepci´on

El SPI permite la transmisi´on y recepci´on s´ıncrona simult´ane amente de datos de 8 bits.e intercambio de datos c on un dispositivo esclavo. Se soportan los cuatro modos de SPI

Se soportan los cuatro modos de SPI (CKP y CKE).s´ıncrona simult´ane amente de datos de 8 bits. Para llevar a cabo la comunicaci´on se usan

Para llevar a cabo la comunicaci´on se usan t´ıpicamente tres pins:de 8 bits. Se soportan los cuatro modos de SPI (CKP y CKE). - Salida de

- Salida de datos serial (SDO).

- Entrada de datos serial (SDI).

- Reloj serial (SCK).

Adicionalmente se puede usar un cuarto pin cuando se opera en modo de esclavo:- Entrada de datos serial (SDI). - Reloj serial (SCK). - Seleccionador de Esclavo ( SS).

- Seleccionador de Esclavo ( SS).

Mauricio L´opez V. (Ingenier´ıa)

MSSP - SPI

Mayo, 2012

2 / 65

Modulo MSSP

Modulo SPI

Modulo MSSP en modo SPI

En el protocolo SPI, la se˜nal de reloj, SCK, es suministrada por el maestro que proporciona la sincronizaci´on y el control del inicio de la transmisi ´on del dato.Modulo MSSP Modulo SPI Modulo MSSP en modo SPI La velocidad de la transferencia de datos

La velocidad de la transferencia de datos depende de la velocidad d el reloj.y el control del inicio de la transmisi ´on del dato. El SPI es un protocolo

El SPI es un protocolo Maestro-Esclavo con las siguientes caracter´ıs ticas:transferencia de datos depende de la velocidad d el reloj. Solo el dispositivo maestro puede controlar

Solo el dispositivo maestro puede controlar la l´ınea de rel oj, SCK.Maestro-Esclavo con las siguientes caracter´ıs ticas: Los datos no se transfieren a no ser que el

Los datos no se transfieren a no ser que el reloj sea programado .maestro puede controlar la l´ınea de rel oj, SCK. Todos los esclavos son controlados por el

Todos los esclavos son controlados por el reloj, que est´a a s u vez controlado por el dispositivo maestro.no se transfieren a no ser que el reloj sea programado . El esclavo no puede

El esclavo no puede manipular el reloj.que est´a a s u vez controlado por el dispositivo maestro. Mauricio L´opez V. (Ingenier´ıa) MSSP

Mauricio L´opez V. (Ingenier´ıa)

MSSP - SPI

Mayo, 2012

3 / 65

Modulo MSSP

Modulo SPI

Modulo MSSP en modo SPI

Modulo MSSP Modulo SPI Modulo MSSP en modo SPI En la transferencia de datos, est´an involucrados

En la transferencia de datos, est´an involucrados el registro SSPBUF y el registro de corrimiento SSPSR.

el registro SSPBUF y el registro de corrimiento SSPSR. Mauricio L´opez V. (Ingenier´ıa) MSSP - SPI

Mauricio L´opez V. (Ingenier´ıa)

MSSP - SPI

Mayo, 2012

4 / 65

Modulo MSSP

Modulo SPI

Modulo MSSP en modo SPI

La transmisi´on inicia en el momento que el m´odulo maestro manda un a se˜nal deModulo MSSP Modulo SPI Modulo MSSP en modo SPI habilitaci´on al m´odulo esclavo y se lleva

habilitaci´on al m´odulo esclavo y se lleva a cabo al activar la terminal SS (Slave Selection). Una vez finalizada la transferencia se manda la se˜nal d e deshabilitaci´on para indicar que la comunicaci´on entre los dos dispos itivos ha terminado.

La transferencia la inicia el m´odulo maestro en el momento en que el dato a transmitir se carga en el registro SSPBUF, ´este a su vez se carga en e l registro de corrimiento SSPSR que inicia el intercambio de datos.la comunicaci´on entre los dos dispos itivos ha terminado. Por cada pulso de reloj el registro

Por cada pulso de reloj el registro SSPSR transfiere un bit a la term inal SDO. Este bit es recibido por el m´odulo esclavo por al terminal SDI y almac enado en su registro de corrimiento.de corrimiento SSPSR que inicia el intercambio de datos. De igual forma, por cada pulso de

De igual forma, por cada pulso de reloj, controlado por el maestro, el regist roal terminal SDI y almac enado en su registro de corrimiento. ´ SSPSR del m´odulo esclavo

´

SSPSR del m´odulo esclavo transfiere un bit a la terminal SDO. Este bit es recibido por el m´odulo maestro, por la terminal SDI, y almacenado en su registro de corrimiento SSPSR. De esta forma se cierra un bucle e n la que ambos transfieren datos al mismo tiempo.

Mauricio L´opez V. (Ingenier´ıa)

MSSP - SPI

Mayo, 2012

5 / 65

Modulo MSSP

Modulo SPI

Modulo MSSP en modo SPI

En modo SPI, la transmisi´on y recepci´on de datos es en los dos sentid os.Modulo MSSP Modulo SPI Modulo MSSP en modo SPI Se crea un ciclo de transmisi´on/recepci´on. Los

Se crea un ciclo de transmisi´on/recepci´on.y recepci´on de datos es en los dos sentid os. Los dos m´odulos transmiten y reciben

Los dos m´odulos transmiten y reciben datos.sentid os. Se crea un ciclo de transmisi´on/recepci´on. Cuando la transferencia ha finalizado en el m´odulo

Cuando la transferencia ha finalizado en el m´odulo maestro, tambi´en ha terminado de recibir un dato el m´odulo esclavo y viceversa.Los dos m´odulos transmiten y reciben datos. La transferencia no inicia si el m´odulo esclavo carga

La transferencia no inicia si el m´odulo esclavo carga un dato en su registro SSPBUF.de recibir un dato el m´odulo esclavo y viceversa. Cuando el m´odulo maestro realiza la transmisi´on

Cuando el m´odulo maestro realiza la transmisi´on de un dato, ´este se almacena en el registro SSPBUF y debe ser le´ıdo antes de transmitir el sigu iente dato.si el m´odulo esclavo carga un dato en su registro SSPBUF. Mauricio L´opez V. (Ingenier´ıa) MSSP

Mauricio L´opez V. (Ingenier´ıa)

MSSP - SPI

Mayo, 2012

6 / 65

Modulo MSSP

Modulo SPI

Modulo MSSP en modo SPI

Para inicializar el modulo MSSP en modo SPI deben especificarse var ias opciones, al programar de manera adecuada los bits de control en el registro SSPCON (SSPCON < 5:0 > ) y SSPSTAT (SSPSTAT < 7:6 > ). <5:0 >) y SSPSTAT (SSPSTAT <7:6 >).

Estos bits de control permiten especificar:< 5:0 > ) y SSPSTAT (SSPSTAT < 7:6 > ). - Modo Maestro (SCK es

- 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 final de tiempo de salida del dato).

- Transici´on del Reloj (salida del dato en la transici´on asc endente/descendente del SCK).

- Velocidad del Reloj (s´olo en modo Maestro).

- Modo de selecci´on de Esclavo (s´olo en modo Esclavo).

Mauricio L´opez V. (Ingenier´ıa)

MSSP - SPI

Mayo, 2012

7 / 65

Modulo MSSP

SSPSTAT - SPI

SSPSTAT: Registro de estado MMSP (Modo SPI)

SSPSTAT - SPI SSPSTAT: Registro de estado MMSP (Modo SPI) bit 7 : SMP ( Sample

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 final del tiempo de salida del da to. . Muestro del dato entrante al final del tiempo de salida del da to.

SMP = 0. Muestro del dato entrante a la mitad del tiempo de salida del dato. . Muestro del dato entrante a la mitad del tiempo de salida del dato.

SPI en modo Esclavo

SMP debe programarse en cero cuando SPI se usa en modo Esclavo .la mitad del tiempo de salida del dato. SPI en modo Esclavo bit 6 : CKE

bit 6 : CKE ( SPI Clock Select bit ). Bit selector del flanco en la que se realiza la sincronizaci´on.

CKE = 1. La transmisi´on ocurre en la transici´on del estado activo al inactivo del reloj. . La transmisi´on ocurre en la transici´on del estado activo al inactivo del reloj.

CKE = 0. La transmisi´on ocurre en la transici´on del estado inacti vo al activo del reloj. . La transmisi´on ocurre en la transici´on del estado inacti vo al activo del reloj.

Nota: La polaridad del estado del reloj se establece con el bit CKP (SSPCON <4>).

Mauricio L´opez V. (Ingenier´ıa)

MSSP - SPI

Mayo, 2012

8 / 65

Modulo MSSP

SSPSTAT - SPI

SSPSTAT: Registro de estado MMSP (Modo SPI)

SSPSTAT - SPI SSPSTAT: Registro de estado MMSP (Modo SPI) bit5:1 : D/ A, P, S,

bit5:1 : D/ A, P, S, R/ W y UA: Bits para uso en comunicaci´on modo I2C.

Se programan en cero.

bit 0 : BF (Buffer Full Status bit ). Bit de estado de buffer lleno (s´olo en modo de recepci´on).

BF = 1. Recepci´on completa, SSPBUF lleno. . Recepci´on completa, SSPBUF lleno.

BF = 0. Recepci´on incompleta, SSPBUF vac´ıo. . Recepci´on incompleta, SSPBUF vac´ıo.

Mauricio L´opez V. (Ingenier´ıa)

MSSP - SPI

Mayo, 2012

9 / 65

Modulo MSSP

SSPCON - SPI

SSPCON: Registro de control MMSP (Modo SPI)

SSPCON - SPI SSPCON: Registro de control MMSP (Modo SPI) bit 7 : WCOL ( Write

bit 7 : WCOL ( Write Collision Detect bit ). Bit que verifica si a ocurrido una colisi´on(s´olo en modo de transmisi´on).

WCOL = 1. Se escribe sobre el registro SSPBUF cuando a´un se encuentra transmitiendo la palabra previa . Se escribe sobre el registro SSPBUF cuando a´un se encuentra transmitiendo la palabra previa (Debe ser limpiada por software).

WCOL = 0. No hay una colisi´on. . No hay una colisi´on.

bit 6 : SSPOV ( Receiver Overflow Indicator bit ). Bit de sobrepasamiento.

SPI en modo esclavo

SSPOV = 1. Se recibe un nuevo dato mientras el registro SSPBUF a´un cons erva la palabra . Se recibe un nuevo dato mientras el registro SSPBUF a´un cons erva la palabra anterior (El dato en SSPSR se pierde). El usuario d ebe leer el SSPBUF, inclusive si s´olo transmite datos, para evitar que se gener e el sobrepasamiento (Debe ser limpiada por software).

SSPOV = 0. No hay una overflow. . No hay una overflow.

Mauricio L´opez V. (Ingenier´ıa)

MSSP - SPI

Mayo, 2012

10 / 65

Modulo MSSP

SSPCON - SPI

SSPCON: Registro de control MMSP (Modo SPI)

SSPCON - SPI SSPCON: Registro de control MMSP (Modo SPI) bit 5 : SSPEN ( Synchronous

bit 5 : SSPEN ( Synchronous Serial Port Enable bit ). Habilita el puerto serial sincrono.

SSPEN = 1. Habilita el puerto serial y configura los pin SCK, SDO, SDI, a nd SS . Habilita el puerto serial y configura los pin SCK, SDO, SDI, a nd SS como los pin del puerto serial.

SSPEN = 0. Deshabilita el puerto serial y configura ´estos pins como pi ns de entrada/salida. . Deshabilita el puerto serial y configura ´estos pins como pi ns de entrada/salida.

Nota: Cuando se habilita, los pins deben configurase 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. . El estado de inactividad para el reloj es el nivel alto.

CKP = 0. El estado de inactividad para el reloj es el nivel bajo. . El estado de inactividad para el reloj es el nivel bajo.

Mauricio L´opez V. (Ingenier´ıa)

MSSP - SPI

Mayo, 2012

11 / 65

Modulo MSSP

SSPCON - SPI

SSPCON: Registro de control MMSP (Modo SPI)

SSPCON - SPI SSPCON: Registro de control MMSP (Modo SPI) bit3:0 : SSPM3:SSPM0 ( Synchronous Serial

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 val or del oscilador.

SSPM3:SSPM0 = 0101 . Modo esclavo SPI, pin SCK = reloj. Deshabilitado el control del pin SS. 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. . Modo esclavo SPI, pin SCK = reloj. Habilitado el control del pin SS.

SSPM3:SSPM0 = 0011. Modo maestro, reloj = salida del TMR2/2. . Modo maestro, reloj = salida del TMR2/2.

SSPM3:SSPM0 = 0010. Modo maestro, reloj = FOSC/64. . Modo maestro, reloj = FOSC/64.

SSPM3:SSPM0 = 0001. Modo maestro, reloj = FOSC/16. . Modo maestro, reloj = FOSC/16.

SSPM3:SSPM0 = 0000. Modo maestro, reloj = FOSC/4. . Modo maestro, reloj = FOSC/4.

Mauricio L´opez V. (Ingenier´ıa)

MSSP - SPI

Mayo, 2012

12 / 65

Modulo MSSP

I/O en modo SPI

Habilitando I/O en modo SPI

Para habilitar el puerto serial, el bit habilitador del SSP, SSPEN (SSPCON < 5 > ), debe ponerse en uno. <5>), debe ponerse en uno.

Para reiniciar o reconfigurar el modo SPI, limpiar el bit SSPEN, inic ializar los bits del registro SSPCON y luego poner en uno el bit SSPEN.SSP, SSPEN (SSPCON < 5 > ), debe ponerse en uno. SSPEN = 1 configura los

SSPEN = 1 configura los pins SCK, SDO, SDI, and SS como los pins del puerto serial.bits del registro SSPCON y luego poner en uno el bit SSPEN. Para que los pins

Para que los pins funcionen de acuerdo a los requerimientos del puer to serial, algunos bits (en el registro TRISC) deben programarse de tal manera que s e tenga el flujo de direcci´on de los datos adecuado. Estos son:pins SCK, SDO, SDI, and SS como los pins del puerto serial. SDI es autom´aticamente controlado

SDI es autom´aticamente controlado por el modulo SPI.el flujo de direcci´on de los datos adecuado. Estos son: SDO que corresponde al bit TRISC

SDO que corresponde al bit TRISC < 5 > , debe ser limpiado. < 5> , debe ser limpiado.

SCK (en modo Maestro) que corresponde al bit TRISC < 3 > , debe ser limpiado. < 3> , debe ser limpiado.

SCK (en modo Esclavo) que corresponde al bit TRISC < 3 > , debe ser puesto en uno. < 3> , debe ser puesto en uno.

SS que corresponde al bit TRISC < 4 > , debe ser puesto en uno. < 4> , debe ser puesto en uno.

Mauricio L´opez V. (Ingenier´ıa)

MSSP - SPI

Mayo, 2012

13 / 65

Modulo MSSP

I/O en modo SPI

Diagrama a bloque del m´odulo MSSP en modo SPI

en modo SPI Diagrama a bloque del m´odulo MSSP en modo SPI Mauricio L´opez V. (Ingenier´ıa)

Mauricio L´opez V. (Ingenier´ıa)

MSSP - SPI

Mayo, 2012

14 / 65

Modulo MSSP

Diagrama de tiempos

Diagrama de tiempos en modo maestro (SPI)

de tiempos Diagrama de tiempos en modo maestro (SPI) Mauricio L´opez V. (Ingenier´ıa) MSSP - SPI

Mauricio L´opez V. (Ingenier´ıa)

MSSP - SPI

Mayo, 2012

15 / 65

Modulo MSSP

Diagrama de tiempos

Diagrama de tiempos en modo maestro (SPI)

de tiempos Diagrama de tiempos en modo maestro (SPI) Mauricio L´opez V. (Ingenier´ıa) MSSP - SPI

Mauricio L´opez V. (Ingenier´ıa)

MSSP - SPI

Mayo, 2012

16 / 65

El DS1302

Caracter´ısticas

Caracter´ısticas del DS1302

Reloj de tiempo real, proporciona informaci´on de: segundos, minutos, horas, d´ıa del mes, mes, d´ıa de la semana y a˜no (v´alido hasta 2100).El DS1302 Caracter´ısticas Caracter´ısticas del DS1302 RAM de 31 x 8 para almacenamiento de datos. Voltaje

RAM de 31 x 8 para almacenamiento de datos.mes, mes, d´ıa de la semana y a˜no (v´alido hasta 2100). Voltaje de operaci´on de 2

Voltaje de operaci´on de 2 a 5.5V.hasta 2100). RAM de 31 x 8 para almacenamiento de datos. Utiliza menos de 300 nA

Utiliza menos de 300 nA a 2V.almacenamiento de datos. Voltaje de operaci´on de 2 a 5.5V. Interfaz a 3 l´ıneas. Compatible a

Interfaz a 3 l´ıneas.de operaci´on de 2 a 5.5V. Utiliza menos de 300 nA a 2V. Compatible a niveles

Compatible a niveles TTL.5.5V. Utiliza menos de 300 nA a 2V. Interfaz a 3 l´ıneas. Dos pins para el

Dos pins para el suministro de energ´ıa: primaria y de respaldo.nA a 2V. Interfaz a 3 l´ıneas. Compatible a niveles TTL. Se puede usar una bater´ıa

Se puede usar una bater´ıa en el bit de suministro de energ´ıa de respaldo.para el suministro de energ´ıa: primaria y de respaldo. Mauricio L´opez V. (Ingenier´ıa) El DS1302 Mayo,

Mauricio L´opez V. (Ingenier´ıa)

El DS1302

Mayo, 2012

17 / 65

El DS1302

Caracter´ısticas

Descripci´on de los pin del DS1302

Caracter´ısticas Descripci´on de los pin del DS1302 PIN Descripci´on X1, X2 Pins para conectar el

PIN

Descripci´on

X1, X2

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.

GND

RST ´o CE I/O SCLK Vcc1, Vcc2

Circuito de conexi´on:

Mauricio L´opez V. (Ingenier´ıa)

RST ´o CE I/O SCLK Vcc1, Vcc2 Circuito de conexi´on: Mauricio L´opez V. (Ingenier´ıa) El DS1302

El DS1302

Mayo, 2012

18 / 65

El DS1302

Caracter´ısticas

Principales elementos a bloque del DS1302

Caracter´ısticas Principales elementos a bloque del DS1302 Registro de corrimiento, l´ogica de control, oscilador,

Registro de corrimiento, l´ogica de control, oscilador, reloj de tiemp o real y RAM.

l´ogica de control, oscilador, reloj de tiemp o real y RAM. Mauricio L´opez V. (Ingenier´ıa) El

Mauricio L´opez V. (Ingenier´ıa)

El DS1302

Mayo, 2012

19 / 65

El DS1302

El DS1302

Caracter´ısticas

El DS1302 contiene un reloj/calendario de tiempo real y 31 bytes de RAM.El DS1302 El DS1302 Caracter´ısticas El ultimo´ d´ıa de la fecha del mes se ajusta autom´aticamente

El ultimo´un reloj/calendario de tiempo real y 31 bytes de RAM. d´ıa de la fecha del mes

d´ıa de la fecha del mes se ajusta autom´aticamente para aquellos meses

que tienen menos de 31 d´ıas, incluye correcci´on de a˜no bisiesto.

La operaci´on del reloj permite ambos formatos: 24 horas o 12 horas con indicador de AM/PM.menos de 31 d´ıas, incluye correcci´on de a˜no bisiesto. La interface del DS1302 con un microcontrolador

La interface del DS1302 con un microcontrolador se simplifica usando una comunicaci´on serial s´ıncrona.ambos formatos: 24 horas o 12 horas con indicador de AM/PM. S´olo se requieren tres l´ıneas

S´olo se requieren tres l´ıneas para comunicarse con el Reloj/RAM:se simplifica usando una comunicaci´on serial s´ıncrona. RST o´ CE (Reset). I/O (L´ınea de datos). SCLK

RST o´ CE (Reset).requieren tres l´ıneas para comunicarse con el Reloj/RAM: I/O (L´ınea de datos). SCLK (Reloj serial). Mauricio

I/O (L´ınea de datos).para comunicarse con el Reloj/RAM: RST o´ CE (Reset). SCLK (Reloj serial). Mauricio L´opez V. (Ingenier´ıa)

SCLK (Reloj serial).el Reloj/RAM: RST o´ CE (Reset). I/O (L´ınea de datos). Mauricio L´opez V. (Ingenier´ıa) El DS1302

Mauricio L´opez V. (Ingenier´ıa)

El DS1302

Mayo, 2012

20 / 65

Byte de comando

El DS1302

Byte de comando

Byte de comando El DS1302 Byte de comando Un byte de comando inicia cada transferencia de

Un byte de comando inicia cada transferencia de datos.Byte de comando El DS1302 Byte de comando El MSB (bit 7) debe ser un uno

El MSB (bit 7) debe ser un uno l´ogico. Si ´este es cero y es escrito e n el DS1302 lo deshabilitar´a.Un byte de comando inicia cada transferencia de datos. El bit 6 especifica el dato reloj/calendario,

El bit 6 especifica el dato reloj/calendario, para un cero l´ogico, o dato RAM, para un uno l´ogico.es cero y es escrito e n el DS1302 lo deshabilitar´a. Los bits de 1 al

Los bits de 1 al 5 especifican el registro en particular a ser le´ıdo o e scrito.para un cero l´ogico, o dato RAM, para un uno l´ogico. El LSB (bit 0) especifica

El LSB (bit 0) especifica una operaci´on de escritura (entrada) si ti ene valor cero l´ogico o de lectura (salida) si tiene valor uno l´ogico.el registro en particular a ser le´ıdo o e scrito. Mauricio L´opez V. (Ingenier´ıa) El DS1302

Mauricio L´opez V. (Ingenier´ıa)

El DS1302

Mayo, 2012

21 / 65

Control de reloj

El DS1302

Control y transferencia

Un ciclo de reloj es una secuencia de un frente ascendente segui do de un frente descendente.Control de reloj El DS1302 Control y transferencia Para datos de entrada, los datos deben ser

Para datos de entrada, los datos deben ser v´alidos durante el frente ascen dente del reloj y para la salida de los bits del dato en el frente descende nte del reloj.de un frente ascendente segui do de un frente descendente. Si la entrada del bit RST

Si la entrada del bit RST ´o CE es bajo, toda la transferencia de datos se termina y el pin de I/O va a un estado de alta impedancia.de los bits del dato en el frente descende nte del reloj. En el proceso de

En el proceso de encendido, el bit RST ´o CE debe encontrarse en cero l´ogico hasta que VCC > 2V. Tambi´en, SCLK debe estar en cero l´ogico cuando el bit > 2V. Tambi´en, SCLK debe estar en cero l´ogico cuando el bit

RST ´o CE cambia a una estado uno l´ogico.

Mauricio L´opez V. (Ingenier´ıa)

El DS1302

Mayo, 2012

22 / 65

Transferencia de datos

El DS1302

Control y transferencia

Transferencia de datos El DS1302 Control y transferencia Mauricio L´opez V. (Ingenier´ıa) El DS1302 Mayo, 2012

Mauricio L´opez V. (Ingenier´ıa)

El DS1302

Mayo, 2012

23 / 65

Entrada y Salida de datos

Entrada de datos

El DS1302

Control y transferencia

Despu´es de los ocho ciclos de SCLK que introducen un byte de coman do de escritura, un byte de datos se introduce en los frentes ascendente s de los ocho siguientes ciclos de SCLK.de datos Entrada de datos El DS1302 Control y transferencia Los datos son introducidos comenzando con

Los datos son introducidos comenzando con el bit 0.frentes ascendente s de los ocho siguientes ciclos de SCLK. Salida de datos Despu´es de los

Salida de datos

Despu´es de los ocho ciclos SCLK que introducen un byte de comando de lectura, un byte de datos sale en los frentes descendentes de los ocho siguientes ciclos de SCLK.son introducidos comenzando con el bit 0. Salida de datos El primer bit del dato a

El primer bit del dato a ser transmitido ocurre en el primer frente descendentefrentes descendentes de los ocho siguientes ciclos de SCLK. despu´es de que el ultimo´ bit del

despu´es de que el ultimo´

bit del byte de comando es escrito.

El pin I/O va a un estado de alta impedancia en cada frente ascendente de SCLK.de que el ultimo´ bit del byte de comando es escrito. Los datos salen comenzando con

Los datos salen comenzando con el bit 0.estado de alta impedancia en cada frente ascendente de SCLK. Mauricio L´opez V. (Ingenier´ıa) El DS1302

Mauricio L´opez V. (Ingenier´ıa)

El DS1302

Mayo, 2012

24 / 65

Entrada y Salida de datos

El DS1302

Control y transferencia

La informaci´on de la hora y del calendario se obtiene al leer los bytes d e losEntrada y Salida de datos El DS1302 Control y transferencia se hayan confi gurado (al registro

se hayan confi gurado (al

registro correspondientes, un vez que ´estos ultimos´ escribir en ello) con los datos iniciales deseados.

Los contenido de los registros de la hora y del calendario se encuentran en formato decimal codificado en binario (BCD).escribir en ello) con los datos iniciales deseados. El registro del d´ıa de la semana se

El registro del d´ıa de la semana se incrementa a medianoche.encuentran en formato decimal codificado en binario (BCD). Los valores que corresponden al d´ıa de la

Los valores que corresponden al d´ıa de la semana son definidos por el usuar io, pero deben ser consecutivos (es decir, si 1 corresponde al domingo, entonces 2 corresponde al lunes, etc.).registro del d´ıa de la semana se incrementa a medianoche. Los datos de la hora y

Los datos de la hora y de la fecha con informaci´on il´ogica causan una operaci ´on indeterminada.al domingo, entonces 2 corresponde al lunes, etc.). Mauricio L´opez V. (Ingenier´ıa) El DS1302 Mayo, 2012

Mauricio L´opez V. (Ingenier´ıa)

El DS1302

Mayo, 2012

25 / 65

El DS1302

Resumen de registros

Registros de Direcci´on/Definici´on

Resumen de registros Registros de Direcci´on/Definici´on Mauricio L´opez V. (Ingenier´ıa) El DS1302 Mayo, 2012 26

Mauricio L´opez V. (Ingenier´ıa)

El DS1302

Mayo, 2012

26 / 65

PIC modo SPI - DS1302

El DS1302

PIC modo SPI - DS1302

El microcontrolador al usar el protocolo SPI transfiere su informaci´on in iciando con el MSB (bit7), mientras que el dispositivo reloj DS1302 comienza c on el LSB (bit0) El PIC deben invertirse los bits antes y despu´es de inter actuar con elPIC modo SPI - DS1302 El DS1302 PIC modo SPI - DS1302 DS1302. Para el dispositivo

DS1302.

Para el dispositivo DS1302 el estado de inactividad del reloj SCLK es e l nivel bajo, por lo que el PIC debe programarse con CKP = 0.los bits antes y despu´es de inter actuar con el DS1302. Como el ciclo de reloj

Como el ciclo de reloj SCLK en el dispositivo DS1302 es una secuenci a de un frente ascendente seguido de un frente descendente, el PIC deb e programarse con CKE = 1 para que la transmisi´on ocurra en un frente descendent e.nivel bajo, por lo que el PIC debe programarse con CKP = 0. Se desea muestrea

Se desea muestrea el dato de entrada a la mitad del tiempo de salida del dato, por lo que el PIC debe programarse con SMP = 0.para que la transmisi´on ocurra en un frente descendent e. El PIC se programa en modo

El PIC se programa en modo maestro con reloj de Focs/64, es decir, con SSPM3:SSPM0 = 0010.del dato, por lo que el PIC debe programarse con SMP = 0. Mauricio L´opez V.

Mauricio L´opez V. (Ingenier´ıa)

El DS1302

Mayo, 2012

27 / 65

Trabajo a desarrollar: Programaci´on UART - DS1302

Diagrama de conexiones

Diagrama de conexiones UART - DS1302

+ 5 V 10 K 100 1 40 MCLR RB7 2 39 RA0 RB6 LCD_RS
+ 5 V
10 K
100
1
40
MCLR
RB7
2
39
RA0
RB6
LCD_RS
3
38
RA1
RB5
LCD_RW
4
37
RA2
RB4
LCD_E
5
36
RA3
RB3
6
35
RA4
RB2
7
34
RA5
RB1
8
33
RE0
RB0
9
32
RE1
Vdd
+ 5 V
+ 5 V
10
31
RE2
Vss
20 K
11
30
+ 5 V
Vdd
RD7
+ 5 V
12
29
Vss
RD6
22
pf
13
28
1
16
OSC1
RD5
4 MHz
14
27
Vss Vdd Vee RS R/W E
D0 D1 D2 D3 D4 D5 D6 D7
NC NC
OSC2
RD4
22
pf
15
26
RC0
RX
16
25
+ 5 V
+ 5 V
RC1
TX
A
RSTDS13
1
5
17
24
Vcc2
Vcc1
RC2
SDO
2
6
23
X1
SCLK
18 SCK
SDI
Reloj Latch
3
7
19
22
X2
I/O
RD0
RD3
20
21
+ 5 V
4
8
RD1
RD2
GND
RST
+
PIC 16F877A
- Conector DB9
1
16
C1+
Vcc
hembra
+
2
15
V+
GND
-
+10V
1
3
14
C1-
T1OUT
6
1 K
2
4
13
C2+
R1IN
7
+
3
5
12
8
- R1OUT
C2-
4
-10V
9
6
11
V-
T1IN
5
7
10
T2OUT
T2IN
Conectar al
8
9
R2IN
R2OUT
computador
MAX232
Mauricio L´opez V. (Ingenier´ıa)
Programaci´on UART - DS1302
Mayo, 2012
28 / 65
+
-
+
-

Trabajo a desarrollar: Programaci´on UART - DS1302

Caracter´ıstica de dise˜no

Criterios de programaci´on del reloj DS1302

Se desea utilizar un microcontrolador PIC16F877 para programar un dispositi vo, reloj DS1302, mediante el protocolo SPI.de dise˜no Criterios de programaci´on del reloj DS1302 El reloj debe iniciar con la fecha y

El reloj debe iniciar con la fecha y la hora: primero de Enero de 2000 a l as cero horas, cero minutos y cero segundos, que deben ser desplegados en un di splay LCD.un dispositi vo, reloj DS1302, mediante el protocolo SPI. El usuario podr´a actualizar la fecha y

El usuario podr´a actualizar la fecha y la hora con ayuda del teclado d e una computadora.cero segundos, que deben ser desplegados en un di splay LCD. El usuario podr´a reprogramar, en

El usuario podr´a reprogramar, en un proceso de modificaci´on, uno o varios de los par´ametros de fecha y hora.fecha y la hora con ayuda del teclado d e una computadora. Mauricio L´opez V. (Ingenier´ıa)

Mauricio L´opez V. (Ingenier´ıa)

Programaci´on UART - DS1302

Mayo, 2012

29 / 65

Trabajo a desarrollar: Programaci´on UART - DS1302

Caracter´ıstica de dise˜no

Criterios de teclas para la programaci´on del reloj DS1302

’P’ - Inicia un proceso de programaci´on del reloj DS1302.Criterios de teclas para la programaci´on del reloj DS1302 ’F’ - Finaliza un proceso de programaci´on

’F’ - Finaliza un proceso de programaci´on del reloj DS1302.- Inicia un proceso de programaci´on del reloj DS1302. ’ESC’ - Aborta toda la programaci´on del

’ESC’ - Aborta toda la programaci´on del reloj DS1302.- Finaliza un proceso de programaci´on del reloj DS1302. ’A’ - Inicia programando del a˜no. ’M’

’A’ - Inicia programando del a˜no.’ESC’ - Aborta toda la programaci´on del reloj DS1302. ’M’ - Inicia programando del mes (Enero,

’M’ - Inicia programando del mes (Enero, Febrero, etc.).del reloj DS1302. ’A’ - Inicia programando del a˜no. ’D’ - Inicia programando del d´ıa (1,

’D’ - Inicia programando del d´ıa (1, 2, 3, etc.).’M’ - Inicia programando del mes (Enero, Febrero, etc.). ’H’ - Inicia programando de las horas

’H’ - Inicia programando de las horas (23 hrs.).’D’ - Inicia programando del d´ıa (1, 2, 3, etc.). ’m’ - Inicia programando de los

’m’ - Inicia programando de los minutos (59 min.).etc.). ’H’ - Inicia programando de las horas (23 hrs.). ’d’ - Inicia programando del d´ıa

’d’ - Inicia programando del d´ıa de la semana (Lunes, Martes, etc.) .’m’ - Inicia programando de los minutos (59 min.). Mauricio L´opez V. (Ingenier´ıa) Programaci´on UART -

Mauricio L´opez V. (Ingenier´ıa)

Programaci´on UART - DS1302

Mayo, 2012

30 / 65

Trabajo a desarrollar: Programaci´on UART - DS1302

Caracter´ıstica de dise˜no

Criterios de banderas en el control del flujo del programa

Para llevar a cabo el control del flujo del programa en la programaci´on del re loj DS1302, de acuerdo al dato proporcionado por el usuario, dato , se requiere establecer un conjunto de banderas. dato , se requiere establecer un conjunto de banderas.

En general se identifican dos grupos de banderas:dato , se requiere establecer un conjunto de banderas. - Las que controlan el proceso de

- Las que controlan el proceso de captura de los datos, registr o Rprogm .

- Las que controlan el proceso de escritura en el DS1302, regis tro Yaprogm .

Mauricio L´opez V. (Ingenier´ıa)

Programaci´on UART - DS1302

Mayo, 2012

31 / 65

Trabajo a desarrollar: Programaci´on UART - DS1302

Caracter´ıstica de dise˜no

Criterios de banderas en el control del flujo del programa

Banderas del registro Rprogm (captura de los datos): Rprogm (captura de los datos):

- proc ac (bit Rprogm, 7 ): Proceso activo (dato = ’P’

=

proc ac = 1).

- wrt ano (bit Rprogm, 5 ): Captura del a˜no (dato = ’A’ =

- wrt mes (bit Rprogm, 4 ): Captura del mes (dato = ’M’

=

wrt ano = 1).

wrt mes = 1).

- (bit Rprogm, 3 ): Captura del d´ıa (dato = ’D’

wrt dia

=

wrt dia = 1).

- (bit Rprogm, 2 ): Captura de las horas (dato = ’H’

wrt hrs

=

wrt hrs = 1).

- wrt min (bit Rprogm, 1 ): Captura de minutos (dato = ’m’

=

wrt min = 1).

- wrt dis (bit Rprogm, 0 ): Captura d´ıa de semana (dato = ’d’ =wrt dis = 1).

- bit MSB (bit Rprogm, 6 ): Captura del n´umero (bit MSB = 1 para nibble m´as significativo, bit MSB = 0 para nibble menos significativo).

Mauricio L´opez V. (Ingenier´ıa)

Programaci´on UART - DS1302

Mayo, 2012

32 / 65

Trabajo a desarrollar: Programaci´on UART - DS1302

Caracter´ıstica de dise˜no

Criterios de banderas en el control del flujo del programa

Criterios de banderas en el control del flujo del programa Banderas del registro Yaprogm (escritura en

Banderas del registro Yaprogm (escritura en el DS1302):

- wds ano (bit Yaprogm, 5 ): Escritura del a˜no

(dato = ’A’ y dato = ’F’

=

wds ano = 1).

- wds mes (bit Yaprogm, 4 ): Escritura del mes

(dato = ’M’ y dato = ’F’

=

wds mes = 1).

- wds dia (bit Yaprogm, 3 ): Escritura del d´ıa

(dato = ’D’ y dato = ’F’

=

wds dia = 1).

- wds hrs (bit Yaprogm, 2 ): Escritura de las horas

(dato = ’H’ y dato = ’F’

=

wds hrs = 1).

- wds min (bit Yaprogm, 1 ): Escritura de los minutos

(dato = ’m’ y dato = ’F’

=

wds min = 1).

- wds dis (bit Yaprogm, 0 ): Escritura de los d´ıas de la semana

(dato = ’d’ y dato = ’F’

=

wds dis = 1).

- balmac (bit Yaprogm, 7 ): Captura del n´umero (balmac = 0 no se ha terminado de capturar los dos nibbles del n´umero, balmac = 1 almacena los dos nibbles del n´umero en el registro correspondiente).

Mauricio L´opez V. (Ingenier´ıa)

Programaci´on UART - DS1302

Mayo, 2012

33 / 65

Trabajo a desarrollar: Programaci´on UART - DS1302

Diagramas de flujo del programa: Primera aproximaci´on

Diagramas de flujo de la interrupci´on

dato = ESC ? NO proc_ac SI dato NO wrt_ano SI --> wrt_ano Lee_dato 1
dato
= ESC ?
NO
proc_ac
SI
dato
NO
wrt_ano
SI
--> wrt_ano
Lee_dato
1 0 Sale
= 1 ?
= 'F' ?
= 1 ?
--> wds_ano
procact
lecano
lcdtano
SI
NO
SI
NO
prgano
00h --> Rprogm
3
NO
dato
dato
NO
wrt_mes
SI
0 --> wrt_mes
Lee_dato
= 'P' ?
= 'A' ?
= 1 ?
1 --> wds_mes
lecmes
lcdtmes
00h --> Yaprogm
SI
SI
NO
Sale
1 --> proc_ac
1 --> wrt_ano
Sale
dato
NO
wrt_dia
SI
= 'M' ?
= 1 ?
lecdia
lcdtdia
Sale
SI
NO
Sale
Lee_dato
1 --> wrt_mes
2
0
--> wrt_dia
1
--> wds_dia
Sale
Sale
Mauricio L´opez V. (Ingenier´ıa)
Programaci´on UART - DS1302
Mayo, 2012
34 / 65

Trabajo a desarrollar: Programaci´on UART - DS1302

Diagramas de flujo del programa: Primera aproximaci´on

Diagrama de conexiones UART - DS1302

2 dato = 'D' ? NO wrt_hrs SI --> wrt_hrs Lee_dato 1 0 Sale =
2
dato
= 'D' ?
NO
wrt_hrs
SI
--> wrt_hrs
Lee_dato
1 0 Sale
=
1 ?
--> wds_hrs
lechora
lcdthor
SI
NO
1 --> wrt_dia
dato
NO
wrt_min
SI
--> wrt_min
Lee_dato
1 0 Sale
=
'H' ?
=
1 ?
--> wds_min
lecmin
lcdtmin
Sale
SI
NO
1 --> wrt_hrs
dato
NO
wrt_dis
SI
--> wrt_dis
Lee_dato
1 0 Sale
=
'm' ?
=
1 ?
--> wds_dis
lecdis
lcdtdis
Sale
SI
NO
1 --> wrt_min
dato
NO
Sale
=
'd' ?
Sale
SI
1 --> wrt_dis
Sale
Mauricio L´opez V. (Ingenier´ıa)
Programaci´on UART - DS1302
Mayo, 2012
35 / 65

Trabajo a desarrollar: Programaci´on UART - DS1302

Diagramas de flujo del programa: Primera aproximaci´on

Diagrama de conexiones UART - DS1302

3 prgano wds_ano = 1 ? NO wds_mes = 1 ? NO wds_dia = 1
3
prgano
wds_ano
= 1 ?
NO
wds_mes
= 1 ?
NO
wds_dia
= 1 ?
NO
prgmes
prgdia
prghora
SI
SI
SI

0 --> wds_ano

0 --> wds_mes

0 --> wds_dia

wds_hrs = 1 ? NO prgmin SI
wds_hrs
= 1 ?
NO
prgmin
SI

0 --> wds_hrs

wds_dia wds_hrs = 1 ? NO prgmin SI 0 --> wds_hrs Esc_dato Esc_dato Esc_dato Esc_dato wds_min

Esc_dato

Esc_dato

Esc_dato

Esc_dato

wds_min = 1 ? NO wds_dis = 1 ? SI prgdis SI NO inisec 0
wds_min
= 1 ?
NO
wds_dis
= 1 ?
SI
prgdis
SI
NO
inisec
0 --> wds_min
Esc_dato

00h --> Rprogm

0 --> wds_dis

Esc_dato

Mauricio L´opez V. (Ingenier´ıa)

Programaci´on UART - DS1302

Esc_dato Mauricio L´opez V. (Ingenier´ıa) Programaci´on UART - DS1302 00h --> Yaprogm Sale Mayo, 2012 36

00h --> Yaprogm

Sale Mayo, 2012 36 / 65
Sale
Mayo, 2012
36 / 65

Trabajo a desarrollar: Programaci´on UART - DS1302

Diagramas de flujo del programa: Segunda aproximaci´on

Diagramas de flujo de la subrutina: tr dato

Para llevar a cabo el eco a la Hyper Terminal se crea una subrutina: tr dato.

NO

tr_dato
tr_dato
 

0

-->

TXIF

Limpia la bandera de transmisión.

0 --> TXIF Limpia la bandera de transmisión. dato --> TXREG Transmite el dato a la

dato --> TXREG

Transmite el dato a la PC.

 
 
TXIF = 1 ?
TXIF = 1 ?

SI

Ya terminó la transmisión ?

Sale
Sale

Mauricio L´opez V. (Ingenier´ıa)

Programaci´on UART - DS1302

Mayo, 2012

37 / 65

Trabajo a desarrollar: Programaci´on UART - DS1302

Diagramas de flujo del programa: Segunda aproximaci´on

Diagramas de flujo de la interrupci´on

Se involucran las banderas de la captura del n´umero:aproximaci´on Diagramas de flujo de la interrupci´on bit MSB : Para almacenar los dos nibbles del

bit MSB : Para almacenar los dos nibbles del n´umero en el registro

correspondiente,

los dos nibbles del n´umero en el registro correspondiente, balmac : Para seleccionar el nibble m´as

balmac : Para seleccionar el nibble m´as o menos significativo del n´umero.

Se definen los registros que controlan los datos de fecha y hora:el nibble m´as o menos significativo del n´umero. - rano : Almacena el dato del a˜no.

- rano : Almacena el dato del a˜no.

- rmes : Almacena el dato del mes.

- rdia : Almacena el dato del d´ıa.

- rhora : Almacena el dato de las horas.

- rminut : Almacena el dato de los minutos.

- rdiasem : Almacena el dato de los d´ıas de la semena.

Mauricio L´opez V. (Ingenier´ıa)

Programaci´on UART - DS1302

Mayo, 2012

38 / 65

Trabajo a desarrollar: Programaci´on UART - DS1302

Subrutina: Lee dator

Diagramas de flujo del programa: Segunda aproximaci´on

Para llevar a cabo la lectura de los n´umeros se crea una subrutina d e lectura:

Lee dator.

Par´ametros de Lee dator :

Tiene como entradas:d e lectura: Lee dator . Par´ametros de Lee dator : - dato : Asociada a

- dato : Asociada a la tecla presionada.

- bit MSB : Permite diferenciar entre la entrada del nibble m´as signi ficativo y menos

significativo del n´umero a capturar.

Tiene como salidas:ficativo y menos significativo del n´umero a capturar. - rgdato : Registro donde almacena los dos

- rgdato : Registro donde almacena los dos nibbles del n´umero a captu rar.

- balmac : Bandera para diferenciar entre un proceso no terminado de la captura de los n´umeros y otra ya terminada para permitir almacenar el r egistro rgdato en el registro correspondiente ( rano , rmes , etc.).

Mauricio L´opez V. (Ingenier´ıa)

Programaci´on UART - DS1302

Mayo, 2012

39 / 65

Trabajo a desarrollar: Programaci´on UART - DS1302

Subrutina: Lee dator

Funciones de Lee dator :

Diagramas de flujo del programa: Segunda aproximaci´on

Verifica que el dato capturado corresponda a la tecla de un n´umero.: Diagramas de flujo del programa: Segunda aproximaci´on Si el dato corresponde a un n´umero lleva

Si el dato corresponde a un n´umero lleva a cabo el eco a la Hyper Ter minal.que el dato capturado corresponda a la tecla de un n´umero. Si la lectura es del

Si la lectura es del primer n´umero (el m´as significativo, bit MSB = 1 ), almacena ´este en el nibble m´as significativo del registro rgdato bit MSB = 1 ), almacena ´este en el nibble m´as significativo del registro rgdato , y limpia las banderas bit MSB y balmac .

Si la lectura es del segundo n´umero (el menos significativo, bit MSB = 0 ), incorpora ´este al nibble menos significativo del registro rgdato y bit MSB = 0 ), incorpora ´este al nibble menos significativo del registro rgdato y prende la bandera balmac (permite transferir el registro rgdato al registro correspondiente, debido a que se termin´o la captura de los n´umeros).

Mauricio L´opez V. (Ingenier´ıa)

Programaci´on UART - DS1302

Mayo, 2012

40 / 65

Trabajo a desarrollar: Programaci´on UART - DS1302

Diagramas de flujo del programa: Segunda aproximaci´on

Diagramas de flujo de la subrutina: Lee dator

Filtra la parte alta del código ASCII del dato leído.

Lee_dator
Lee_dator

dato .AND. F0h --> W

W .XOR. 30h --> W El dato corresponde al código de un número ? NO
W .XOR. 30h --> W
El dato corresponde al
código de un número ?
NO
Z = 1 ?
Sale
SI
Realiza el eco a la Hyper Terminal.
tr_dato
7

Mauricio L´opez V. (Ingenier´ıa)

Programaci´on UART - DS1302

Mayo, 2012

41 / 65

Trabajo a desarrollar: Programaci´on UART - DS1302

Diagramas de flujo del programa: Segunda aproximaci´on

Diagramas de flujo de la subrutina: Lee dator

7
7
 
  bit_MSB = 1 ? SI NO bitlsb  
bit_MSB = 1 ? SI NO bitlsb
bit_MSB = 1 ? SI NO bitlsb
bit_MSB = 1 ?
bit_MSB
= 1 ?

SI

NO

bitlsb

 

Corresponde a la lectura del número más significativo ?

Corresponde a la lectura del número más significativo ?   1 --> balmac Inicializa el registro
 
  1 --> balmac

1 --> balmac

Inicializa el registro 'rgdato'.

00h --> rgdato

Inicializa el registro 'rgdato'. 00h --> rgdato
 
  dato .AND. 0Fh --> W

dato .AND. 0Fh --> W

Filtra la parte baja del código ASCII del dato leído. El número deseado.

dato .AND. 0Fh --> dato

Filtra la parte baja del código ASCII del dato leído. El número deseado. dato .AND. 0Fh
 
  rgdato .OR. W --> rgdato

rgdato .OR. W --> rgdato

Incorpora en el nibble alto del registro 'rgdato' el número leído.

SWAP(dato) --> rgdato

Sale
Sale
 
 

Indica proceso no terminado.

0

--> balmac

 
 
 

Indicar proceso no terminado.

0

--> bit_MSB

 
Sale
Sale

Para que posteriormente el contenido de 'rgdato'

se transmita al registro correspondiente.

Filtra la parte baja del código ASCII del dato leído.

Incorpora en el nibble bajo del registro 'rgdato' el número leído.

Mauricio L´opez V. (Ingenier´ıa)

Programaci´on UART - DS1302

Mayo, 2012

42 / 65

Trabajo a desarrollar: Programaci´on UART - DS1302

MACRO vf int

Diagramas de flujo del programa: Segunda aproximaci´on

Para verificar que cada par´ametro de la fecha (a˜no, mes, d´ıa del me y d´ıa de la semana) y de la hora (las horas y los minutos) introducidos por el usuario s e encuentren en los intervalo v´alidos, y en su caso ajustar ´estos, se crea una MACRO llamada vf int , la cual se ayuda de la subrutina sb vf it . vf int , la cual se ayuda de la subrutina sb vf it .

Intervalo de cada par´ametro de la fecha y la hora:vf int , la cual se ayuda de la subrutina sb vf it . - -

-

-

- D´ıa del mes: Del 01 a 31 .

- D´ıa de la semana: Del 01 a 07 .

- Las horas: Del 00 a 23 .

- Los minutos: Del 00 a 59 .

A˜no: Del 00 Mes: Del 01

a a 12 .

99 .

Note que el intervalo v´alido del mes, d´ıa del mes y d´ıa de la sem ana se inicia con el valor 01 , mientras que el resto de los par´ametros con 00 . 01 , mientras que el resto de los par´ametros con 00 .

Mauricio L´opez V. (Ingenier´ıa)

Programaci´on UART - DS1302

Mayo, 2012

43 / 65

Trabajo a desarrollar: Programaci´on UART - DS1302

MACRO vf int

Diagramas de flujo del programa: Segunda aproximaci´on

Definici´on de la MACRO:int Diagramas de flujo del programa: Segunda aproximaci´on - vf int MACRO interna, rbit Ejemplo de

-

vf int MACRO interna, rbit

Ejemplo de la forma de uso de la MACRO:Definici´on de la MACRO: - vf int MACRO interna, rbit - vf int H’12’, H’01’ Par´ametros

- vf int H’12’, H’01’

Par´ametros de la macro: vf int vf int

Tiene como entrada, adem´as de sus argumentos:int H’12’, H’01’ Par´ametros de la macro: vf int - rgdato : Registro donde se almacen´o

- rgdato : Registro donde se almacen´o los dos nibbles del n´umero cap turado.

Tiene como salida (si se llevo a cabo un ajuste):donde se almacen´o los dos nibbles del n´umero cap turado. - rgdato : Registro donde se

- rgdato : Registro donde se almacenan los dos nibbles del nuevo n´ume ro ajustado.

Mauricio L´opez V. (Ingenier´ıa)

Programaci´on UART - DS1302

Mayo, 2012

44 / 65

Trabajo a desarrollar: Programaci´on UART - DS1302

MACRO vf int

Funciones de la macro vf int :

Diagramas de flujo del programa: Segunda aproximaci´on

En los casos pertinentes (mes, d´ıa del me y d´ıa de la semana) se ver ifica que el dato capturado tenga como valor m´ınimo el 01 . Ajustando a 01 en caso contrario. 01 . Ajustando a 01 en caso contrario.

Verificar que cada par´ametro introducido por el usuario no sobrepase el valor superior v´alido y en su caso ajustarlo a ese m´aximo.m´ınimo el 01 . Ajustando a 01 en caso contrario. MACRO vf_int (interva, rbit) interva -->

MACRO vf_int (interva, rbit) interva --> int_sup rbit --> bit_ban sb_vf_it FIN MACRO
MACRO
vf_int (interva, rbit)
interva --> int_sup
rbit --> bit_ban
sb_vf_it
FIN MACRO

Establece el intervalo superior.

Establece la bandera indicadora si se debe verificar que 01 es el intervalo inferior.

Verifica que cada parámetro cumpla con el intervalo válido.

Mauricio L´opez V. (Ingenier´ıa)

Programaci´on UART - DS1302

Mayo, 2012

45 / 65

Trabajo a desarrollar: Programaci´on UART - DS1302

Subrutina: sb vf it

Diagramas de flujo del programa: Segunda aproximaci´on

Se requiere verificar que rgdato > 0 ?

Es rgdato = 0 ?

Actualiza con el valor mínimo (01h).

sb_vf_it bit_ban<0> = 1 ? NO SI NO rgdato = 0 ? SI NO Sale
sb_vf_it
bit_ban<0>
= 1 ?
NO
SI
NO
rgdato = 0 ?
SI
NO
Sale
rgdato >
int_sup ?
01h --> rgdato
SI
Sale
int_sup --> rgdato
Sale

Es rgdato mayor al valor del intervalo superior ?

Actualiza con el valor máximo.

Mauricio L´opez V. (Ingenier´ıa)

Programaci´on UART - DS1302

Mayo, 2012

46 / 65

Trabajo a desarrollar: Programaci´on UART - DS1302

Diagramas de flujo del programa: Segunda aproximaci´on

Diagramas de flujo de la interrupci´on

Respalda el acumulador, W.

Respalda el STATUS register.

Limpia bandera que genero la interrupción.

Captura la tecla presionada.

Abortar todos los capturados?

Limpia banderas controladoras de captura de los datos.

Limpia banderas controladoras de escritura en el DS1302.

Restablece el STATUS register.

Respalda el acumulador, W.

ISR

W --> STORW

STATUS --> STRST

0 --> PIR1(RCIF)

RCREG --> dato

dato = ESC ?

NO

lecRpgr

00h

SI

--> Rprogm

00h --> Yaprogm

outprl

4

STRST --> STATUS

STORW --> W

Sale

NO

proc_ac

= 1 ?

NO

dato

= 'P' ?

SI

1 --> proc_ac

tr_dato

4

SI

procact

Inicia proceso ?

Proceso activo.

Realiza el eco a la Hyper Terminal.

Mauricio L´opez V. (Ingenier´ıa)

Programaci´on UART - DS1302

dato

= 'F' ?

SI

tr_dato

prgano

3

NO

lecano

5

Realiza el eco a la Hyper Terminal.

Mayo, 2012

47 / 65

Trabajo a desarrollar: Programaci´on UART - DS1302

Diagramas de flujo del programa: Segunda aproximaci´on

Diagramas de flujo de la interrupci´on

Está en proceso la captura del año?

Se inicia la captura del año?

Habilita la captura de datos del año.

Para la captura del número más significativo.

Realiza el eco a la Hyper Terminal.

5 lecano wrt_ano SI = 1 ? lcdtano NO lecmes dato 6 = 'A' ?
5
lecano
wrt_ano
SI
= 1 ?
lcdtano
NO
lecmes
dato
6
= 'A' ?
NO
SI
1 --> wrt_ano
1 --> bit_MSB
tr_dato
4
SI 1 --> wrt_ano 1 --> bit_MSB tr_dato 4 Lee_dator balmac = 1 ? SI rgdato
Lee_dator balmac = 1 ? SI rgdato --> rano 0 --> wrt_ano 1 --> wds_ano
Lee_dator
balmac
= 1 ?
SI
rgdato --> rano
0
--> wrt_ano
1
--> wds_ano
0
--> balmac
4

NO

4
4

Mauricio L´opez V. (Ingenier´ıa)

Programaci´on UART - DS1302

Lectura de los números.

Ya terminó la lectura de los números ?

Actualiza registro que controla el valor del año.

Termina el proceso de

captura de datos del año.

Datos listos para ser

escritos en el DS1302.

Indica proceso no terminado, para usarse

en el siguiente proceso de captura.

Mayo, 2012

48 / 65

Trabajo a desarrollar: Programaci´on UART - DS1302

Diagramas de flujo del programa: Segunda aproximaci´on

Diagramas de flujo de la interrupci´on 6 lecmes Está en proceso la captura del mes?
Diagramas de flujo de la interrupci´on
6
lecmes
Está en proceso la
captura del mes?
wrt_mes
SI
=
1 ?
lcdtmes
NO
Lee_dator
lecdia
dato
Se inicia la captura del mes?
7
=
'M' ?
NO
NO
balmac
4
= 1 ?
SI
SI
Habilita la captura
de datos del mes.
1 --> wrt_mes
vf_int (H'12', H'01')
Para la captura del
número más significativo.
1 --> bit_MSB
rgdato --> rmes
Realiza el eco a la
Hyper Terminal.
tr_dato
0
--> wrt_mes
4
1
--> wds_mes
0
--> balmac
4

Lectura de los números.

Ya terminó la lectura de los números ?

Verifica que el dato del mes se encuentre en el intervalo válido.

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.

Mauricio L´opez V. (Ingenier´ıa)

Programaci´on UART - DS1302

Mayo, 2012

49 / 65

Trabajo a desarrollar: Programaci´on UART - DS1302

Diagramas de flujo del programa: Segunda aproximaci´on

Diagramas de flujo de la interrupci´on 7 lecdia Está en proceso la captura del día?
Diagramas de flujo de la interrupci´on
7
lecdia
Está en proceso la
captura del día?
wrt_dia
SI
=
1 ?
lcdtdia
NO
Lee_dator
lechora
dato
Se inicia la captura del día?
8
=
'D' ?
NO
NO
balmac
4
= 1 ?
SI
SI
Habilita la captura
de datos del día.
1 --> wrt_dia
vf_int (H'31', H'01')
Para la captura del
número más significativo.
1 --> bit_MSB
rgdato --> rdia
Realiza el eco a la
Hyper Terminal.
tr_dato
0
--> wrt_dia
4
1
--> wds_dia
0
--> balmac
4

Lectura de los números.

Ya terminó la lectura de los números ?

Verifica que el dato del día se encuentre en el intervalo válido.

Actualiza registro que controla el valor del día.

Termina el proceso de

captura de datos del día.

Datos listos para ser

escritos en el DS1302.

Indica proceso no terminado, para usarse

en el siguiente proceso de captura.

Mauricio L´opez V. (Ingenier´ıa)

Programaci´on UART - DS1302

Mayo, 2012

50 / 65

Trabajo a desarrollar: Programaci´on UART - DS1302

Diagramas de flujo del programa: Segunda aproximaci´on

Diagramas de flujo de la interrupci´on 8 lechora Está en proceso la captura de las
Diagramas de flujo de la interrupci´on
8
lechora
Está en proceso la
captura de las horas?
wrt_hrs
SI
=
1 ?
lcdthor
NO
Lee_dator
Se inicia la captura de
las horas?
lecmin
dato
9
=
'H' ?
NO
NO
balmac
4
= 1 ?
SI
SI
Habilita la captura de
datos de las horas.
1 --> wrt_hrs
vf_int (H'23', H'00')
Para la captura del
número más significativo.
1 --> bit_MSB
rgdato --> rhora
Realiza el eco a la
Hyper Terminal.
tr_dato
0
--> wrt_hrs
4
1
--> wds_hrs
0
--> balmac
4

Lectura de los números.

Ya terminó la lectura de los números ?

Verifica que el dato de las horas se encuentre en el intervalo válido.

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.

Mauricio L´opez V. (Ingenier´ıa)

Programaci´on UART - DS1302

Mayo, 2012

51 / 65

Trabajo a desarrollar: Programaci´on UART - DS1302

Diagramas de flujo del programa: Segunda aproximaci´on

Diagramas de flujo de la interrupci´on 9 lecmin Está en proceso la captura de los
Diagramas de flujo de la interrupci´on
9
lecmin
Está en proceso la
captura de los minutos?
wrt_min
SI
=
1 ?
lcdtmin
NO
Lee_dator
Se inicia la captura de
los minutos?
lecdis
dato
10
=
'm' ?
NO
NO
balmac
4
= 1 ?
SI
SI
Habilita la captura de
datos de los minutos.
1 --> wrt_min
vf_int (H'59', H'00')
Para la captura del
número más significativo.
1 --> bit_MSB
rgdato --> rminut
Realiza el eco a la
Hyper Terminal.
tr_dato
0
--> wrt_min
4
1
--> wds_min
0
--> balmac
4

Lectura de los números.

Ya terminó la lectura de los números ?

Verifica que el dato de los minutos se encuentre en el intervalo válido.

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.

Mauricio L´opez V. (Ingenier´ıa)

Programaci´on UART - DS1302

Mayo, 2012

52 / 65

Trabajo a desarrollar: Programaci´on UART - DS1302

Diagramas de flujo del programa: Segunda aproximaci´on

Diagramas de flujo de la interrupci´on

Está en proceso la captura de los días de la semana?

Se inicia la captura de los días de la semana?

Habilita la captura de datos de los días de la semana.

Para la captura del número más significativo.

Realiza el eco a la Hyper Terminal.

10 lecdis wrt_dis SI = 1 ? lcdtdis NO dato 4 = 'd' ? NO
10
lecdis
wrt_dis
SI
= 1 ?
lcdtdis
NO
dato
4
= 'd' ?
NO
SI
1 --> wrt_dis
1 --> bit_MSB
tr_dato
4
SI 1 --> wrt_dis 1 --> bit_MSB tr_dato 4 Lee_dator balmac = 1 ? SI vf_int
Lee_dator balmac = 1 ? SI vf_int (H'07', H'01') rgdato --> rdiasem 0 --> wrt_dis
Lee_dator
balmac
= 1 ?
SI
vf_int (H'07', H'01')
rgdato --> rdiasem
0
--> wrt_dis
1
--> wds_dis
0
--> balmac
4

NO

4
4

Mauricio L´opez V. (Ingenier´ıa)

Programaci´on UART - DS1302

Lectura de los números.

Ya terminó la lectura de los números ?

Verifica que el dato de los días de la semana se encuentre en el intervalo válido.

Actualiza registro que controla el valor de los días de la semana.

Termina el proceso de captura de

datos de los días de la semana.

Datos listos para ser

escritos en el DS1302.

Indica proceso no terminado, para usarse

en el siguiente proceso de captura.

Mayo, 2012

53 / 65

Trabajo a desarrollar: Programaci´on UART - DS1302

Subrutina: inreg

Diagramas de flujo del programa: Tercera aproximaci´on

Para llevar a cabo la inversi´on de los ocho bits de un registro fuent e a un registro destino se crea la subrutina de inversi´on de bits o de reversi ´on: inreg .

Par´ametros de inreg :

Tiene como entrada:bits o de reversi ´on: inreg . Par´ametros de inreg : - rgfuen : Registro origen

- rgfuen : Registro origen al que se desea invertir sus bits.

Tiene como salida:rgfuen : Registro origen al que se desea invertir sus bits. - rgdest : Registro fuente

- rgdest : Registro fuente que almacena los bits ya invertidos.

Mauricio L´opez V. (Ingenier´ıa)

Programaci´on UART - DS1302

Mayo, 2012

54 / 65

Trabajo a desarrollar: Programaci´on UART - DS1302

Subrutina: inreg

Funciones de inreg :

Diagramas de flujo del programa: Tercera aproximaci´on

Lleva a cabo el intercambio de los bits (auxili´andose de un contador, otrcont ): otrcont ):

MSB

 

LSB

 

a7

a6

a5

a4

a3

a2

a1

a0

rgfuen: registro fuente

a4 a3 a2 a1 a0 rgfuen: registro fuente a0 a1 a2 a3 a4 a5 a6 a7

a0

a1

a2

a3

a4

a5

a6

a7

rgdest: registro destino

MSB

 

LSB

Rota a la izquierda el registro fuente, para identificar el bit m´as significativo, y rota a la derecha el registro destino, para inyectar el bit en la posi ci´on m´as significativa.a7 rgdest: registro destino MSB   LSB Mauricio L´opez V. (Ingenier´ıa)   MSB LSB

Mauricio L´opez V. (Ingenier´ıa)

m´as significativa. Mauricio L´opez V. (Ingenier´ıa)   MSB LSB C rgfuen   MSB LSB
 
  MSB LSB

MSB

LSB

LSB

C

rgfuen

 
  MSB LSB

MSB

LSB

C

rgdest

Programaci´on UART - DS1302

Mayo, 2012

55 / 65

Trabajo a desarrollar: Programaci´on UART - DS1302

Subrutina: inreg

Diagramas de flujo del programa: Tercera aproximaci´on

inreg 00h --> otrcont Limpia contador. RotLeft(rgfuen) --> rgfuen Rota a la izquierda para capturar
inreg
00h --> otrcont
Limpia contador.
RotLeft(rgfuen) --> rgfuen
Rota a la izquierda para capturar
el bit más significativo.
RotDer(rgdest) --> rgdest
Rota a la derecha para inyectarlo
al bit más significativo.
otrcont + 1 --> otrcont
Decrementa el contador.
NO
otrcont<3>
= 1 ?
Ya terminó de invertir todos los bits ?
SI
Sale

Mauricio L´opez V. (Ingenier´ıa)

Programaci´on UART - DS1302

Mayo, 2012

56 / 65

Trabajo a desarrollar: Programaci´on UART - DS1302

MACRO esc ctr

Diagramas de flujo del programa: Tercera aproximaci´on

Para almacenar un dato en uno de los registros del dispositivo DS1302 se cre a una MACRO llamada esc ctr , la cual se ayuda de las subrutinas inreg y wrtds . esc ctr , la cual se ayuda de las subrutinas inreg y wrtds .

Definici´on de la MACRO:, la cual se ayuda de las subrutinas inreg y wrtds . - esc ctr MACRO

-

esc ctr MACRO control, registro

Ejemplo de la forma de uso de la MACRO:Definici´on de la MACRO: - esc ctr MACRO control, registro - esc ctr B’10001100’, rano Funciones

-

esc ctr B’10001100’, rano

Funciones de la macro esc ctr : esc ctr :

Utiliza como palabra de comando la constante, proporcionad a en su argumento, para escribir en un registro particular el dato proporciona do por el argumento registro . registro.

Habilita el DS1302.el dato proporciona do por el argumento registro . Manda primero al DS1302 la palabra de

Manda primero al DS1302 la palabra de comando y despu´es el da to a almacenar.do por el argumento registro . Habilita el DS1302. Antes de mandar el comando o el

Antes de mandar el comando o el dato debe invertir los bits par a que la informaci´on transmitida sea interpretada adecuadamente .la palabra de comando y despu´es el da to a almacenar. Al terminar deshabilita el DS1302.

Al terminar deshabilita el DS1302.informaci´on transmitida sea interpretada adecuadamente . Mauricio L´opez V. (Ingenier´ıa) Programaci´on UART -

Mauricio L´opez V. (Ingenier´ıa)

Programaci´on UART - DS1302

Mayo, 2012

57 / 65

Trabajo a desarrollar: Programaci´on UART - DS1302

Diagramas de flujo del programa: Tercera aproximaci´on

MACRO esc ctr MACRO esc_ctr (control, registro) 'control' --> ComanDS registro --> DataDS wrtds
MACRO esc ctr
MACRO
esc_ctr (control, registro)
'control' --> ComanDS
registro --> DataDS
wrtds
FIN MACRO

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.

Mauricio L´opez V. (Ingenier´ıa)

Programaci´on UART - DS1302

Mayo, 2012

58 / 65

Trabajo a desarrollar: Programaci´on UART - DS1302

Diagramas de flujo del programa: Tercera aproximaci´on

Pseudoc´odigo de la subrutina de escritura: wrtds

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.

Mauricio L´opez V. (Ingenier´ıa)

Programaci´on UART - DS1302

Mayo, 2012

59 / 65

Trabajo a desarrollar: Programaci´on UART - DS1302

Subrutina: wrtds

Diagramas de flujo del programa: Tercera aproximaci´on

Tiene como parámetros de entrada: ComanDS y DataDS.

Mauricio L´opez V. (Ingenier´ıa)

wrtds 1 --> RSTDS13
wrtds
1 --> RSTDS13

SSPBUF --> W

(Ingenier´ıa) wrtds 1 --> RSTDS13 SSPBUF --> W 0 --> SSPIF ComanDS --> rgfuen inreg rgdest

0 --> SSPIF

wrtds 1 --> RSTDS13 SSPBUF --> W 0 --> SSPIF ComanDS --> rgfuen inreg rgdest -->

ComanDS --> rgfuen

SSPBUF --> W 0 --> SSPIF ComanDS --> rgfuen inreg rgdest --> SSPBUF #DEFINE RSTDS13 PORTC,

inreg

--> W 0 --> SSPIF ComanDS --> rgfuen inreg rgdest --> SSPBUF #DEFINE RSTDS13 PORTC, 1

rgdest --> SSPBUF

#DEFINE

RSTDS13

PORTC, 1

Habilita el DS1302.

Libera el SSPBUF.

Limpiar bandera de fin de transferencia.

Establece rgfuen con comando ComanDS.

Realiza la reversión.

Transmite comando al DS1302.

NO

SSPIF = 1 ? SI 11
SSPIF
= 1 ?
SI
11

Programaci´on UART - DS1302

Ya terminó la transmisión ?

Mayo, 2012

60 / 65

Trabajo a desarrollar: Programaci´on UART - DS1302

Diagramas de flujo del programa: Tercera aproximaci´on

Subrutina: wrtds

Mauricio L´opez V. (Ingenier´ıa)

11
11

SSPBUF --> W

Mauricio L´opez V. (Ingenier´ıa) 11 SSPBUF --> W 0 --> SSPIF DataDS --> rgfuen inreg rgdest

0 --> SSPIF

V. (Ingenier´ıa) 11 SSPBUF --> W 0 --> SSPIF DataDS --> rgfuen inreg rgdest --> SSPBUF

DataDS --> rgfuen

11 SSPBUF --> W 0 --> SSPIF DataDS --> rgfuen inreg rgdest --> SSPBUF N O

inreg

SSPBUF --> W 0 --> SSPIF DataDS --> rgfuen inreg rgdest --> SSPBUF N O SSPIF

rgdest --> SSPBUF

NO

SSPIF = 1 ? SI
SSPIF
= 1 ?
SI

SSPBUF --> W

--> SSPBUF N O SSPIF = 1 ? SI SSPBUF --> W 0 --> RSTDS13 Sale

0 --> RSTDS13

Sale
Sale

Libera el SSPBUF.

Limpiar bandera de fin de transferencia.

Establece rgfuen con dato DataDS.

Realiza la reversión.

Transmite dato al DS1302.

Ya terminó la transmisión ?

Libera el SSPBUF.

Deshabilita el DS1302.

Programaci´on UART - DS1302

Mayo, 2012

61 / 65

Trabajo a desarrollar: Programaci´on UART - DS1302

Diagramas de flujo del programa: Tercera aproximaci´on

Pseudoc´odigo de la subrutina de lectura: redtds

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 transmisión 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.

Mauricio L´opez V. (Ingenier´ıa)

Programaci´on UART - DS1302

Mayo, 2012

62 / 65

Trabajo a desarrollar: Programaci´on UART - DS1302

Subrutina: redtds

Diagramas de flujo del programa: Tercera aproximaci´on

Tiene como parámetros de entrada: ComanDS y DataDS.

Mauricio L´opez V. (Ingenier´ıa)

redtds 1 --> RSTDS13
redtds
1 --> RSTDS13

SSPBUF --> W

(Ingenier´ıa) redtds 1 --> RSTDS13 SSPBUF --> W 0 --> SSPIF ComanDS --> rgfuen inreg rgdest

0 --> SSPIF

redtds 1 --> RSTDS13 SSPBUF --> W 0 --> SSPIF ComanDS --> rgfuen inreg rgdest -->

ComanDS --> rgfuen

SSPBUF --> W 0 --> SSPIF ComanDS --> rgfuen inreg rgdest --> SSPBUF N O SSPIF

inreg

--> W 0 --> SSPIF ComanDS --> rgfuen inreg rgdest --> SSPBUF N O SSPIF =

rgdest --> SSPBUF

NO

SSPIF = 1 ? SI
SSPIF
= 1 ?
SI

SSPBUF --> W

12
12

#DEFINE

RSTDS13

PORTC, 1

Habilita el DS1302.

Libera el SSPBUF.

Limpiar bandera de fin de transferencia.

Establece rgfuen con comando ComanDS.

Realiza la reversión.

Transmite comando al DS1302.

Ya terminó la transmisión ?

Libera el SSPBUF.

Programaci´on UART - DS1302

Mayo, 2012

63 / 65

Trabajo a desarrollar: Programaci´on UART - DS1302

Diagramas de flujo del programa: Tercera aproximaci´on

Subrutina: redtds

Mauricio L´opez V. (Ingenier´ıa)

12
12

0 --> SSPIF NOP

L´opez V. (Ingenier´ıa) 12 0 --> SSPIF NOP W --> SSPBUF N O 2 NOP's SSPIF

W --> SSPBUF

NO

12 0 --> SSPIF NOP W --> SSPBUF N O 2 NOP's SSPIF = 1 ?

2 NOP's

SSPIF = 1 ? SI
SSPIF
= 1 ?
SI

SSPBUF --> rgfuen

N O 2 NOP's SSPIF = 1 ? SI SSPBUF --> rgfuen inreg rgdest --> DataDS

inreg

O 2 NOP's SSPIF = 1 ? SI SSPBUF --> rgfuen inreg rgdest --> DataDS 0

rgdest --> DataDS

= 1 ? SI SSPBUF --> rgfuen inreg rgdest --> DataDS 0 --> RSTDS13 Sale Limpiar

0 --> RSTDS13

Sale
Sale

Limpiar bandera de fin de transferencia.

Inicia la transmisión.

Ya terminó la transmisión ?

Captura el dato leído.

Realiza la reversión.

Almacena el dato leído para ser procesado posteriormente.

Deshabilita el DS1302.

Programaci´on UART - DS1302

Mayo, 2012

64 / 65

Trabajo a desarrollar: Programaci´on UART - DS1302

Diagramas de flujo del programa: Tercera aproximaci´on

Diagramas de flujo de la interrupci´on

3 prgano wds_ano = 1 ? NO wds_mes = 1 ? NO wds_dia NO wds_hrs
3
prgano
wds_ano
= 1 ?
NO
wds_mes
= 1 ?
NO
wds_dia
NO
wds_hrs
NO
15
= 1 ?
= 1 ?
prgmes
prgdia
prghora
prgmin
SI
SI
SI
SI

0 --> wds_ano

prghora prgmin SI SI SI SI 0 --> wds_ano esc_ctr B'10001100', rano 0 --> wds_mes

esc_ctr B'10001100', rano

0 --> wds_mes esc_ctr B'10001000', rmes wds_min NO = 1 ? prgdis SI
0 --> wds_mes
esc_ctr B'10001000', rmes
wds_min
NO
= 1 ?
prgdis
SI

0 --> wds_dia

esc_ctr B'10000110', rdia

0 --> wds_hrs

esc_ctr B'10000110', rdia 0 --> wds_hrs esc_ctr B'10000100', rhora 15 wds_dis SI 0

esc_ctr B'10000100', rhora

15 wds_dis SI 0 --> wds_dis = 1 ? NO inisec esc_ctr B'10001010', rdiasem
15
wds_dis
SI
0 --> wds_dis
= 1 ?
NO
inisec
esc_ctr B'10001010', rdiasem

0 --> wds_min

esc_ctr B'10000010', rminut

0 --> wds_min esc_ctr B'10000010', rminut 00h --> Rprogm 00h --> Yaprogm Mauricio L´opez V.

00h --> Rprogm

esc_ctr B'10000010', rminut 00h --> Rprogm 00h --> Yaprogm Mauricio L´opez V. (Ingenier´ıa) Sale

00h --> Yaprogm

Mauricio L´opez V. (Ingenier´ıa)

Sale
Sale

Programaci´on UART - DS1302

Mayo, 2012

65 / 65