0% encontró este documento útil (0 votos)
4 vistas65 páginas

Download

Cargado por

infoargentronix
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
4 vistas65 páginas

Download

Cargado por

infoargentronix
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 65

Sistemas Digitales II

1 Modulo MSSP
Modulo SPI
SSPSTAT - SPI
SSPCON - SPI
I/O en modo SPI
Diagrama de tiempos
2 El DS1302
Caracterı́sticas
Byte de comando
Control y transferencia
Resumen de registros
PIC modo SPI - DS1302
3 Trabajo a desarrollar: Programación UART - DS1302
Diagrama de conexiones
Caracterı́stica de diseño
Diagramas de flujo del programa: Primera aproximación
Diagramas de flujo del programa: Segunda aproximación
Diagramas de flujo del programa: Tercera aproximación

Maurico López V. (Ingenierı́a) Microcontroladores PIC Marzo, 2011 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ón e intercambio de datos con un
dispositivo esclavo.

El SPI permite la transmisión y recepción sı́ncrona simultáneamente de datos de


8 bits.

Se soportan los cuatro modos de SPI (CKP y CKE).

Para llevar a cabo la comunicación se usan tı́picamente tres pins:


- 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:
- Seleccionador de Esclavo (SS).

Maurico López V. (Ingenierı́a) MSSP - SPI . . . Marzo, 2011 2 / 65


Modulo MSSP Modulo SPI

Modulo MSSP en modo SPI

En el protocolo SPI, la señal de reloj, SCK, es suministrada por el maestro que


proporciona la sincronización y el control del inicio de la transmisión del dato.

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 transfieren a no ser que el reloj sea programado.

Todos los esclavos son controlados por el reloj, que está a su vez controlado por el
dispositivo maestro.

El esclavo no puede manipular el reloj.

Maurico López V. (Ingenierı́a) MSSP - SPI . . . Marzo, 2011 3 / 65


Modulo MSSP Modulo SPI

Modulo MSSP en modo SPI

En la transferencia de datos, están involucrados el registro SSPBUF y el registro


de corrimiento SSPSR.

Maurico López V. (Ingenierı́a) MSSP - SPI . . . Marzo, 2011 4 / 65


Modulo MSSP Modulo SPI

Modulo MSSP en modo SPI

La transmisión inicia en el momento que el módulo maestro manda una señal de


habilitación al módulo esclavo y se lleva a cabo al activar la terminal SS (Slave
Selection). Una vez finalizada la transferencia se manda la señal de
deshabilitación para indicar que la comunicación entre los dos dispositivos ha
terminado.

La transferencia la inicia el módulo maestro en el momento en que el dato a


transmitir se carga en el registro SSPBUF, éste a su vez se carga en el registro
de corrimiento SSPSR que inicia el intercambio de datos.

Por cada pulso de reloj el registro SSPSR transfiere un bit a la terminal SDO.
Este bit es recibido por el módulo esclavo por al terminal SDI y almacenado en
su registro de corrimiento.

De igual forma, por cada pulso de reloj, controlado por el maestro, el registro
SSPSR del módulo esclavo transfiere un bit a la terminal SDO. Éste bit es
recibido por el módulo maestro, por la terminal SDI, y almacenado en su
registro de corrimiento SSPSR. De esta forma se cierra un bucle en la que ambos
transfieren datos al mismo tiempo.

Maurico López V. (Ingenierı́a) MSSP - SPI . . . Marzo, 2011 5 / 65


Modulo MSSP Modulo SPI

Modulo MSSP en modo SPI

En modo SPI, la transmisión y recepción de datos es en los dos sentidos.

Se crea un ciclo de transmisión/recepción.

Los dos módulos transmiten y reciben datos.

Cuando la transferencia ha finalizado en el módulo maestro, también ha terminado


de recibir un dato el módulo esclavo y viceversa.

La transferencia no inicia si el módulo esclavo carga un dato en su registro


SSPBUF.

Cuando el módulo maestro realiza la transmisión de un dato, éste se almacena


en el registro SSPBUF y debe ser leı́do antes de transmitir el siguiente dato.

Maurico López V. (Ingenierı́a) MSSP - SPI . . . Marzo, 2011 6 / 65


Modulo MSSP Modulo SPI

Modulo MSSP en modo SPI

Para inicializar el modulo MSSP en modo SPI deben especificarse 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 especificar:


- 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ón del Reloj (salida del dato en la transición ascendente/descendente del
SCK).
- Velocidad del Reloj (sólo en modo Maestro).
- Modo de selección de Esclavo (sólo en modo Esclavo).

Maurico López V. (Ingenierı́a) MSSP - SPI . . . Marzo, 2011 7 / 65


Modulo MSSP SSPSTAT - SPI

SSPSTAT: Registro de estado MMSP (Modo 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 final del tiempo de salida del dato.
SMP = 0. 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.

bit 6 : CKE (SPI Clock Select bit). Bit selector del flanco en la que se realiza la
sincronización.
CKE = 1. La transmisión ocurre en la transición del estado activo al inactivo del
reloj.
CKE = 0. La transmisión ocurre en la transición del estado inactivo al activo del
reloj.
Nota: La polaridad del estado del reloj se establece con el bit CKP
(SSPCON<4>).
Maurico López V. (Ingenierı́a) MSSP - SPI . . . Marzo, 2011 8 / 65
Modulo MSSP SSPSTAT - SPI

SSPSTAT: Registro de estado MMSP (Modo SPI)

bit5:1 : D/A, P, S, R/W y UA: Bits para uso en comunicación modo I2C.
Se programan en cero.

bit 0 : BF (Buffer Full Status bit). Bit de estado de buffer lleno (sólo en modo de
recepción).
BF = 1. Recepción completa, SSPBUF lleno.
BF = 0. Recepción incompleta, SSPBUF vacı́o.

Maurico López V. (Ingenierı́a) MSSP - SPI . . . Marzo, 2011 9 / 65


Modulo MSSP SSPCON - SPI

SSPCON: Registro de control MMSP (Modo SPI)

bit 7 : WCOL (Write Collision Detect bit). Bit que verifica si a ocurrido una
colisión(sólo en modo de transmisión).

WCOL = 1. Se escribe sobre el registro SSPBUF cuando aún se encuentra


transmitiendo la palabra previa (Debe ser limpiada por software).
WCOL = 0. No hay una colisión.

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ún conserva
la palabra anterior (El dato en SSPSR se pierde). El usuario debe leer el SSPBUF,
inclusive si sólo transmite datos, para evitar que se genere el sobrepasamiento
(Debe ser limpiada por software).
SSPOV = 0. No hay una overflow.

Maurico López V. (Ingenierı́a) MSSP - SPI . . . Marzo, 2011 10 / 65


Modulo MSSP SSPCON - SPI

SSPCON: Registro de control MMSP (Modo SPI)

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, and SS
como los pin del puerto serial.
SSPEN = 0. Deshabilita el puerto serial y configura éstos pins como pins 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.
CKP = 0. El estado de inactividad para el reloj es el nivel bajo.

Maurico López V. (Ingenierı́a) MSSP - SPI . . . Marzo, 2011 11 / 65


Modulo MSSP SSPCON - SPI

SSPCON: Registro de control MMSP (Modo 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.

Maurico López V. (Ingenierı́a) MSSP - SPI . . . Marzo, 2011 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.

Para reiniciar o reconfigurar el modo SPI, limpiar el bit SSPEN, inicializar los
bits del registro SSPCON y luego poner en uno el bit SSPEN.

SSPEN = 1 configura los pins SCK, SDO, SDI, and SS como los pins del puerto
serial.
Para que los pins funcionen de acuerdo a los requerimientos del puerto serial,
algunos bits (en el registro TRISC) deben programarse de tal manera que se
tenga el flujo de dirección de los datos adecuado. Estos son:
SDI es automáticamente controlado por el modulo SPI.

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

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

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

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

Maurico López V. (Ingenierı́a) MSSP - SPI . . . Marzo, 2011 13 / 65


Modulo MSSP I/O en modo SPI

Diagrama a bloque del módulo MSSP en modo SPI

Maurico López V. (Ingenierı́a) MSSP - SPI . . . Marzo, 2011 14 / 65


Modulo MSSP Diagrama de tiempos

Diagrama de tiempos en modo maestro (SPI)

Maurico López V. (Ingenierı́a) MSSP - SPI . . . Marzo, 2011 15 / 65


Modulo MSSP Diagrama de tiempos

Diagrama de tiempos en modo maestro (SPI)

Maurico López V. (Ingenierı́a) MSSP - SPI . . . Marzo, 2011 16 / 65


El DS1302 Caracterı́sticas

Caracterı́sticas del DS1302

Reloj de tiempo real, proporciona información de: segundos, minutos, horas, dı́a
del mes, mes, dı́a de la semana y año (válido hasta 2100).

RAM de 31 x 8 para almacenamiento de datos.

Voltaje de operación de 2 a 5.5V.

Utiliza menos de 300 nA a 2V.

Interfaz a 3 lı́neas.

Compatible a niveles TTL.

Dos pins para el suministro de energı́a: primaria y de respaldo.

Se puede usar una baterı́a en el bit de suministro de energı́a de respaldo.

Maurico López V. (Ingenierı́a) El DS1302 . . . Marzo, 2011 17 / 65


El DS1302 Caracterı́sticas

Descripción de los pin del DS1302

PIN Descripción
X1, X2 Pins para conectar el oscilador de cristal de 32.768 KHz.
GND Ground o tierra.
RST ó CE Reset.
I/O Entrada/Salida de datos.
SCLK Reloj serial.
Vcc1, Vcc2 Pins de suministro de energı́a.

Circuito de conexión:

Maurico López V. (Ingenierı́a) El DS1302 . . . Marzo, 2011 18 / 65


El DS1302 Caracterı́sticas

Principales elementos a bloque del DS1302

Registro de corrimiento, lógica de control, oscilador, reloj de tiempo real y RAM.

Maurico López V. (Ingenierı́a) El DS1302 . . . Marzo, 2011 19 / 65


El DS1302 Caracterı́sticas

El DS1302

El DS1302 contiene un reloj/calendario de tiempo real y 31 bytes de RAM.

El último dı́a de la fecha del mes se ajusta automáticamente para aquellos meses
que tienen menos de 31 dı́as, incluye corrección de año bisiesto.

La operación del reloj permite ambos formatos: 24 horas o 12 horas con


indicador de AM/PM.

La interface del DS1302 con un microcontrolador se simplifica usando una


comunicación serial sı́ncrona.

Sólo se requieren tres lı́neas para comunicarse con el Reloj/RAM:

RST ó CE (Reset).

I/O (Lı́nea de datos).

SCLK (Reloj serial).

Maurico López V. (Ingenierı́a) El DS1302 . . . Marzo, 2011 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 lógico. Si éste es cero y es escrito en el DS1302
lo deshabilitará.

El bit 6 especifica el dato reloj/calendario, para un cero lógico, o dato RAM,


para un uno lógico.

Los bits de 1 al 5 especifican el registro en particular a ser leı́do o escrito.

El LSB (bit 0) especifica una operación de escritura (entrada) si tiene valor cero
lógico o de lectura (salida) si tiene valor uno lógico.

Maurico López V. (Ingenierı́a) El DS1302 . . . Marzo, 2011 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 válidos durante el frente ascendente
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


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 lógico


hasta que VCC > 2V. También, SCLK debe estar en cero lógico cuando el bit
RST ó CE cambia a una estado uno lógico.

Maurico López V. (Ingenierı́a) El DS1302 . . . Marzo, 2011 22 / 65


El DS1302 Control y transferencia

Transferencia de datos

Maurico López V. (Ingenierı́a) El DS1302 . . . Marzo, 2011 23 / 65


El DS1302 Control y transferencia

Entrada y Salida de datos

Entrada de datos
Después de los ocho ciclos de SCLK que introducen un byte de comando de
escritura, un byte de datos se introduce en los frentes ascendentes de los ocho
siguientes ciclos de SCLK.

Los datos son introducidos comenzando con el bit 0.

Salida de datos
Después 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.

El primer bit del dato a ser transmitido ocurre en el primer frente descendente
después de que el último bit del byte de comando es escrito.

El pin I/O va a un estado de alta impedancia en cada frente ascendente de


SCLK.

Los datos salen comenzando con el bit 0.


Maurico López V. (Ingenierı́a) El DS1302 . . . Marzo, 2011 24 / 65
El DS1302 Control y transferencia

Entrada y Salida de datos

La información de la hora y del calendario se obtiene al leer los bytes de los


registro correspondientes, un vez que éstos últimos se hayan configurado (al
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).

El registro del dı́a de la semana se incrementa a medianoche.

Los valores que corresponden al dı́a de la semana son definidos por el usuario,
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 información ilógica causan una operación
indeterminada.

Maurico López V. (Ingenierı́a) El DS1302 . . . Marzo, 2011 25 / 65


El DS1302 Resumen de registros

Registros de Dirección/Definición

Maurico López V. (Ingenierı́a) El DS1302 . . . Marzo, 2011 26 / 65


El DS1302 PIC modo SPI - DS1302

PIC modo SPI - DS1302

El microcontrolador al usar el protocolo SPI transfiere su información iniciando


con el MSB (bit7), mientras que el dispositivo reloj DS1302 comienza con el LSB
(bit0) El PIC deben invertirse los bits antes y después de interactuar con el
DS1302.

Para el dispositivo DS1302 el estado de inactividad del reloj SCLK es el nivel


bajo, por lo que el PIC debe programarse con CKP = 0.

Como el ciclo de reloj SCLK en el dispositivo DS1302 es una secuencia de un


frente ascendente seguido de un frente descendente, el PIC debe programarse
con CKE = 1 para que la transmisión ocurra en un frente descendente.

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.

El PIC se programa en modo maestro con reloj de Focs/64, es decir, con


SSPM3:SSPM0 = 0010.

Maurico López V. (Ingenierı́a) El DS1302 . . . Marzo, 2011 27 / 65


Trabajo a desarrollar: Programación UART - DS1302 Diagrama de conexiones

Diagrama de conexiones UART - DS1302

+5V

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

MAX232

Maurico López V. (Ingenierı́a) Programación UART - DS1302 . . . Marzo, 2011 28 / 65


Trabajo a desarrollar: Programación UART - DS1302 Caracterı́stica de diseño

Criterios de programación del reloj DS1302

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
computadora.

El usuario podrá reprogramar, en un proceso de modificación, uno o varios de


los parámetros de fecha y hora.

Maurico López V. (Ingenierı́a) Programación UART - DS1302 . . . Marzo, 2011 29 / 65


Trabajo a desarrollar: Programación UART - DS1302 Caracterı́stica de diseño

Criterios de teclas para la programación del reloj DS1302

’P’ - Inicia un proceso de programación del reloj DS1302.

’F’ - Finaliza un proceso de programación del reloj DS1302.

’ESC’ - Aborta toda la programación del reloj DS1302.

’A’ - Inicia programando del año.

’M’ - Inicia programando del mes (Enero, Febrero, etc.).

’D’ - Inicia programando del dı́a (1, 2, 3, etc.).

’H’ - Inicia programando de las horas (23 hrs.).

’m’ - Inicia programando de los minutos (59 min.).

’d’ - Inicia programando del dı́a de la semana (Lunes, Martes, etc.).

Maurico López V. (Ingenierı́a) Programación UART - DS1302 . . . Marzo, 2011 30 / 65


Trabajo a desarrollar: Programación UART - DS1302 Caracterı́stica de diseño

Criterios de banderas en el control del flujo del programa

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

En general se identifican 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.

Maurico López V. (Ingenierı́a) Programación UART - DS1302 . . . Marzo, 2011 31 / 65


Trabajo a desarrollar: Programación UART - DS1302 Caracterı́stica de diseño

Criterios de banderas en el control del flujo del programa

Banderas del registro 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ño (dato = ’A’ =⇒ wrt ano = 1).

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

- wrt dia (bit Rprogm, 3 ): Captura del dı́a (dato = ’D’ =⇒ wrt dia = 1).

- wrt hrs (bit Rprogm, 2 ): Captura de las horas (dato = ’H’ =⇒ 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úmero (bit MSB = 1 para nibble más
significativo, bit MSB = 0 para nibble menos significativo).

Maurico López V. (Ingenierı́a) Programación UART - DS1302 . . . Marzo, 2011 32 / 65


Trabajo a desarrollar: Programación UART - DS1302 Caracterı́stica de diseño

Criterios de banderas en el control del flujo del programa


Banderas del registro Yaprogm (escritura en el DS1302):
- wds ano (bit Yaprogm, 5 ): Escritura del año
(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úmero (balmac = 0 no se ha terminado de


capturar los dos nibbles del número, balmac = 1 almacena los dos nibbles del
número en el registro correspondiente).
Maurico López V. (Ingenierı́a) Programación UART - DS1302 . . . Marzo, 2011 33 / 65
Trabajo a desarrollar: Programación UART - DS1302 Diagramas de flujo del programa: Primera aproximación

Diagramas de flujo de la interrupción

dato NO proc_ac SI dato NO wrt_ano SI Lee_dato


0 --> wrt_ano
Sale
= ESC ? =1? = 'F' ? =1? 1 --> wds_ano
procact lecano lcdtano

SI NO prgano SI NO
00h --> Rprogm 3
NO dato dato NO wrt_mes SI Lee_dato
0 --> wrt_mes
= 'P' ? = 'A' ? =1? 1 --> wds_mes
lecmes lcdtmes
00h --> Yaprogm
SI SI NO Sale

Sale 1 --> proc_ac 1 --> wrt_ano


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

Maurico López V. (Ingenierı́a) Programación UART - DS1302 . . . Marzo, 2011 34 / 65


Trabajo a desarrollar: Programación UART - DS1302 Diagramas de flujo del programa: Primera aproximación

Diagrama de conexiones UART - DS1302

dato NO wrt_hrs SI Lee_dato


0 --> wrt_hrs
Sale
= 'D' ? =1? 1 --> wds_hrs
lechora lcdthor

SI NO
1 --> wrt_dia
dato NO wrt_min SI Lee_dato
0 --> wrt_min
Sale
= 'H' ? =1? 1 --> wds_min
lecmin lcdtmin
Sale
SI NO
1 --> wrt_hrs
dato NO wrt_dis SI Lee_dato
0 --> wrt_dis
Sale
= 'm' ? =1? 1 --> wds_dis
lecdis lcdtdis
Sale
SI NO
1 --> wrt_min
dato NO Sale
= 'd' ?

Sale
SI
1 --> wrt_dis

Sale

Maurico López V. (Ingenierı́a) Programación UART - DS1302 . . . Marzo, 2011 35 / 65


Trabajo a desarrollar: Programación UART - DS1302 Diagramas de flujo del programa: Primera aproximación

Diagrama de conexiones UART - DS1302

3
prgano

wds_ano NO wds_mes NO wds_dia NO wds_hrs NO wds_min NO wds_dis SI 0 --> wds_dis


=1? prgmes =1? prgdia =1? prghora =1? prgmin =1? prgdis =1?

SI SI SI SI SI NO inisec
Esc_dato

0 --> wds_ano 0 --> wds_mes 0 --> wds_dia 0 --> wds_hrs 0 --> wds_min

Esc_dato Esc_dato Esc_dato Esc_dato Esc_dato


00h --> Rprogm

00h --> Yaprogm

Sale

Maurico López V. (Ingenierı́a) Programación UART - DS1302 . . . Marzo, 2011 36 / 65


Trabajo a desarrollar: Programación UART - DS1302 Diagramas de flujo del programa: Segunda aproximación

Diagramas de flujo de la subrutina: tr dato

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

tr_dato

0 --> TXIF Limpia la bandera de transmisión.

dato --> TXREG Transmite el dato a la PC.

NO TXIF = 1 ? Ya terminó la transmisión ?

SI
Sale

Maurico López V. (Ingenierı́a) Programación UART - DS1302 . . . Marzo, 2011 37 / 65


Trabajo a desarrollar: Programación UART - DS1302 Diagramas de flujo del programa: Segunda aproximación

Diagramas de flujo de la interrupción

Se involucran las banderas de la captura del número:

bit MSB : Para almacenar los dos nibbles del número en el registro
correspondiente,

balmac: Para seleccionar el nibble más o menos significativo del número.

Se definen los registros que controlan los datos de fecha y hora:

- rano: Almacena el dato del año.

- 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.

Maurico López V. (Ingenierı́a) Programación UART - DS1302 . . . Marzo, 2011 38 / 65


Trabajo a desarrollar: Programación UART - DS1302 Diagramas de flujo del programa: Segunda aproximación

Subrutina: Lee dator

Para llevar a cabo la lectura de los números se crea una subrutina de lectura:
Lee dator.
Parámetros de Lee dator :

Tiene como entradas:


- dato: Asociada a la tecla presionada.

- bit MSB : Permite diferenciar entre la entrada del nibble más significativo y menos
significativo del número a capturar.

Tiene como salidas:


- rgdato: Registro donde almacena los dos nibbles del número a capturar.

- balmac: Bandera para diferenciar entre un proceso no terminado de la captura de


los números y otra ya terminada para permitir almacenar el registro rgdato en el
registro correspondiente (rano, rmes, etc.).

Maurico López V. (Ingenierı́a) Programación UART - DS1302 . . . Marzo, 2011 39 / 65


Trabajo a desarrollar: Programación UART - DS1302 Diagramas de flujo del programa: Segunda aproximación

Subrutina: Lee dator

Funciones de Lee dator :

Verifica que el dato capturado corresponda a la tecla de un número.

Si el dato corresponde a un número lleva a cabo el eco a la Hyper Terminal.

Si la lectura es del primer número (el más significativo, bit MSB = 1 ), almacena
éste en el nibble más significativo del registro rgdato, y limpia las banderas
bit MSB y balmac.

Si la lectura es del segundo número (el menos significativo, bit MSB = 0 ),


incorpora éste 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ó la captura de los números).

Maurico López V. (Ingenierı́a) Programación UART - DS1302 . . . Marzo, 2011 40 / 65


Trabajo a desarrollar: Programación UART - DS1302 Diagramas de flujo del programa: Segunda aproximación

Diagramas de flujo de la subrutina: Lee dator

Maurico López V. (Ingenierı́a) Programación UART - DS1302 . . . Marzo, 2011 41 / 65


Trabajo a desarrollar: Programación UART - DS1302 Diagramas de flujo del programa: Segunda aproximación

Diagramas de flujo de la subrutina: Lee dator

Maurico López V. (Ingenierı́a) Programación UART - DS1302 . . . Marzo, 2011 42 / 65


Trabajo a desarrollar: Programación UART - DS1302 Diagramas de flujo del programa: Segunda aproximación

MACRO vf int

Para verificar que cada parámetro de la fecha (año, mes, dı́a del me y dı́a de la
semana) y de la hora (las horas y los minutos) introducidos por el usuario se
encuentren en los intervalo válidos, y en su caso ajustar éstos, se crea una
MACRO llamada vf int, la cual se ayuda de la subrutina sb vf it.

Intervalo de cada parámetro de la fecha y la hora:

- Año: Del 00 a 99 .
- Mes: Del 01 a 12 .
- 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 .

Note que el intervalo válido del mes, dı́a del mes y dı́a de la semana se inicia con
el valor 01 , mientras que el resto de los parámetros con 00 .

Maurico López V. (Ingenierı́a) Programación UART - DS1302 . . . Marzo, 2011 43 / 65


Trabajo a desarrollar: Programación UART - DS1302 Diagramas de flujo del programa: Segunda aproximación

MACRO vf int

Definición de la MACRO:

- vf int MACRO interna, rbit

Ejemplo de la forma de uso de la MACRO:

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

Parámetros de la macro: vf int

Tiene como entrada, además de sus argumentos:


- rgdato: Registro donde se almacenó los dos nibbles del número capturado.

Tiene como salida (si se llevo a cabo un ajuste):

- rgdato: Registro donde se almacenan los dos nibbles del nuevo número ajustado.

Maurico López V. (Ingenierı́a) Programación UART - DS1302 . . . Marzo, 2011 44 / 65


Trabajo a desarrollar: Programación UART - DS1302 Diagramas de flujo del programa: Segunda aproximación

MACRO vf int

Funciones de la macro vf int:

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

Verificar que cada parámetro introducido por el usuario no sobrepase el valor


superior válido y en su caso ajustarlo a ese máximo.

MACRO
vf_int (interva, rbit)

interva --> int_sup Establece el intervalo superior.

Establece la bandera indicadora si se debe


rbit --> bit_ban
verificar que 01 es el intervalo inferior.

Verifica que cada parámetro


sb_vf_it
cumpla con el intervalo válido.

FIN MACRO

Maurico López V. (Ingenierı́a) Programación UART - DS1302 . . . Marzo, 2011 45 / 65


Trabajo a desarrollar: Programación UART - DS1302 Diagramas de flujo del programa: Segunda aproximación

Subrutina: sb vf it

Maurico López V. (Ingenierı́a) Programación UART - DS1302 . . . Marzo, 2011 46 / 65


Trabajo a desarrollar: Programación UART - DS1302 Diagramas de flujo del programa: Segunda aproximación

Diagramas de flujo de la interrupción

ISR

Respalda el acumulador, W. W --> STORW

Respalda el STATUS register. STATUS --> STRST


proc_ac SI dato NO 5
=1? = 'F' ?
Limpia bandera que procact lecano
0 --> PIR1(RCIF)
genero la interrupción.
NO SI
Captura la tecla presionada. RCREG --> dato Realiza el eco a la
tr_dato
Hyper Terminal.
NO dato
Inicia proceso ? prgano
= 'P' ?
Abortar todos los capturados?
dato NO 3
= ESC ?
lecRpgr SI
SI 1 --> proc_ac Proceso activo.
Limpia banderas controladoras
00h --> Rprogm
de captura de los datos.
Realiza el eco a la
tr_dato
Hyper Terminal.
Limpia banderas controladoras
00h --> Yaprogm
de escritura en el DS1302.

outprl 4
4

Restablece el STATUS register. STRST --> STATUS

Respalda el acumulador, W. STORW --> W

Sale

Maurico López V. (Ingenierı́a) Programación UART - DS1302 . . . Marzo, 2011 47 / 65


Trabajo a desarrollar: Programación UART - DS1302 Diagramas de flujo del programa: Segunda aproximación

Diagramas de flujo de la interrupción

lecano

Está en proceso la wrt_ano SI


captura del año? =1?
lcdtano

NO
Lee_dator Lectura de los números.

dato lecmes
Se inicia la captura del año? 6
= 'A' ? NO
4
NO balmac
Ya terminó la lectura de los números ?
=1?
SI
SI
Habilita la captura
1 --> wrt_ano Actualiza registro que
de datos del año. rgdato --> rano
controla el valor del año.
Para la captura del
1 --> bit_MSB
número más significativo. Termina el proceso de
0 --> wrt_ano
captura de datos del año.
Realiza el eco a la
tr_dato
Hyper Terminal. Datos listos para ser
1 --> wds_ano
escritos en el DS1302.

4 Indica proceso no terminado, para usarse


0 --> balmac
en el siguiente proceso de captura.

Maurico López V. (Ingenierı́a) Programación UART - DS1302 . . . Marzo, 2011 48 / 65


Trabajo a desarrollar: Programación UART - DS1302 Diagramas de flujo del programa: Segunda aproximación

Diagramas de flujo de la interrupción

lecmes

Está en proceso la wrt_mes SI


captura del mes? =1?
lcdtmes

NO
Lee_dator Lectura de los números.

dato lecdia
Se inicia la captura del mes? 7
= 'M' ? NO
4
NO balmac
Ya terminó la lectura de los números ?
=1?
SI
SI
Habilita la captura
1 --> wrt_mes Verifica que el dato del mes se
de datos del mes. vf_int (H'12', H'01')
encuentre en el intervalo válido.
Para la captura del
1 --> bit_MSB Actualiza registro que
número más significativo. rgdato --> rmes
controla el valor del mes.
Realiza el eco a la
tr_dato
Hyper Terminal. Termina el proceso de
0 --> wrt_mes
captura de datos del mes.

4 Datos listos para ser


1 --> wds_mes
escritos en el DS1302.

Indica proceso no terminado, para usarse


0 --> balmac
en el siguiente proceso de captura.

Maurico López V. (Ingenierı́a) Programación UART - DS1302 . . . Marzo, 2011 49 / 65


Trabajo a desarrollar: Programación UART - DS1302 Diagramas de flujo del programa: Segunda aproximación

Diagramas de flujo de la interrupción

lecdia

Está en proceso la wrt_dia SI


captura del día? =1?
lcdtdia

NO
Lee_dator Lectura de los números.

dato lechora
Se inicia la captura del día? 8
= 'D' ? NO
4
NO balmac
Ya terminó la lectura de los números ?
=1?
SI
SI
Habilita la captura
1 --> wrt_dia Verifica que el dato del día se
de datos del día. vf_int (H'31', H'01')
encuentre en el intervalo válido.
Para la captura del
1 --> bit_MSB Actualiza registro que
número más significativo. rgdato --> rdia
controla el valor del día.
Realiza el eco a la
tr_dato
Hyper Terminal. Termina el proceso de
0 --> wrt_dia
captura de datos del día.

4 Datos listos para ser


1 --> wds_dia
escritos en el DS1302.

Indica proceso no terminado, para usarse


0 --> balmac
en el siguiente proceso de captura.

Maurico López V. (Ingenierı́a) Programación UART - DS1302 . . . Marzo, 2011 50 / 65


Trabajo a desarrollar: Programación UART - DS1302 Diagramas de flujo del programa: Segunda aproximación

Diagramas de flujo de la interrupción

lechora

Está en proceso la wrt_hrs SI


captura de las horas? =1?
lcdthor

NO
Lee_dator Lectura de los números.

Se inicia la captura de dato lecmin


las horas? 9
= 'H' ? NO
4
NO balmac
Ya terminó la lectura de los números ?
=1?
SI
SI
Habilita la captura de
1 --> wrt_hrs Verifica que el dato de las horas
datos de las horas. vf_int (H'23', H'00')
se encuentre en el intervalo válido.
Para la captura del
1 --> bit_MSB Actualiza registro que controla
número más significativo. rgdato --> rhora
el valor de las horas.
Realiza el eco a la
tr_dato
Hyper Terminal. Termina el proceso de captura
0 --> wrt_hrs
de datos de las horas.

4 Datos listos para ser


1 --> wds_hrs
escritos en el DS1302.

Indica proceso no terminado, para usarse


0 --> balmac
en el siguiente proceso de captura.

Maurico López V. (Ingenierı́a) Programación UART - DS1302 . . . Marzo, 2011 51 / 65


Trabajo a desarrollar: Programación UART - DS1302 Diagramas de flujo del programa: Segunda aproximación

Diagramas de flujo de la interrupción

lecmin

Está en proceso la wrt_min SI


captura de los minutos? =1?
lcdtmin

NO
Lee_dator Lectura de los números.

Se inicia la captura de dato lecdis


los minutos? 10
= 'm' ? NO
4
NO balmac
Ya terminó la lectura de los números ?
=1?
SI
SI
Habilita la captura de
1 --> wrt_min Verifica que el dato de los minutos
datos de los minutos. vf_int (H'59', H'00')
se encuentre en el intervalo válido.
Para la captura del
1 --> bit_MSB Actualiza registro que controla
número más significativo. rgdato --> rminut
el valor de los minutos.
Realiza el eco a la
tr_dato
Hyper Terminal. Termina el proceso de captura
0 --> wrt_min
de datos de los minutos.

4 Datos listos para ser


1 --> wds_min
escritos en el DS1302.

Indica proceso no terminado, para usarse


0 --> balmac
en el siguiente proceso de captura.

Maurico López V. (Ingenierı́a) Programación UART - DS1302 . . . Marzo, 2011 52 / 65


Trabajo a desarrollar: Programación UART - DS1302 Diagramas de flujo del programa: Segunda aproximación

Diagramas de flujo de la interrupción

10

lecdis

Está en proceso la captura wrt_dis SI


de los días de la semana? =1?
lcdtdis

NO
Lee_dator Lectura de los números.

Se inicia la captura de dato


los días de la semana? 4
= 'd' ? NO
4
NO balmac
Ya terminó la lectura de los números ?
=1?
SI
SI
Habilita la captura de datos
1 --> wrt_dis Verifica que el dato de los días de la
de los días de la semana. vf_int (H'07', H'01')
semana se encuentre en el intervalo válido.
Para la captura del
1 --> bit_MSB Actualiza registro que controla el
número más significativo. rgdato --> rdiasem
valor de los días de la semana.
Realiza el eco a la
tr_dato
Hyper Terminal. Termina el proceso de captura de
0 --> wrt_dis
datos de los días de la semana.

4 Datos listos para ser


1 --> wds_dis
escritos en el DS1302.

Indica proceso no terminado, para usarse


0 --> balmac
en el siguiente proceso de captura.

Maurico López V. (Ingenierı́a) Programación UART - DS1302 . . . Marzo, 2011 53 / 65


Trabajo a desarrollar: Programación UART - DS1302 Diagramas de flujo del programa: Tercera aproximación

Subrutina: inreg

Para llevar a cabo la inversión de los ocho bits de un registro fuente a un registro
destino se crea la subrutina de inversión de bits o de reversión: inreg.

Parámetros de inreg:

Tiene como entrada:


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

Tiene como salida:


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

Maurico López V. (Ingenierı́a) Programación UART - DS1302 . . . Marzo, 2011 54 / 65


Trabajo a desarrollar: Programación UART - DS1302 Diagramas de flujo del programa: Tercera aproximación

Subrutina: inreg

Funciones de inreg:
Lleva a cabo el intercambio de los bits (auxiliándose de un contador, otrcont):
MSB LSB
a7 a6 a5 a4 a3 a2 a1 a0 rgfuen: registro fuente

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ás significativo, y


rota a la derecha el registro destino, para inyectar el bit en la posición más
significativa.
MSB LSB
C rgfuen

MSB LSB
C rgdest

Maurico López V. (Ingenierı́a) Programación UART - DS1302 . . . Marzo, 2011 55 / 65


Trabajo a desarrollar: Programación UART - DS1302 Diagramas de flujo del programa: Tercera aproximación

Subrutina: inreg

Maurico López V. (Ingenierı́a) Programación UART - DS1302 . . . Marzo, 2011 56 / 65


Trabajo a desarrollar: Programación UART - DS1302 Diagramas de flujo del programa: Tercera aproximación

MACRO esc ctr

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

Definición de la MACRO:
- esc ctr MACRO control, registro

Ejemplo de la forma de uso de la MACRO:


- esc ctr B’10001100’, rano

Funciones de la macro esc ctr :


Utiliza como palabra de comando la constante, proporcionada en su argumento,
para escribir en un registro particular el dato proporcionado por el argumento
registro.
Habilita el DS1302.
Manda primero al DS1302 la palabra de comando y después el dato a almacenar.
Antes de mandar el comando o el dato debe invertir los bits para que la
información transmitida sea interpretada adecuadamente.
Al terminar deshabilita el DS1302.

Maurico López V. (Ingenierı́a) Programación UART - DS1302 . . . Marzo, 2011 57 / 65


Trabajo a desarrollar: Programación UART - DS1302 Diagramas de flujo del programa: Tercera aproximación

MACRO esc ctr

MACRO
esc_ctr (control, registro)

Establece el comando con


'control' --> ComanDS
la constante del argumento.

Establece el dato con el contenido


registro --> DataDS
del registro del argumento.

Escribe dato (DataDS) en un registro


wrtds
(seleccionado por ComanDS) en el DS1302.

FIN MACRO

Maurico López V. (Ingenierı́a) Programación UART - DS1302 . . . Marzo, 2011 58 / 65


Trabajo a desarrollar: Programación UART - DS1302 Diagramas de flujo del programa: Tercera aproximación

Pseudocódigo 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.

Maurico López V. (Ingenierı́a) Programación UART - DS1302 . . . Marzo, 2011 59 / 65


Trabajo a desarrollar: Programación UART - DS1302 Diagramas de flujo del programa: Tercera aproximación

Subrutina: wrtds

Maurico López V. (Ingenierı́a) Programación UART - DS1302 . . . Marzo, 2011 60 / 65


Trabajo a desarrollar: Programación UART - DS1302 Diagramas de flujo del programa: Tercera aproximación

Subrutina: wrtds

Maurico López V. (Ingenierı́a) Programación UART - DS1302 . . . Marzo, 2011 61 / 65


Trabajo a desarrollar: Programación UART - DS1302 Diagramas de flujo del programa: Tercera aproximación

Pseudocódigo 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.

Maurico López V. (Ingenierı́a) Programación UART - DS1302 . . . Marzo, 2011 62 / 65


Trabajo a desarrollar: Programación UART - DS1302 Diagramas de flujo del programa: Tercera aproximación

Subrutina: redtds

Maurico López V. (Ingenierı́a) Programación UART - DS1302 . . . Marzo, 2011 63 / 65


Trabajo a desarrollar: Programación UART - DS1302 Diagramas de flujo del programa: Tercera aproximación

Subrutina: redtds

Maurico López V. (Ingenierı́a) Programación UART - DS1302 . . . Marzo, 2011 64 / 65


Trabajo a desarrollar: Programación UART - DS1302 Diagramas de flujo del programa: Tercera aproximación

Diagramas de flujo de la interrupción


3
prgano

wds_ano NO wds_mes NO wds_dia NO wds_hrs NO 15


=1? prgmes =1? prgdia =1? prghora =1? prgmin

SI SI SI SI
0 --> wds_ano 0 --> wds_mes 0 --> wds_dia 0 --> wds_hrs

esc_ctr B'10001100', rano esc_ctr B'10001000', rmes esc_ctr B'10000110', rdia esc_ctr B'10000100', rhora

15
wds_min NO wds_dis SI 0 --> wds_dis
=1? prgdis =1?

SI NO inisec
esc_ctr B'10001010', rdiasem

0 --> wds_min

esc_ctr B'10000010', rminut


00h --> Rprogm

00h --> Yaprogm

Sale

Maurico López V. (Ingenierı́a) Programación UART - DS1302 . . . Marzo, 2011 65 / 65

También podría gustarte