You are on page 1of 24

Puertos de E/S

ATE-Universidad de Oviedo

Puertos de E/S

Caractersticas generales de los puertos en el PIC16F877


Funcionamiento Multiplexado con otros mdulos
2

Son 5 Puertos de E/S configurables PORTA: 6 pines PORTB: 8 pines PORTC: 8 pines PORTD: 8 pines PORTE: 3 pines
(dir 0x05) (dir 0x06 y 0x106) (dir 0x07) (dir 0x08) (dir 0x09)

TOTAL: 33 pines de E/S Configuracin de la direccin de los datos en los registros de direccin de datos: TRISA TRISB TRISC TRISD TRISE
(dir 0x85) (dir 0x86 y 0x186) (dir 0x87) (dir 0x88) (dir 0x89)
ATE-Universidad de Oviedo

Puertos de E/S

Caractersticas elctricas de los puertos en el PIC16F877

ATE-Universidad de Oviedo

Puertos de E/S

Registros de los Puertos y Registros de Direccin de Datos


Un puerto (PORT) es una agrupacin lgica de pines de E/S direccionado en la memoria RAM de datos, el tamao mximo de un puerto es de 8 bits (1 byte) Muchos de los pines de los puertos de E/S estn multiplexados con otras funciones alternativas asociadas a los mdulos internos del microcontrolador. Cada funcin posible aparece separada del resto mediante un carcter /: RC3/SCK/SCL Cada registro de puerto (PORTx), lleva asociado un registro de direccin de datos (TRISx) que configura la direccin (entrada o salida) de cada uno de los pines del puerto. El bit n de TRISx controla el sentido del bit n de PORTx (si es 1: entrada , si 0:salida)

b7 b6 b5 b4 b3 b2 b1 b0 Para acordarse: 1->Input 0->Output PORTx S E E E E E S S TRISx 0 1 1 1 1 1 0 0


Direccin de la lnea

ATE-Universidad de Oviedo

Puertos de E/S

Direccin de los datos en los puertos


El nivel lgico y elctrico de un pin definido como entrada depender de la conexin externa realizada en ese pin. Los pines de entrada tendrn conectado algo en el exterior que fijar ese nivel. El nivel lgico y elctrico en un pin definido como salida debe ser gobernado por una etapa de salida interna asociada a ese pin, ese nivel se desconoce a priori en el arranque pero vendr impuesto va software desde el programa del microcontrolador. Tras un reset, todos los bits de los registros TRISx estn a 1, todos los pines de los PORTx son por tanto de entrada por motivo de seguridad en las conexiones Si el pin estuviera definido por error como salida y la conexin externa correspondiera realmente a una entrada cuyo nivel no tiene porqu coincidir con el que intenta imponer la salida, podra aparecer una sobrecorriente que quemara la etapa de salida de manera definitiva. Por tal motivo es especialmente importante prestar atencin a la configuracin que se hace de la direccin de los pines de los puertos desde el programa y tambin puede ser aconsejable proteger elctricamente esos pines con alguna limitacin en la corriente de salida (una resistencia serie por ejemplo) ante errores de programacin.
ATE-Universidad de Oviedo

Puertos de E/S

Entradas definidas como salidas


Corriente de salida si bi =1

CASO 1

Proteccin
Corriente si bi =0
Vdd

Seguridad ante posibles errores de programacin

Vdd Etapa de salida

CASO 2

bi

Conexin externa real Pin definido como Salida

Proteccin

bi bi: bit de salida para ese pin

ATE-Universidad de Oviedo

Puertos de E/S

DIAGRAMA DE BLOQUES INTERNO Y ESQUEMA ELCTRICO DE LOS PUERTOS

ES PARTICULAR DE CADA PUERTO INCLUSO EN EL MISMO PUERTO HAY PINES CON CARACTERSTICAS DISTINTAS

ES NECESARIO SABER INTERPRETAR EL ESQUEMA INTERNO PARTICULAR PARA SABER QU CONEXIONES SE PUEDEN HACER

ATE-Universidad de Oviedo

Puertos de E/S

PORTA Diagrama de Bloques de los pines RA5, RA3, RA2, RA1 y RA0 (multiplexadas con mdulo A/D) RA4 tiene salida de drenador abierto (entrada multiplexada con T0CKI)

ATE-Universidad de Oviedo

Puertos de E/S

Detalle de RA0, RA1, RA2, RA3 y RA5 Caso de que se cargue TRISAi=1 Los dos transistores en corte: la etapa de salida est desactivada y este pin ser de entrada

Este biestable D se carga cada vez que se escribe en el registro del puerto (PORTA) Este biestable D se carga cada vez que se escribe en el registro de direccin del puerto (TRISA)

1 1 0 0

Este biestable Latch se carga cada vez que se lee el registro del puerto (PORTA)

ATE-Universidad de Oviedo

Puertos de E/S

Detalle de RA0, RA1, RA2, RA3 y RA5 (II) Caso de que se cargue TRISAi=0 Manda etapa de salida Si Bi=0 pMOS cortado nMOS en conduccin Pin=0 Si Bi=1 pMOS en conduccin nMOS cortado Pin=1

Bi Escritura en PORTA de Bi Escritura en TRISA de un 0 Bi 0 1 Bi Bi

ATE-Universidad de Oviedo

10

Puertos de E/S

Detalle de RA0, RA1, RA2, RA3 y RA5 (III) Los pines de E/S tienen diodos de proteccin que permiten enclavar la tensin de entrada en el caso de que dichos diodos entren en conduccin
Se necesita la resistencia para limitar la corriente si no, quemamos el diodo

Caso de que Ue supere a Vdd en ms de la tensin de codo del diodo (0,7 V aprox.)

Caso de que Ue sea negativa y superior en mdulo a la tensin de codo del diodo
11

ATE-Universidad de Oviedo

Puertos de E/S

Detalle de RA4 Vdd Como salida (TRISA<4>=0): es nMOS de drenador abierto


Resistencia externa de polarizacin para cambiar tensin de salida, wire-and, etc Como entrada (TRISA<4>=1): el nMOS est siempre cortado La entrada se hace a travs de un buffer Schmitt-Trigger

Esta lnea no es configurable como entrada analgica Tiene diodo de enclavamiento slo a la tensin mnima (Vss)
ATE-Universidad de Oviedo

12

Puertos de E/S

Si un pin est definido como salida y se ejecuta una instruccin de lectura, se debera leer el estado del pin, que sera el escrito por programa en el biestable D del PORT al estar activada la etapa de salida de los MOS Si un pin est definido como entrada y se ejecuta una operacin de escritura, el bit escrito quedar retenido en el biestable D de salida pero no aparecer en el pin al estar desactivada la etapa de salida de los MOS
Escritura de Bi en pin de salida Escritura de Bi en pin de entrada

Bi

Bi Bi

Bi

1
No hay etapa de salida 13 14

0 1

ATE-Universidad de Oviedo

Puertos de E/S RA0, RA1, RA2, RA3 y RA5 como seales ANALGICAS (I)

Esas lneas estn multiplexadas con las entradas analgicas del conversor A/D La configuracin A/D de cada pin se selecciona en el registro ADCON1 (0x09F)

Configuracin inicial por defecto Tras un RESET, las lneas estn definidas todas como analgicas
ATE-Universidad de Oviedo

Puertos de RA2, E/S RA3 y RA5 como seales ANALGICAS (II) RA0, RA1,

Si la lnea est definida como analgica y se procede a su lectura, el nivel que se leera sera 0 independientemente del nivel real externo que estuviera presente Por tanto, si se va a usar como entrada digital hay que configurarla como tal y no como analgica para poder leer el nivel real Incluso si se va a usar como salida digital el hecho de dejarla con la configuracin analgica por defecto puede causar errores Las operaciones de escritura en uno o varios pines de un puerto son operaciones que se desarrollan en tres pasos: lectura-modificacin-escritura lo que quiere decir que primero se lee el estado del pin, luego se modifica internamente su estado si es necesario y finalmente se escribe en el biestable D de salida
ATE-Universidad de Oviedo

Nivel real

15

Puertos deRA2, E/S RA3 y RA5 como seales ANALGICAS (III) RA0, RA1,

Lectura-modificacin-escritura: Una instruccin del tipo puesta a 1 (BSF) puesta a 0 (BCF) de un nico bit, o instrucciones que operen con el puerto y que sea el destino, se ejecutan en 4 fases: Q1.- Decodificacin de la instruccin Q2.- Lectura de TODO EL PUERTO, las seales que estn configuradas como analgicas se leeran como 0 Q3.- Cambio del bit implicado (si es necesario) Q4.- Escritura de TODO EL PUERTO, los bits que no intervienen en la operacin se escriben con el valor que tenan, debera ser el ledo en la fase Q2 (pero si se leyeron como 0 por ser analgica la seal, puede modificarse el valor previo) Ejemplo: se define PORTA como puerto de salida pero ADCON1 tiene la carga inicial (An.) RA0 movlw B00110101 movwf PORTA 1 0 1 1 Estado tras esas RA5 2 instrucciones 1 1 bsf PORTA,1 RA0 0 1 0

Si la instruccin carga todo

No ha cambiado solo el bit que Q2.- Se lee xx010000 se quera poner Q3.- Se pone a 1 el bit 1 0 a 1, xx010010 1 sino casi todos Q4.- Se escribe el PORTA salvo el 4 xx010010 RA5 0 (no analgica)! el puerto (p.e. movwf PORTA) no hay problema
ATE-Universidad de Oviedo

16

Puertos de E/S REGISTROS ASOCIADOS AL PUERTO A

Si se quiere que todos los pines del PORTA funcionen como entradas/salidas digitales se debe escribir un 011x en los bits PCFG<3:0> de ADCON1 . Otro valor en estos bits har que todos alguno de los pines del puerto A pasen a funcionar como pines del mdulo conversor A/D. El valor de RESET del registro ADCON1 es todo a 0, por lo que por defecto, tras un reset el puerto est configurado como entradas analgicas. Todas las operaciones de escritura sobre el PORTA son operaciones de lectura-modificacin-escritura. ;Ejemplo de inicializacin del PORTA BCF STATUS, RP0 ; BCF STATUS, RP1 ; Banco 0 CLRF PORTA ; Inicializo PORTA poniendo los latches a 0 BSF STATUS, RP0 ; Banco 1 MOVLW 0x06 ; Configuro todos los pines MOVWF ADCON1 ; como entradas digitales MOVLW 0xCF MOVWF TRISA ; RA<3:0> son entradas ; RA<5:4> son salidas ; TRISA<7:6> no existen y se leen siempre como 0 ATE-Universidad de Oviedo

17

Puertos de E/S

PORTB Es un puerto de 8 lneas bidireccionales y configurables mediante el registro de direccin de datos TRISB En todas las lneas del PORTB, se tiene la posibilidad de activar unas resistencias de polarizacin (pull-up resistors) si los pines estn definidos como entradas y adems el bit OPTION_REG<7>= RBPU=0 En cuanto pasan a ser salidas se desactivan las resistencias El uso de esas resistencias evita la conexin de otras externas.Las resistencias son en realidad transistores pMOS trabajando en su zona de comportamiento resistivo (20k aprox.)
ATE-Universidad de Oviedo

Etapa de salida

18

Puertos de E/S

PORTB: resistencias de polarizacin Para que las resistencias de polarizacin (pMOS) se activen se deben dar dos condiciones: 1.- Que el bit RBPU=0 en OPTION_REG 2.- Que la lnea sea de entrada (TRISB<i>=1) En ese caso, la salida de la puerta NAND que controla el pMOS presenta un cero y el transistor se sita en zona resistiva El micro est hecho con tecnologa CMOS, luego las entradas no pueden quedar al aire ya que el nivel lgico estara indefinido, algn tipo de polarizacin hay que poner, mediante resistencias que si no son las internas, deberan ser externas (ejemplo conexin pulsador)
ATE-Universidad de Oviedo

Etapa de salida desactivada

0 0

19

Puertos de E/S

PORTB: etapa de salida Equivalencia del buffer triestado con la etapa de salida complementaria
Vdd

PORTB<i>

TRISB<i>

ATE-Universidad de Oviedo

20

Puertos de E/S

PORTB

Detalle de RB0, RB1, RB2 y RB3


Biestable D para escritura en PORTB

Las lneas RB0 a RB3 se diferencian en algunos aspectos de las lneas RB4 a RB7 Particularidades:
RB0/INT puede generar una interrupcin ante la aparicin de un flanco (configurable de subida o de bajada con OPTION_REG<6>) RB3 se puede emplear como entrada de tensin en la programacin a baja tensin (LVP) Biestable D para escritura en TRISB

Biestable Latch para lectura del PORTB


ATE-Universidad de Oviedo

21

Puertos de E/S

Detalle de RB4, RB5, RB6 y RB7

PORTB Las lneas RB6 y RB7 son utilizadas para la programacin del microcontrolador y para comunicacin cuando el micro trabaja en modo depuracin (debugger) Cuando trabajemos con el ICD2 como debugger, no ser posible utilizar esas dos lneas (vanse Caractersticas Especiales de los micros: In-Circuit Debugger -ICD- as como In-Circuit Serial Programming -ICSP-)

ATE-Universidad de Oviedo

22

Puertos de E/S

PORTB

Detalle de RB4, RB5, RB6 y RB7

Las lneas RB4 a RB7 pueden generar una interrupcin si estn definidas como entradas y se detecta cambio entre el estado actual del pin y el de la ltima lectura del puerto
Biestable latch que almacena estado de ese pin en la fase Q1 de cada instruccin El pin debe ser de entrada Si se produce cambio en cualquiera de las entradas: RBIF=1 La puerta EXOR compara las salidas de los dos latch Latch que almacena estado del pin en la fase Q3 de la ltima lectura del PUERTO
ATE-Universidad de Oviedo

23

Puertos de E/S

Un ejemplo de instrucciones de Lectura-modificacin-escritura con el PORTB:


Debe tenerse cuidado con los pines que en determinados momentos son entradas y en otros salida o viceversa con instrucciones que sean del tipo READ-MODIFY-WRITE como por ejemplo con las instrucciones BCF BSF XORWF. En el ejemplo que se muestra a continuacin el usuario primero carga y luego define como salidas las lneas 6 y 7 del PORTB, esperara tener al final los pines 7 y 6 del PORTB como salidas con un valor 0 en ellas. Sin embargo, se encuentra con que el bit 6 s tiene un 0, pero el bit 7 tiene un 1
; Seleccin inicial del puerto: PORTB<7:4> Entradas ; PORTB<3:0> Salidas ; PORTB<7:4> tiene las resistencias de pull-up activas y no estn conectadas a otro circuito ; ; PORT latch PORT pins ; ---------- --------BCF PORTB, 7 ; 01pp pppp 11pp pppp BCF PORTB, 6 ; 10pp pppp 11pp pppp lee 1 en RB7 por ser entrada y tener resistencias activadas BSF STATUS, RP0 ; pasa al banco 1 para definir como salidas RB6 y RB7 BCF TRISB, 7 ; 10pp pppp 11pp pppp BCF TRISB, 6 ; 10pp pppp 10pp pppp ; ; El usuario esperaba un valor 00pp pppp en el PORTB. ; Pero el 2 BCF hace que RB7 se latchee en la salida como un 1 y al pasar este pin a ser salida ; el uno aparece en RB7.

ATE-Universidad de Oviedo

24

Puertos de E/S FUNCION DE LOS PINES

REGISTROS ASOCIADOS AL PUERTO B

ATE-Universidad de Oviedo

25

Puertos de E/S

PORTC

Detalle de RC0, RC1, RC2, RC5, RC6 y RC7


Mpxor. de salida desde perifrico o PORTC

Puerto de 8 lneas bidireccionales Los pines estn multiplexados con varias funciones de perifricos y como entradas disponen de buffers Schmitt-Trigger Se dispone de un registro de direccin de datos TRISC para definir si el pin es de entrada o de salida, pero algunos perifricos definen las lneas como entradas o como salidas de manera independiente al estado de TRISC si hay definida una determinada funcionalidad para el pin

ATE-Universidad de Oviedo

26

Puertos de E/S

PORTC

Detalle de RC3 y RC4

En RC3 y RC4 se aade un multiplexor de entrada para seleccin de nivel de tensin del bus I2C normal bien SMBUS Esta opcin estar disponible en el caso de que est activo el mdulo SSP en modo I2C

Multiplexor para seleccin de niveles I2C SMBUS

ATE-Universidad de Oviedo

27

Puertos de E/S FUNCION DE LOS PINES

REGISTROS ASOCIADOS AL PUERTO C

ATE-Universidad de Oviedo

28

Puertos de E/S

PORTD Puerto de 8 lneas bidireccionales Las entradas disponen de buffers Schmitt-Trigger Presenta bloques comunes a todos los puertos anteriores

Biestable D para escritura en PORTD

Etapa de Salida

Biestable D para escritura en TRISD

El PORTD se puede configurar como un puerto esclavo paralelo (PSP), controlable mediante las lneas del PORTE .

Biestable Latch para lectura del PORTD


ATE-Universidad de Oviedo

29

Puertos de E/S FUNCION DE LOS PINES

REGISTROS ASOCIADOS AL PUERTO D

ATE-Universidad de Oviedo

30

Buffer ST de entrada

Puertos de E/S

PORTE

Detalle de RE0, RE1 y RE2 con configuracin digital

Puerto bidireccional de 3 pines Las lneas estn multiplexadas : a) Con las seales de control del puerto esclavo paralelo PSP del PORTD b) Con 3 de las entradas analgicas del mdulo de conversin A/D RE0=AN5 Canal analgico 5 RE1=AN6 Canal analgico 6 RE2=AN7 Canal analgico 7

ATE-Universidad de Oviedo

31

Puertos de E/S

RE0, RE1 y RE2 como seales ANALGICAS


Todo lo dicho en su momento para las lneas analgicas del PORTA es aplicable tambin en estas lneas del PORTE ADCON1 Si la lnea se deja como analgica y se lee su estado lgico, se leera un 0 Si la lnea se utiliza como pin de salida pero se mantiene en modo analgico, las operaciones de escritura de un bit nico (BSF BCF) hacen que el resto de las lneas se lean como 0 y salen siempre con ese valor: operacin de lectura-modificacin-escritura
ATE-Universidad de Oviedo

Configuracin inicial por defecto

32

Puertos de E/S FUNCION DE LOS PINES

REGISTROS ASOCIADOS AL PUERTO E

ATE-Universidad de Oviedo

33

Puertos de E/S

PORTD como puerto esclavo paralelo (PSP) junto con PORTE Las lneas de control seran las 3 del PORTE CS: RD: WR: Chip Select (RE2) Lectura (RE0) Escritura (RE1)

El acceso externo al PSP puede generar una interrupcin (PSPIF) El registro TRISD no tiene efecto sobre el sentido de las seales del PORTD, se gobiernan desde las lneas del PORTE que son incondicionalmente de entrada (tampoco influye la direccin que tengan asignadas stas en el TRISE)
ATE-Universidad de Oviedo

PORTE
RE0 RE2 RE1

34

Puertos de E/S

PORTD como PSP conjuntamente con PORTE

Se podra conectar de este modo a los buses de un sistema microprocesador, actuando el microcontrolador como dispositivo seleccionable por el propio microprocesador como una memoria o un perifrico ms.
Decodificador de Direcciones (segn mapa de memoria)

Microcontrolador PIC PORTE


CS RD WR

PORTD

Microprocesador X

Bus de Datos del Sistema Microprocesador (8 lneas)

Bus de Direcciones

ATE-Universidad de Oviedo

35

Puertos de E/S

PORTD como PSP Dx


0

Escritura en PSP:
Se selecciona el integrado (CS=0) y se activa desde el microprocesador la seal de escritura (WR=0) El bit Dx puesto en el pin externo entra y queda retenido a la salida del biestable D de entrada a la espera de que el microcontrolador ejecute una lectura del puerto El flag PSPIF se pone a 1 para advertir de que ha habido un acceso externo, el flag IBF (en TRISE) se pone a 1 y advierte de la presencia de un dato a la espera El microcontrolador puede ejecutar una lectura del PORTD y recoger el dato
36

Dx
1

PSPIF=1 IBF=1
Si llega un 2 dato antes de haberse recogido el 1, se produce un desbordamiento e IBOV=1 (indicador de overflow en TRISE)

PORTE
1 0 0

ATE-Universidad de Oviedo

Puertos de E/S CRONOGRAMA DE ESCRITURA DEL PUERTO ESCLAVO PARALELO

Una escritura al PSP se produce cuando las lneas CS y WR se ponen a la vez en nivel bajo. Una vez que el dispositivo externo considera finalizada la escritura, coloca a nivel alto alguna de esas 2 lneas. Este paso a nivel alto es detectado por el microcontrolador durante el ciclo Q2 de algn ciclo de instruccin que se est ejecutando. El flag de Buffer de entrada completo (IBF) se coloca a 1 en el ciclo Q4 de la instruccin. El flag de interrupcin PSIPF (PIR1<7>) tambin se pone a 1 pudiendo ocasionar un salto a la rutina de interrupcin si los bits PSPIE (PIE1<7>) y los bits GIE y PEIE del INTCON estn a 1. El flag IBF solo puede limpiarse si se lee el PORTD. El flag de overflow en el buffer de entrada IBOV (TRISE<5>) se pondr a 1 si el dispositivo externo intenta hacer una segunda escritura sin que el ncleo del microcontrolador haya ledo el PORTD.
ATE-Universidad de Oviedo

37

Puertos de E/S

PORTD como PSP Dx Dx Dx Lectura externa del PSP:


El dato debe haber sido escrito en el PORTD para que est listo. El flag OBF que est en TRISE se pone a 1 Se seleccionar el integrado (CS=0) y se activar desde el microprocesador la seal de lectura (RD=0). El acceso se puede detectar por interrupcin mediante el flag PSPIF=1

PSPIF=1 OBF=1

PORTE
0 0 1

El bit Dx almacenado en el biestable de salida pasa a estar disponible en el pin externo para que sea recogido por el microprocesador. Se sabe que el dato ya ha salido fuera porque el flag OBF=0

ATE-Universidad de Oviedo

38

Puertos de E/S CRONOGRAMA DE LECTURA DEL PUERTO ESCLAVO PARALELO

El flag que indica buffer de salida lleno OBF (TRISE<6>) se pone a 1 cuando el microcontrolador ejecuta una operacin de escritura en el PORTD, el dato queda a la espera de ser ledo desde el bus externo. El programa del microcontrolador colocar as en el PORTD el dato del que quiere informar al resto del sistema. Una lectura del PSP se realiza cuando el sistema externo pone a la vez las seales CS y RD a nivel bajo. Cuando el sistema externo pone la seal CS la RD a nivel alto, el microcontrolador detecta ese cambio en la fase Q2 de la siguiente instruccin y en el ciclo Q4 pone a 1 el flag de interrupcin PSPIF indicando que la lectura del dato por parte del dispositivo externo se ha completado, ya ha sido recogido. Cuando no estamos en modo PSP, los bits IBF y OBF permanecen a 0. No obstante, si el bit IBOV haba sido previamente puesto a 1, debe limpiarse en el programa. Como hemos visto, el flag PSPIF se pone a 1 cuando se ha completado una lectura o escritura, este flag debe limpiarse por parte del programa de usuario. La interrupcin puede deshabilitarse si se pone a 0 el bit de habilitacin PSPIE (PIE<7>).
ATE-Universidad de Oviedo

39

Puertos de E/S

Registro TRISE:

Indicadores lectura/escritura PSP Activacin modo PSP

Direccin de pines en modo normal E/S

ATE-Universidad de Oviedo

40

Puertos de E/S EJEMPLO DE USO DEL PSP Se tiene un microcontrolador PIC16F877 conectado a un dispositivo externo (microprocesador) que puede leer o escribir datos en el PIC a travs del PORTD utilizando las lneas del PORTE como lneas de control. Qu se hace con Las escrituras externas: los datos que entran en el PORTD se sacan por el PORTB. Lecturas desde el microprocesador: el microcontrolador va colocando en el PORTD un contador que se va incrementando despus de cada acceso de lectura externa. Tanto la lectura como la escritura externa se detectan por interrupcin y pueden producirse en cualquier instante PIC16F877 PIC16F877

PORTD

Microprocesador

PORTD

Count

PORTE

RD WR

PORTE

CS

PORTB

0 1 0

CS RD WR

0 0 1

Escritura externa en el PORTD

Lectura externa del PORTD


41

ATE-Universidad de Oviedo

Puertos de E/S EJEMPLO DE USO DEL PSP: gestin de entrada y salida en el programa

Doble buffer de entrada:

PORTB INDATA PORTD

Flag: INFULL en FLAGREG (R/W), se pone a 1 en PTI si hay dato y se comprueba en el progr. ppal. se pone a 0 por software en el prog.ppal. Flag: IBF en TRISE (slo lectura) a 1 si dato disponible, se comprueba en PTI y se pone a cero tras la lectura hardware

Doble buffer de salida: Flag: OUTRDY en FLAGREG (R/W), se pone a 1 en el programa principal si hay dato disponible en OUTDATA, se comprueba en PTI y se pone a 0 por software tambin en PTI Flag: OBF en TRISE (slo lectura) a 1 si dato disponible, se comprueba en PTI y se pone a cero tras lectura desde el exterior
ATE-Universidad de Oviedo

OUTDATA PORTD Micropr.

Microprocesador
42

Puertos de E/S VARIABLES DEL EJEMPLO DE USO DEL PSP INDATA: Registro usado como buffer de entrada donde se recoge el dato enviado por el dispositivo externo al PORTD del microcontrolador. En la rutina principal se copia ese valor en el PORTB. OUTDATA: Registro usado como buffer de salida, en l est preparado el dato que se copia al PORTD cada vez que el perifrico externo realiza una lectura del microcontrolador. COUNT: Variable contador que se incrementa con cada lectura externa. El valor de esa posicin es lo que se carga en OUTDATA y por tanto lo que se suministra al exterior. FLAGREG : es un registro que almacena los flags indicadores de lectura y escritura Bit FLAGREG,OUTRDY (Bit 1): Si es 1 indica que hay un dato preparado en buffer de salida OUTDATA para cargar en el PORTD. Si es 0, el dato ya ha sido cargado en PORTD y OUTDATA espera por uno nuevo. Bit FLAGREG, INFULL (Bit 2): Si es 1, indica que se ha recibido un dato nuevo y ya est en buffer INDATA. Si es 0, indica que INDATA est vacio, el ltimo dato recibido ya est en PORTB. Bit FLAGREG, err (Bit 0): Si es 1, indica que hubo un OVERFLOW en el buffer de entrada, se recibi un 2 dato antes de haber ledo el primero.
ATE-Universidad de Oviedo

43

Puertos de E/S FLUJOGRAMA DEL EJEMPLO DE USO DEL PSP: Programa principal

Loop:
Se ha recibido algn dato por el PSP flag INFULL a 1?

NO

PROGRAMA PRINCIPAL Limpia variables Configura PORTE Configura PORTB como salida Coloca el primer dato de salida en el PORTD Habilita interrupciones PSP

Se coge el dato ( de INDATA), se saca por el PORTB y se limpia el flag INFULL

SI

Se ha leido algn dato desde el exterior flag OUTRDY a 0?

Se incrementa contador, se carga en OUTDATA y se pone a 1 el flag OUTRDY

SI

ATE-Universidad de Oviedo

44

Puertos de E/S FLUJOGRAMA DEL EJEMPLO DE USO DEL PSP: rutina de interrupcin
RUTINA INTERRUPCION
Hay algn dato nuevo preparado en OUTDATA para una siguiente lectura flag OUTRDY a 1?

flag PSPIF a 1?

NO

NO

SI
Se ha recibido algn dato por el PSP flag IBF a 1?

SI NO
OUTDATA en PORTD, donde queda a la espera de una lectura externa, se pone OUTRDY a 0

SI
Pone el flag INFULL a 1, coge el dato del PORTD y se guarda en INDATA

Intout:
Hay OVEFLOW en el buffer de entrada flag IBOV a 1?

Notinput:
Se ha leido algn dato del PSP desde el exterior flag OBF a 0?

NO

Interror:

SI

Pone FLAGREG,err a 1 Retorno de interrupcion

SI

ATE-Universidad de Oviedo

45

Puertos de E/S

Cdigo fuente del ejemplo


clrf movf movwf clrf movlw movwf Loop btfss goto bcf movf movwf btfsc goto incf movf movwf bsf goto COUNT COUNT,W PORTD FLAGREG b'11000000' INTCON ;Ponemos a cero el contador de valores ;y colocamos el dato de salida en el PORTD ;Ponemos a cero los flags ;Set GIE, PEIE (habilita interrupciones)

;************************************************************************* ;* Este programa sirve como demostracin del funcionamiento del Puerto Esclavo ;* paralelo en un PIC16F877. El programa est basado en una rutina de interrupcin ;* que se ejecuta cada vez que el PIC trata de ser ledo o escrito por el sistema ;* externo a l. ;* Si la interrupcin se origina por una lectura, un registro se incrementa ;* y el nuevo valor del contador se coloca en la cola de mensajes de salida. ;* Si la interrupcin es originada por una escritura, el dato escrito es sacado ;* por el PORTB. ;* Traducido por Francisco Fernndez Linera ;* Ver nota de aplicacin 579 de microchip. ;;************************************************************************** list p=16f877 ; include "p16f877.inc" ;Definicin de registros FLAGREG equ OUTDATA equ INDATA equ COUNT equ

FLAGREG,INFULL ;Chequea si se ha recibido dato de entrada Checkout ;Si no, chequea salida FLAGREG,INFULL ;Limpia flag de dato de entrada preparado INDATA,W ;Coge el dato de entrada PORTB ;Lo saca por el PORTB FLAGREG,OUTRDY ;Chequea si dato de salida preparado Loop ;Si no, vuelve al bucle Loop COUNT, F ;Incrementa contador de dato de salida COUNT,W ;Coge el contador OUTDATA ;y lo pone en la cola de salida FLAGREG,OUTRDY ;Pone el flag de dato de salida preparado ;a 1 Loop

Checkout

20h 21h 22h 23h

;registro de flags ;dato de salida ;dato de entrada ;Contador para las lecturas ;del registro de salida ;flag de error ;flag de dato preparado ;en salida ;flag de dato de entrada ;recibido ;Vector de reset

;Definicin de bits para el registro de flags err equ 00h OUTRDY equ 01h INFULL equ 02h

org goto org goto Start clrf clrf bsf movlw movwf clrf movlw movwf bcf

0000h Start 0004h Service_Int OUTDATA INDATA STATUS,RP0 b'00010111' TRISE TRISB b'10000000' PIE1 STATUS,RP0

;Vector de interrupcin

;Limpia registros de datos ;Banco 1 ;Set RD, WR, y CS como ;entradas, puerto esclavo ;paralelo habilitado ;PORTB como salidas ; ;Habilita interrupcin del PSP ;Banco 0

;******************************************************************************** ;*Rutina de interrupcin ;* Entradas:FLAGREG - Registro de flags para/desde la rutina principal: ;* Bit 1: OUTRDY - Indica a la rutina de interrupcin ;* que el dato est preparado en la ;* cola de salida. ;* OUTDATA - dato de la cola de salida ;* PIR1 - Registro del flag de interrupcin ;* TRISE - Registro de flags del Puerto Esclavo ;* Paralelo (PSP) ;* PORTD - Dato de entrada desde el puerto esclavo ;* ;* Salidas: ;* PORTD - Dato de salida para el puerto esclavo ;* INDATA - Cola de datos de entrada ;* FLAGREG - Registro de flags para/desde la rutina ;* principal: ;* Bit 0: ERROR Desde la rutina de interrupcion, ;* indica overflow en el buffer de entrada. ;* Bit 2: INFULL Desde la rutina de interrupcin, ;* indica dato recibido almacenado en ;* INDATA. ;*********************************************************************************

ATE-Universidad de Oviedo

sigue>

46

Puertos de E/S
Service_Int btfss goto bcf bsf btfss goto bcf bsf movf movwf btfsc goto bcf btfss goto movf movwf bcf bsf btfsc goto bcf retfie bcf bsf retfie end PIR1,PSPIF Intout PIR1,PSPIF STATUS,RP0 TRISE,IBF Notinput STATUS,RP0 FLAGREG,INFULL PORTD,W INDATA TRISE,OBF Intout STATUS,RP0 FLAGREG,OUTRDY Intout OUTDATA,W PORTD FLAGREG,OUTRDY STATUS,RP0 TRISE,IBOV Interror STATUS,RP0 ;Miro si hay interrupciones en el PSP ;No hay, salgo ;Limpio flag del PSP ;Paso al banco 1 ;Chequeo si dato de entrada preparado ;Si no hay entrada, chequeo salida ;Entrada preparada, Banco 0 ;Pongo a 1 el flag para la rutina principal ;Cojo el dato de entrada ;Pongo el byte en el buffer de entrada ;Chequeo si dato de salida preparado ;No preparado, me salgo ;Paso al banco 0 ;Chequeo si hay dato en cola de salida. ;salida no preparada, me salgo ;Cojo dato de la cola de salida ;Ponemos dato en el buffer de salida del PORTD ;Limpio flag para la rutina principal ;Banco 1 ;Chequeo flag de overflow en el buffer de entrada ;si no esta a 0, error ;Banco 0 ;Rehabilito GIE y retorno ;Banco 0 ;Pongo a 1 el flag de error para la rutina principal ;Rehabilito GIE y retorno

Programa de tratamiento de Interrupcin

Notinput

Intout

Interror

STATUS,RP0 FLAGREG,err

ATE-Universidad de Oviedo

47

You might also like