You are on page 1of 10

Comunidad MikroPic

Microcontroladores PIC => Programacin en Basic. => Mensaje iniciado por: Yoshua en Septiembre 03, 2009, 02:06:28

Ttulo: Expansores de puertos para pic. Publicado por: Yoshua en Septiembre 03, 2009, 02:06:28 Buenas a todos, aca les muestro un circuito que permite agregar un puerto de entrada y uno de salida a un pic usando solo 4 pines.

(http://img208.imageshack.us/img208/3452/circuitoowe.th.jpg ) (http://img208.imageshack.us/i/circuitoowe.jpg/) Los Integrados son 74165 para el puerto de entrada y 74595 para el puerto de salida y manejan 8 bits cada uno. Se usaron estos porque pueden conectarse en cascada y asi se puede leer y escribir varios datos con la misma cantidad de pines usados por el pic. Pero no todo es color de rosas, este metodo consume bastantes instrucciones en comparacion con otros metodos, por lo cual no puede usarse en circuitos donde sea primordial la velocidad de los datos, podrian ser usados para lecturas de teclado, sealizacion con leds, control ON/OFF y dispositivos en que no sea critica la velocidad.

En el programa se lee los datos que tiene el 74165 en sus entradas paralelas y se envian al 74595.
Cdigo: [Seleccionar]

'En este programa se muestra la utilizacion de los CI 74165 y 74595 para agregar 'pines extra de entrada y salida. Se lee el dato presente en el CI 74165 y se 'envia al CI 74595. 'Made by: Yoshua

program programa '-----------------------------------------------------------------------------symbol clock = porta.0 'Defino "clock" como simbolo para el bit 0 del port A symbol dataout = porta.1 'Defino "dataout" como simbolo para el bit 1 del port A symbol enable = porta.2 'Defino "enable" como simbolo para el bit 2 del port A symbol datain = porta.3 'Defino "datain" como simbolo para el bit 3 del port A

dim i,entrada,salida as byte '=============================================================== ================ ' En esta sub rutina se envia el byte "salida" al IC 74595 sub procedure Salida_Aux(dim salida as byte) for i=7 to 0 step -1 forma descendente clock=0 dataout=salida.i byte salida que seale clock=1 next i ' Inicio del bucle FOR-NEXT contando en ' Pongo a 0 la seal de reloj ' Envio a dataout el valor del bit del la variable i ' Pongo a 1 la seal de reloj ' Fin del bucle FOR-NEXT

enable=1 ' Al poner en 1 la seal enable se habilita al 74595 para

enable=0 no muestra los el ultimo dato

' que muestre los datos que almacena ' Al poner en 0 la seal enable el 74595 ' datos que almacena y queda visualizado ' que se mostro

end sub

' Fin de la rutina

'-----------------------------------------------------------------------------'En esta sub rutina se lee el byte presente en la entrada del IC 74165. Para 'usar la menor cantidad de pines posible se usan pines en comun con la anterior 'sub rutina sub procedure Entrada_aux ' Con estas instrucciones se resetea el contador interno del 74165. clock=0 dataout=1 dataout=0 dataout=1 for i=7 to 0 step -1 forma descendente entrada.i=datain del pin datain clock=1 clock=0 next i end sub ' Inicio del bucle FOR-NEXT contando en ' Paso al bit i del byte entrada el valor ' Hago un pulso de reloj ' Fin del bucle FOR-NEXT ' Fin de la rutina

'=============================================================== ================ ' Inicio del programa main: porta=0 trisa=%11000 resto entrada dataout=1 inicio: ' Pongo en 0 los pines del puerto A ' Los pines RA0,RA1,RA2 son salida y el ' Pongo en 1 el pin dataout ' Etiquieta inicio

Entrada_aux (leo el dato en

' Llamada a la sub rutina Entrada_Aux 'el puerto auxiliar de entrada. IC74165) ' El dato de salida se almacena en el

byte entrada salida_aux(entrada) (Envio el byte 74595) goto inicio indefinidamente) 'Ir a la etiqueta inicio (Repite ' Llamada a la sub rutina Salida_aux 'entrada al puerto auxiliar de salida.IC

end.

' FIN DEL PROGRAMA

Es este ejemplo se conectan en cascada dos 74165 y dos 74595 para permitir leer y escribir 16 bits usando los mismos pines del pic.

(http://img186.imageshack.us/img186/5913/circuito2.th.jpg) (http://img186.imageshack.us/i/circuito2.jpg/) El programa:


Cdigo: [Seleccionar] ' En este programa se muestra la utilizacion de los CI 74165 y 74595 conectados 'en cascada para agregar pines extra de entrada y salida. Se lee el dato 'presente en los IC 74165 y se envia a los IC 74595. 'Made by: Yoshua

program programa2 '-----------------------------------------------------------------------------symbol clock = porta.0 'Defino "clock" como simbolo para el bit 0 del port A symbol dataout = porta.1 'Defino "dataout" como simbolo para el bit 1 del port A symbol enable = porta.2 'Defino "enable" como simbolo para el bit 2 del port A symbol datain = porta.3 'Defino "datain" como simbolo para el bit 3 del port A dim i, entrada_a, entrada_b, salida_a,salida_b as byte '=============================================================== ================ ' En esta sub rutina se envia los bytes salida_a y salida_b a los IC 74595. sub procedure Salida_Aux(dim salida_a as byte,dim salida_b as byte) for i=7 to 0 step -1 ' Inicio del bucle FOR-NEXT contando en forma descendente clock=0 ' Pongo a 0 la seal de reloj dataout=salida_a.i ' Envio a dataout el valor del bit del byte salida_a que ' seale la variable i clock=1 ' Pongo a 1 la seal de reloj next i ' Fin del bucle FOR-NEXT for i=7 to 0 step -1 ' Inicio del bucle FOR-NEXT contando en forma descendente clock=0 ' Pongo a 0 la seal de reloj dataout=salida_b.i ' Envio a dataout el valor del bit del byte salida_b que ' seale la variable i clock=1 ' Pongo a 1 la seal de reloj next i ' Fin del bucle FOR-NEXT enable=1 ' habilita al 74595 para ' enable=0 ' no muestra los ' el ultimo dato Al poner en 1 la seal enable se que muestre los datos que almacena Al poner en 0 la seal enable el 74595 datos que almacena y queda visualizado

' que se mostro end sub ' Fin de la rutina

'-----------------------------------------------------------------------------'En esta sub rutina se leen los bytes presentes en las entradas de los IC 74165. 'Para usar la menor cantidad de pines posible se usan pines en comun con la 'anterior sub rutina sub procedure Entrada_aux ' Con estas instrucciones se resetea el contador interno del 74165. clock=0 dataout=1 dataout=0 dataout=1 for i=7 to 0 step -1 forma descendente entrada_a.i=datain valor del pin datain clock=1 clock=0 next i for i=7 to 0 step -1 forma descendente entrada_b.i=datain valor del pin datain clock=1 clock=0 next i end sub ' Inicio del bucle FOR-NEXT contando en ' Paso al bit i del byte entrada_a el ' Hago un pulso de reloj ' Fin del bucle FOR-NEXT ' Inicio del bucle FOR-NEXT contando en ' Paso al bit i del byte entrada_b el ' Hago un pulso de reloj ' Fin del bucle FOR-NEXT ' Fin de la rutina

'=============================================================== ================ ' Inicio del programa main: porta=0 trisa=%11000 resto entrada ' Pongo en 0 los pines del puerto A ' Los pines RA0,RA1,RA2 son salida y el

dataout=1 inicio: Entrada_aux (leo el dato en

' Pongo en 1 el pin dataout ' Etiquieta inicio ' Llamada a la sub rutina Entrada_Aux ' el puerto auxiliar de entrada. IC74165) ' El dato de salida se almacena en los

bytes entrada_a ' y entrada_b. salida_aux(entrada_a,entrada_b) ' Llamada a la sub rutina Salida_aux (Envio los 'bytes entrada_a y entrada_b a los puertos auxiliares 'de salida.IC 74595) goto inicio indefinidamente) 'Ir a la etiqueta inicio (Repite

end.

' FIN DEL PROGRAMA

Otro metodo para agregar otros puertos es utilizar el 74373, lo malo en este caso es que necesitamos un puerto entero para poder hacer el intercambio de datos, pero a favor tenemos que solo con tres instrucciones podemos enviar el dato al integrado o recibirlo.

(http://img35.imageshack.us/img35/6103/esquemaw.th.jpg) (http://img35.imageshack.us/i/esquemaw.jpg/)
Cdigo: [Seleccionar] ' En este programa se muestra la utilizacion de los CI 74373 como puertos 'auxiliares de entrada y de salida. U3 y U5 son entradas y U2,U4 son salidas. 'Made by: Yoshua program esquema Dim Entrada_U3, Entrada_U5 as byte Dim Salida_U2, Salida_U4 as byte '----------------------------------------------------------------------------Sub procedure Leo_U3 datos en U3 ' Inicio del procedimiento que lee los

trisb=$FF porta.0=0 (pasa los datos Entrada_U3=portb valor del puerto B. porta.0=1 end sub Sub procedure Leo_U5 datos en U5 trisb=$FF porta.1=0 (pasa los datos Entrada_U5=portb valor del puerto B. porta.1=1 end sub

' Configuro como entrada el puerto B ' Deshabilito la alta impedancia de U3 ' de entrada al puerto B). ' Paso a la variable Entrada_U3 el ' Habilito la alta impedancia de U3. ' Fin del procedimiento ' Inicio del procedimiento que lee los ' Configuro como entrada el puerto B ' Deshabilito la alta impedancia de U5 ' de entrada al puerto B). ' Paso a la variable Entrada_U5 el ' Habilito la alta impedancia de U5. ' Fin del procedimiento

Sub procedure Envio_U2 los datos a U2 trisb=$00 portb=Salida_U2 variable Salida_U2 porta.2=1 el dato en U2 porta.2=0 end sub Sub procedure Envio_U4 los datos a U2 trisb=$00 portb=Salida_U4 variable Salida_U2 porta.3=1 el dato en U4 porta.3=0 end sub

' Inicio del procedimiento que envia ' Configuro como salida el puerto B ' Paso al puerto B, el valor de la ' Hago un pulso de reloj para memorizar

' Inicio del procedimiento que envia ' Configuro como salida el puerto B ' Paso al puerto B, el valor de la ' Hago un pulso de reloj para memorizar

'=============================================================== ================ main: porta=%00011 trisa=0

' Puerto A como salida

inicio: Leo_U3 de U3 Salida_U4 = Entrada_U3 Entrada_U3 Envio_U4 Salida_U4 a U4 Leo_U5 de U5 Salida_U2 = Entrada_U5 Entrada_U2 Envio_U2 Salida_U2 a U2 goto inicio indefinidamente)

' Etiquieta inicio 'Llamada a la rutina que lee el valor

'Paso a Salida_U4 el valor del byte

'Llamada a la rutina que envia el byte

'Llamada a la rutina que lee el valor

'Paso a Salida_U5 el valor del byte

'Llamada a la rutina que envia el byte

'Ir a la etiqueta inicio (Repite

end.

' FIN DEL PROGRAMA

Aca estan los archivos de simulacion en el proteus y el codigo en mikrobasic; espero que les sea de mucha utilidad...
Powered by SMF 2.0 RC3 | SMF 20062009, Simple Machines LLC

You might also like