Hola a Todos:
Bueno, borré el mensaje anterior por no poder adjuntar el .zip.
Este proyecto pienso que es muy interesante.
Recibe 8 entradas Paralelas y las envía a un PIC
por comunicación Serial(no RS232) desde un 74165 (Paralelo a Serial Chip).
Una parte del código no es mio, lo adapte a Isis para ver si funcionaba.
Y trabajó perfecto despues de rabias y frustraciones.
Amigos no puedo adjuntar archivos. Lo lamento.
Les dejo el .ASM que funciona, bueno a mi me funciona.
;**********************************************************************************************
;Thomas McGahee email:tom_macgahee@sigmais.com (06-18-1998) <--Autor
;Modificado por: IAO.
;==============================================================================================
;PIC PORT REQUIREMENTS FOR PARALLEL to SERIAL INPUT PORT
;
;Two outputs, one input. (PS_IN stands for Parallel to Serial INput device)
;Outputs: PS_IN_CLOCK and PS_IN_SHIFT_NOT_LOAD (I like descriptive names).
;Input: PS_IN_SDATA
;
;SAMPLE ROUTINE TO READ 8 BITS FROM PARALLEL TO SERIAL PORT
;Assume 74165 chip used, and allow port sharing on both outputs.
;Assume Clock Inhibit is tied LOW.
;==============================================================================================
;
;=====DIRECTIVAS DEL PROGRAMA.======================================================
LIST P=16F84 ;micro PIC16f84
RADIX HEX ;
include "P16F84.INC" ; Include header file
__config _XT_OSC&_WDT_OFF&_PWRTE_ON&_CP_OFF
;Igualdades
PS_CTR EQU 0x10 ;Parallel to Serial INput CouNTer, used to keep track of current bit , use any SRAM location desired. Sample 0x10
; *** This register can be shared with other *** routines. Local Variable.
PS_REG EQU 0x11 ;Storage for 8 bit serial input data , use any SRAM location desired. Sample 0x11
PS_CLOCK EQU 0x00 ;Assign to PORTA0, bit 1 (OUTPUT)
PS_SHIFT_NOT_LOAD EQU 0x01 ;Assign to PORTA1, bit 2 (OUTPUT)
PS_DATA EQU 0x02 ;Assign to PORTA2, bit 4 (INPUT)
;********************VECTOR DE RESET****************************************
ORG 0X00 ;Dirección del vector de reset.
GOTO inicio ;El programa comienza luego del vector de reset.
ORG 5
;
;Assume user has set up PIC, including PORTA I/O direction for each bit
PS_IN: ;Entry Label for Parallel to Serial INput
MOVLW D'8' ;8 bits to be read
MOVWF PS_CTR ;Save count
BCF PORTA,PS_CLOCK ;Ensure that clock is low (may be shared)
BCF PORTA,PS_SHIFT_NOT_LOAD ;That LOW latched the data for sure
BSF PORTA,PS_SHIFT_NOT_LOAD ;Now we keep it high so data doesn't change
;Lectura del dato serial transmitido por el 74165. Recibido por PORTA2 del PIC.
PS_LOOP:
BTFSS PORTA,PS_DATA ;Read serial data from port one bit at a time
GOTO GOT_ZERO
BSF STATUS,C ;Load a 1 into carry if bit was a 1
GOTO SHIFT_IN
GOT_ZERO:
BCF STATUS,C ;Load a 0 into carry if bit was a 0
SHIFT_IN:
RLF PS_REG,F ;Assemble bit into Left-shifting byte ??????-->RRC
BSF PORTA,PS_CLOCK ;Shift the data in the 74165 to get ready
;to possibly read the NEXT bit...
BCF PORTA,PS_CLOCK ;Terminate the Clock pulse!
DECFSZ PS_CTR,F ;Update our counter
GOTO PS_LOOP ;If not done, do next bit
RETURN ;Return with data in PS_IN_REG
;********************INICIALIZACIÓN******************************************
inicio BSF STATUS,RP0 ;Seleccion de la página 1 o Banco 1 de la memoria de datos,
;colocando un 1, sobre el bit RPO. Porque el registro trisb, ;esta en la pagina 1.
CLRF PORTB ;Borra el Puerto B. Se hace salida tris B ya que coloca, todas las salidas a cero cuando lo borra.
MOVLW B'11100' ;Carga el literal 11100 que es igual a 1C en reg. trabajo W. ----------0x04
MOVWF PORTA ;Descarga registro de trabajo W en Puerto A y lo hace Entrada y 1 Salida.
BCF STATUS,RP0 ;Vuelve a la página 0 o Banco 0.
CLRF PORTA ;Coloca las entradas del PuertoA en 0.
CLRW ;Borra el contenido de W, para eliminar basura estatica.
CALL PS_IN
MOVF PS_REG,W
MOVWF PORTB
END
Pines a conectar.
CHIP 74165 PIC16F84
--Pin 9--Serial>--------1
--Pin 2--Clock---------17
--Pin 1--Load----------18
CHIP74165
Pines 15 y 10 a GND.
Pines 11,12,13,14,3,4,5,6 a unos interruptores.(D0...D7)
PIC16F84 PuertoB salidas a unos Leds.
El objeto es: Si selecciono un Interruptor, lo mandará por serial(PIN 9)
al PIC y lo mostrará en los Leds.
Si algún día puedo les paso el .Zip.
Espero les guste.
Bye('_').