Hola, estoy haciendo un circuito muy simple para practicar con pic y no consigo que funcione.
El circuito tiene que encender y mantener encendio un led hasta que se pulse un pulsador y volver a encender el led cuando se vuelva a pulsar. El programa lo he simulado en proteus y funciona sin problemas pero al probar el circuito fisicamente el led o no se enciende o no se apaga o parpadea muy rapido y no responde al pulsador, aqui os dejo el programa en asm (aunque los comentarios estan en catalan):
Adjunto un esquema del circuito, el archivo asm y el archivo de proteus.
En el circuito utilizo un zener para mantener el voltaje a 5,1 V (porque no tenia zener de 5V),
El circuito tiene que encender y mantener encendio un led hasta que se pulse un pulsador y volver a encender el led cuando se vuelva a pulsar. El programa lo he simulado en proteus y funciona sin problemas pero al probar el circuito fisicamente el led o no se enciende o no se apaga o parpadea muy rapido y no responde al pulsador, aqui os dejo el programa en asm (aunque los comentarios estan en catalan):
Código:
;-------------------------------------------------------------------
;Controlar un led amb un pulsador
;-------------------------------------------------------------------
list p=16F88
include "P16F88.INC"
__CONFIG _CONFIG1, _CP_OFF & _DEBUG_OFF & _WRT_PROTECT_OFF & _CPD_OFF & _LVP_OFF & _BODEN_OFF & _MCLR_ON & _PWRTE_ON & _WDT_OFF & _XT_OSC
__CONFIG _CONFIG2, _IESO_OFF & _FCMEN_OFF
;----------------------------------------------------------------------------------
; -----------------Configuració---------------------
;----------------------------------------------------------------------------------
;Declaració dels registres
status equ 0x0003
porta equ 0x0005
portb equ 0x0006
trisa equ 0x0085
trisb equ 0x0086
ansel equ 0x009B
comptador equ 0x0020
;Inici del codi del programa
reset org 0x0000
goto inici
;-----------------------------------------------------------------------------
; ------------------Subrutines---------------------
;-----------------------------------------------------------------------------
banc1 ;Per canviar al banc1
bcf status,6
bsf status,5
return
banc0 ;Per canviar al banc0
bcf status,6
bcf status,5
return
;-----------------------------------------------------------------------------
; ------------------Fi Subrutines---------------------
;-----------------------------------------------------------------------------
inici
call banc1 ;Canvi al banc 1
movlw b'00001000'
movwf portb ;RB3 entrada
clrf ansel ;Entrades/Sortides Digitals
clrf trisa ;Tot sortides
call banc0 ;Tornem al banc 0
clrf porta ;Es neteja el porta
clrf portb ;i el portb
clrf comptador ;Es neteja el comptador (el led comença apagat)
polsador
btfsc portb,3
call led ;Es mira l'estat del led (si esta engegat o apagat)
goto polsador ;Si no, es torna a comprovar el polsador
led
btfss comptador,0 ;Si el comptador esta a 0 (el led esta apagat)
goto on_led ;Es va a on_led (per engegar el led)
bcf porta,0 ;Si no s'apaga el led
bcf comptador,0 ;Es posa el comptador a 0
goto lliure ;I s'espera a que es deixi el polsador
on_led
bsf porta,0 ;S'encen el led
bsf comptador,0 ;Es posa el comptador a 1
lliure
btfsc portb,3
goto lliure ;em quedo a esperar
return ;Si es deixa es torna a fer el test
end
Adjunto un esquema del circuito, el archivo asm y el archivo de proteus.
En el circuito utilizo un zener para mantener el voltaje a 5,1 V (porque no tenia zener de 5V),
Adjuntos
Última edición: