Hola, tengo el siguiente circuito.
(https://image.ibb.co/mL1Z9H/31195650_1758470450878850_992713417670262784_n.jpg)
Estoy usando el PIC16F877A y le programe el siguiente codigo:
LIST p=16F877 ;tell assembler what chip we are using
include "P16F877.inc" ;include the defaults for the chip
__config 0x3F3A ; Pic16F877 11111100111010
ORG 0
NUMERO1 EQU 0x21
NUMERO2 EQU 0x22 ;NO USADA AUN
BCF STATUS,RP0
BCF STATUS,RP1 ;BANCO 0
CLRF PORTA
BSF STATUS,RP0
BCF STATUS,RP1 ;BANCO 1
MOVLW 0x07
MOVWF ADCON1 ;E/S DIGITAL
MOVLW 0xFF
MOVWF TRISA ;TODO PORTA SALIDA
BCF STATUS,RP0
BCF STATUS,RP1 ;BANCO 0
MOVLW 0x01
MOVWF NUMERO1
INICIO:
RLF NUMERO1,0 ;ROTABIT
MOVWF PORTA
MOVWF NUMERO1
CALL RETARDO
GOTO INICIO
RETARDO:
;RETARDO
RETURN
FINAL:
NOP
END
El problema es que el circuito no hace nada, no encienden los leds cuando el programa lo que hace es un simple rotabit en el PORTA para comprobar que el pic estuviera comprobando correctamente, probe el programa en simuladores del mismo pic y parece funionar pero al hacerlo en el pic real simplemente no hace absolutamente nada. Alguien tiene idea de que es lo que puede estar pasando? los capacitores del cristal son de 33pf y el cristal es de 4MHz. Gracias de antemano
segurate de seguir el diagrama... por otro lado, tambien puede ser consecuencia que están cambiando unas 500 veces por segundo XD hace años que no toco un pic (con arduino creía que eso ya no se usaba hace como 10 años mas que para ambito profesional XD) menos aún risc asm XD pero incluso funcionando bien son 5 leds encenciendo una vez cada 1/500 segundos una de cada 8 veces XD deberías llenar el retardo con algo que dure por lo menos 1/10 de segundo
no podrás ver el encendido, puesto que no hay ningun retardo.
la rutina de RETARDO no existe.
pd: cambia los fuses por 0x3F71
pd2: otra cosa, comienza la rutina desde 0x5, para que no caigas en el vector de interrupción y asi no tengas problemas con lo relacionado al servicio de interrupciones.
Yo no se XD uso este integrado en especifico porque asi lo marco mi profesor y pues debo hacerlo asi, apenas estamos viendo pics.
No creo que sea el retardo, es decir, ya he probado ya otros programas como que simplemente mueva un 33H al PORTA pero tampoco enciende los leds, no logro hacer que encienda aunque se supone que el circuito esta bien ya que sigue un diagrama de configuracion basica del pic, como este por ejemplo
(https://image.ibb.co/efnGpH/Whats_App_Image_2018_04_23_at_10_13_58_PM.jpg)
He probado algunas otras cosas como poner un capacitor de ruido de 100nF directo a vcc y gnd pero tampoco :c le he movido a bastantes cosas pero no logro hacer que encienda
He cambiado las cosas que me han mencionado en el codigo
LIST p=16F877 ;tell assembler what chip we are using
include "P16F877.inc" ;include the defaults for the chip
__config 0x3F71 ; Pic16F877 11111100111010
ORG 0
NUMERO1 EQU 0x21
NUMERO2 EQU 0x22 ;NO USADA AUN
AUXRET1 EQU 0x23
AUXRET2 EQU 0x24
AUXRET3 EQU 0x25
BCF STATUS,RP0
BCF STATUS,RP1 ;BANCO 0
CLRF PORTA
BSF STATUS,RP0
BCF STATUS,RP1 ;BANCO 1
MOVLW 0x07
MOVWF ADCON1 ;E/S DIGITAL
MOVLW 0xFF
MOVWF TRISA ;TODO PORTA SALIDA
BCF STATUS,RP0
BCF STATUS,RP1 ;BANCO 0
MOVLW 0x01
MOVWF NUMERO1
INICIO:
RLF NUMERO1,0 ;ROTABIT
MOVWF PORTA
MOVWF NUMERO1
CALL RETARDO
GOTO INICIO
RETARDO:
MOVLW 0x08
MOVWF AUXRET1
REFILL2:
MOVLW 0xFF
MOVWF AUXRET2
REFILL1:
MOVLW 0xFF
MOVWF AUXRET3
CTRL1:
DECFSZ AUXRET3,1
GOTO CTRL1
DECFSZ AUXRET2,1
GOTO REFILL1
DECFSZ AUXRET1,1
GOTO REFILL2
RETURN
FINAL:
NOP
END
Sin embargo el circuito sigue sin dar señales de vida :c que mas puedo hacer?! estoy asustado, mi semestre pende de un hilo
Edit: Ya pude hacerlo funcionar, aparentemente el mover al TRISA un FFH hace que todo el puerto sea de entrada, no salida, por eso no encendía ningún led xd al final fue una estupidez. Gracias por su ayuda.