LIST P=16F84A
INCLUDE <P16F84A.INC>
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC
CBLOCK 0x0C
CONTADOR
ENDC
#DEFINE SPK PORTB,0
ORG 0
Inicio
bsf STATUS,RP0 ; Acceso al Banco 1.
bcf SPK
bcf STATUS,RP0 ; Acceso al Banco 0.
Principal
bsf SPK
call Retardo_500micros
bcf SPK
call Retardo_500micros
espera_1seg
movlw 0x100 ; b'11111111'
movwf CONTADOR ; 1 |
decfsz CONTADOR,1
goto SPKOFF
goto Inicio
SPKOFF bcf SPK
goto Inicio
INCLUDE <RETARDOS.INC>
END
Hola.
No es necesario tener que volver a configurar TRISB si siempre va a tener el mismo valor. Lo que tienes que hacer, es volver al punto después de configurar dicho registro.
En el retardo, espera_1seg hay algunas cosas que están mal.
0x100 no sirve en un pic de 8 bit. Lo más probable, es que el compilador te tome el siguiente valor 0x10; que en todo caso no corresponde con el comentario b'11111111', con respecto a tu comentario, tienes que poner 0xFF
La rutina de espera_1seg está mal. Solo se descuenta una sola vez la variable contador. Eso pasa porque, cuando se ejecuta DECFSZ, salta a goto inicio o goto SPKOFF; y en la rutina SPKOFF va a inicio.