Pulsadores con Pic16f84A

Hola, necesito ayuda con un problema que tengo con unos pulsadores utilizando un Pic16f84A, la cuestion es que no me responde nada del circuito, solo me aparecen ceros, y ya descarte problema de montaje, y no se trata de rebotes del pulsador, ya que he probado con todads las soluciones de la parte fisica, inclusive con retardos para el pulsador, por favor ayuda, aqui adjunto el circuito y el código, es bastante básico. Muchas gracias por su colaboración.



___________________________________________________________________________



__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC

LIST p=16F84A
INCLUDE <P16F84A.INC>

N0 EQU h'00'
N1 EQU h'01'
N2 EQU h'02'
N3 EQU h'03'
N4 EQU h'04'
N5 EQU h'05'
N6 EQU h'06'
N7 EQU h'07'
N8 EQU h'08'
N9 EQU h'09'
N10 EQU h'10'
N11 EQU h'11'
N12 EQU h'12'
N13 EQU h'13'
N14 EQU h'14'
N15 EQU h'15'
N16 EQU h'16'
N17 EQU h'17'
N18 EQU h'18'
N19 EQU h'19'
N20 EQU h'20'
N21 EQU h'21'
N22 EQU h'22'
N23 EQU h'23'
N24 EQU h'24'
N25 EQU h'25'
N26 EQU h'26'
N27 EQU h'27'
N28 EQU h'28'
N29 EQU h'29'
N30 EQU h'30'
N31 EQU h'31'
N32 EQU h'32'
N33 EQU h'33'
N34 EQU h'34'
N35 EQU h'35'
N36 EQU h'36'
N37 EQU h'37'
N38 EQU h'38'
N39 EQU h'39'
N40 EQU h'40'
N41 EQU h'41'
N42 EQU h'42'
N43 EQU h'43'
N44 EQU h'44'
N45 EQU h'45'
N46 EQU h'46'
N47 EQU h'47'
N48 EQU h'48'
N49 EQU h'49'
N50 EQU h'50'
N51 EQU h'51'
N52 EQU h'52'
N53 EQU h'53'
N54 EQU h'54'
N55 EQU h'55'
N56 EQU h'56'
N57 EQU h'57'
N58 EQU h'58'
N59 EQU h'59'
N60 EQU h'60'

ORG 0
bsf STATUS,RP0
clrf TRISB
movlw h'1F'
movwf TRISA
bcf STATUS,RP0
clrf PORTB
clrf PORTA
clrf 0C

Configuracion
btfsc PORTA,0
goto Decremento

Incremento
Call Retardo_200ms
incf 0C
Validacion
movlw d'61'
subwf 0C,W
btfss STATUS,02
goto Valida
No_valida
movlw h'60'
movwf PORTB
decf 0C
goto Configuracion
Valida
movfw 0C
Call Tabla
movwf PORTB
goto Configuracion

Decremento
btfsc PORTA,1
goto Configuracion

Validacion_b
movlw h'00'
subwf 0C,W
btfss STATUS,02
goto Valida_b
No_valida_b
goto Configuracion
Valida_b
Call Retardo_200ms
decf 0C
movfw 0C
Call Tabla
movwf PORTB
goto Configuracion

Tabla
Addwf PCL,F
DT N0, N1, N2, N3, N4, N5, N6, N7, N8, N9, N10, N11, N12, N13, N14, N15, N16, N17, N18, N19, N20, N21, N22, N23, N24, N25, N26, N27, N28, N29, N30
DT N31, N32, N33, N34, N35, N36, N37, N38, N39, N40, N41, N42, N43, N44, N45, N46, N47, N48, N49, N50, N51, N52, N53, N54, N55, N56, N57, N58, N59, N60

INCLUDE "C:\RETARDOS.INC"

END
 

Adjuntos

  • reloj_ac_302.gif
    reloj_ac_302.gif
    26.8 KB · Visitas: 836
Hola, no estoy seguro pero creo que el problema puede estar en la directiva DT, ¿por qué no mejor haces la tabla utilizando la instrucción RETLW? La tabla quedaría de la siguiente manera:


Código:
Tabla 
	Addwf	PCL,F 
	RETLW	N0
	RETLW	N1
	RETLW	N2
	RETLW	N3
	RETLW	N4
	RETLW	N5
	RETLW	N6
	RETLW	N7
	RETLW	N8
	RETLW	N9
	RETLW	N10
	RETLW	N11
	RETLW	N12
	RETLW	N13
	RETLW	N14
	RETLW	N15
	...

Al final el código te saldrá muy largo pero el archivo compilado sera del mismo tamaño. Pruebalo a ver si con eso se soluciona tu problema.
 
De hecho mi estimado pic-man, el uso de la directiva "dt" me parece bastante acertado en esta ocasión, dado que su efecto es precisamente generar una serie de instrucciones "retlw N..." tal como lo señalas. Además, no veo ningun problema en su uso o sintaxis, salvo que en el post las líneas que aparentemente son muy largas, se han cortado a la siguiente.

Por como pinta la cosa, parece mas bien un error de lógica de programación.

Ya probaste simulando el programa wilvert?

Una duda: en tu esquematico veo que tus display usan solo cuatro líneas. Se trata de displays con entradas HEX? (o quiza BCD?). Si son simples display de 7 segmentos, tu problema podría estar por ahí. Sino, pues se trata solo de una confusion mia ^_^

Realmente el programa a pesar de ser simple, se mira poco amigable al carecer de comentarios. Seria bueno que lo comentaras, asi nos ayudas a ayudarte. Solo una sugerencia :)

Deberias probar simulándolo con el MPLAB paso por paso, puedes usar el MPLAB SIM que ya viene por default sin mayor problema. Para introducirle valores a los puertos, abre un nuevo "workbook" del "stimulus" y en la ficha "Asynch" agrega los pines y el estado en que quieres que se pongan. Recuerda que para activar el pin necesitas hacer click en el boton con el símbolo ">" a la izquierda.

Espero mis comentarios sean útiles.

Saludos.
 
Tienes razón f_point, repasé un poco la directiva DT y no hay error ahí.

wilvert revisaré tu código con detalle para ver cual puede ser el problema.
 
:D :D :D
Hola Wilvert, el codigo que tienes para tu pic esta bien, no tiene ningun problema "almenos en la simulacion", lo he simulado con algun cambio (como no tengo nimguna libreria de retardo, genere el mismo), adjunto el circuito que he simulado.

Comentario: el codigo me parede muy ampuloso para el propocito que tiene, pero si el propocito es "ver" como funcionan los recursos como el "equ" , "DT" , bueno....

tambien, si se mantiene precionado el pulsador el pic sincrementera o decrementara segun el caso, por tanto tu solo testeas si se ha precionado un boton, pero no testeas si se dejo de precionar,...

Un saludo y espero que ya no tengas problemas... o replantea mejor el objetivo del circuito para darte una mejor horientacion.


PD. la cimulacion esta hecha en el PROTEUS 7.1, y esta ensamblado en el MPLAB
 

Adjuntos

  • xxx_765.rar
    26.5 KB · Visitas: 89
Atrás
Arriba