# pic16f628a + 74hc165



## remramon2007 (Feb 3, 2008)

hola gente alguien me puede decir por que no me funciona este codigo?
me estube quemando la cabeza todo el dia y no logre hacerlo funcionar, les agradeceria si alguien me puede tirar una mano.
dejo como archivo adjunto el esquematico y el codigo del pic.

'****************************************************************
'*  Name    : UNTITLED.BAS                                      *
'*  Author  : [select VIEW...EDITOR OPTIONS]                    *
'*  Notice  : Copyright (c) 2008 [select VIEW...EDITOR OPTIONS] *
'*          : All Rights Reserved                               *
'*  Date    : 01/02/2008                                        *
'*  Version : 1.0                                               *
'*  Notes   :                                                   *
'*          :                                                   *
'****************************************************************
include "bs2defs.bas"

'define OSC 4

@ DEVICE pic16f627a, INTRC_OSC_NOCLKOUT 'xt_osc'Reloj interno solo 
@ DEVICE pic16f627a, WDT_OFF            ' Watchdog Timer desconectado 
@ DEVICE pic16f627a, PWRT_OFF           ' Power-On Timer conectado 
@ DEVICE pic16f627a, BOD_ON             ' Brown-Out Detect conectado 
@ DEVICE pic16f627a, MCLR_OFF           ' Master Clear Externo desconectado 
@ DEVICE pic16f627a, LVP_OFF            ' Low-Voltage Programming desconectado 
@ DEVICE pic16f627a, CPD_OFF            ' Data Memory Code Protect desconectado 
'@ DEVICE pic16f628, _OFF             ' 

'****************************** VARIABLES **************************************
D_in var  portb.0          ' desplazam. datos (74x165.7)
Clock var portb.3         ' reloj (74x165.2)
Load var portb.4          ' carga de entrada (74x165.1)
switches VAR Byte   ' interruptores de entrada

'******************************* LCD *******************************************
'los datos de los cables que detallo son de izquierda a derecha empezando
'por negativo positivo
' 1 - masa
' 2 - positivo 5VCC
' 3 - preset
' 4 - porta.0
' 5 - porta.2
' 6 - porta.1
' 7, 8 y 9 en el aire
' 10 - portb.0
' 11 - portb.1
' 12 - portb.2
' 13 - portb.3

' Define LCD registers and bits
Define  LCD_DREG        PORTA   'PORTB   'LCD data port
Define  LCD_DBIT        0
Define  LCD_RSREG       PORTA   'LCD register select port
Define  LCD_RSBIT       7
Define  LCD_EREG        PORTA   'LCD enabled port
Define  LCD_EBIT        6
Define  LCD_BITS        4       ' Aquí indicamos que trabajamos con 4 bits en vez de 8
DEFINE  LCD_LINES       2
DEFINE  LCD_COMMANDUS   2000
DEFINE  LCD_DATAUS      50

    CMCON = 7

    Pause 100       ' Wait for LCD to start up

inicio:    
    Lcdout $FE, 1  ' Clear LCD screen
    PAUSE 10
    LCDOUT $FE,1,"Placa escuela"
    lcdout $FE,$C0,"Iniciada"    
    pause 100    

' -------------------------------------------------------------------------
Inicializar:
    HIGH Load ' hace salida en estado alto
' -------------------------------------------------------------------------
Principal:
    goto leer_pulsadores ' lee 8-pos. del dip switch
    'gosub escribir
    PAUSE 100
    GOTO Principal ' repite
    END
' -------------------------------------------------------------------------
leer_pulsadores:
    PULSOUT Load,3                  ' toma valores interruptores
    SHIFTIN D_in,Clock,MSBPre,[B0]  ' desplaza valores

escribir:
    Lcdout $FE, 1  ' Clear LCD screen
    PAUSE 10
    LCDOUT $FE,1,"Placa escuela"
    lcdout $FE,$C0,#B0
    pause 10
    goto leer_pulsadores

un abrazo y gracias!


----------



## eserock (Mar 14, 2008)

hola antes que nada explicame que pretendes hacer con ese circuito, conque finalidad es el 74hc165, si te quedan suficientes terminales del pic para controlar esa cantidad de push y creo que la biblioteca  que incluyes no corresponde con el diseño, verifica si lo siguiente te ayuda

@ device  pic16F628A, INTRC_OSC, wdt_off, pwrt_on, mclr_off, bod_on, lvp_off, protect_on

	'Configurando
    RBPU	VAR	OPTION_REG.7
    CMCON = 7               'puerto A digital
    RBPU  = 1               'Sin Resistencias en el puerto B a positivo

	Include "Modedefs.bas"



' ** Declare LCDOUT Defines **

	DEFINE	LCD_DREG	PortB			' Set Data to PortB
	DEFINE 	LCD_DBIT	4		       	' Set starting Data to Bit4
	DEFINE 	LCD_RSREG   PortA			' Set Register Select to PortA
	DEFINE 	LCD_RSBIT       1			' Set RS line to PORTA.1
	DEFINE 	LCD_EREG	PortA			' Set Enable to PortA
	DEFINE 	LCD_EBIT  	0			' Set Enable line to PortA.0
	DEFINE 	LCD_BITS	4			' Set for 4 bit Bus
	DEFINE 	LCD_LINES	2			' Set number of lines to 2
	DEFINE  LCD_COMMANDUS  2000
	DEFINE  LCD_DATAUS     50

    DEFINE OSC 4
con esto a mi me ha funcionado para difrentes proyectos y para no revolver  mientras hago un programa nuevo  hice un display lcd controlado en forma serial por solo un pin, esto me ahorra tiempo y confusiones mientras estoy haciendo el nuevo proyecto si quieres construir uno te paso toda la información diseño de pcb, firmware y esquematico


----------

