Hola, buenas.
Estoy comenzando con el asm.
Tengo este programa que simulo bien en proteus
; **** Encabezado ****
list p=16F88
#include <P16F88.INC>
__CONFIG _CONFIG1, _CP_OFF & _CCP1_RB0 & _DEBUG_OFF & _WRT_PROTECT_OFF & _CPD_OFF & _LVP_OFF & _BODEN_ON & _MCLR_OFF & _PWRTE_ON & _WDT_OFF & _XT_OSC
__CONFIG _CONFIG2, _IESO_OFF & _FCMEN_OFF
CLOCK equ 8000000
PDel0 EQU 0B
PDel1 EQU 0C
PDel2 EQU 0D
org 0
bsf status,5 ;pone a uno el bit 5 del registro STATUS (el rp0 para pasar al banco 1)
movlw B'00000' ; carga 00000 en W
movwf TRISA ; puerto a todos salidas pasa w que es 00000 a trisa
movlw B'00000000' ; carga 00000000 en W
movwf TRISB ; puerto b todos salidaS
bcf STATUS,5 ; pone a cero el bit 5 del registro STATUS (el rp0 para pasar al banco 1)
BCF PORTB,0 ; ponemos a 0 RB0
BCF PORTB,1 ; ponemos a 0 RB1
BCF PORTB,2 ; ponemos a 0 RB2
BCF PORTB,3 ; ponemos a 0 RB3
BCF PORTB,4 ; ponemos a 0 RB4
BCF PORTB,5 ; ponemos a 0 RB5
BCF PORTB,6 ; ponemos a 0 RB6
BCF PORTB,7 ; ponemos a 0 RB7
; luego haremos todos juntos
INICIO ; etiqueta
BSF PORTB,0 ; pone a 1 RB0
BSF PORTB,1 ; ponemos a 1 RB1
BSF PORTB,2 ; ponemos a 1 RB2
BSF PORTB,3 ; ponemos a 1 RB3
BSF PORTB,4 ; ponemos a 1 RB4
BSF PORTB,5 ; ponemos a 1 RB5
BSF PORTB,6 ; ponemos a 1 RB6
BSF PORTB,7 ; ponemos a 1 RB7
CALL DEMORA
BCF PORTB,0 ; pone a 0 RB0
BCF PORTB,1 ; ponemos a 0 RB1
BCF PORTB,2 ; ponemos a 0 RB2
BCF PORTB,3 ; ponemos a 0 RB3
BCF PORTB,4 ; ponemos a 0 RB4
BCF PORTB,5 ; ponemos a 0 RB5
BCF PORTB,6 ; ponemos a 0 RB6
BCF PORTB,7 ; ponemos a 0 RB7
CALL DEMORA
GOTO INICIO ; va a inicio
DEMORA movlw .14 ; 1 set numero de repeticion (C)
movwf PDel0 ; 1 |
PLoop0 movlw .72 ; 1 set numero de repeticion (B)
movwf PDel1 ; 1 |
PLoop1 movlw .247 ; 1 set numero de repeticion (A)
movwf PDel2 ; 1 |
PLoop2 clrwdt ; 1 clear watchdog
decfsz PDel2, 1 ; 1 + (1) es el tiempo 0 ? (A)
goto PLoop2 ; 2 no, loop
decfsz PDel1, 1 ; 1 + (1) es el tiempo 0 ? (B)
goto PLoop1 ; 2 no, loop
decfsz PDel0, 1 ; 1 + (1) es el tiempo 0 ? (C)
goto PLoop0 ; 2 no, loop
PDelL1 goto PDelL2 ; 2 ciclos delay
PDelL2 clrwdt ; 1 ciclo delay
return ; 2+2 Fin.
END
Enciende y apaga leds conectados al puerto B.
El problema que cuando lo paso a la electrónica no funciona.
Se puede pensar que el problema está en la electrónica, pero cuando hago el mismo programa en pic simulador ide ,en basic, encender y apagar el puerto b, funciona perfectamente.
No sé si será problema de configuración de fuses o de definición de frecuencia de reloj. Uso uno externo de 8 Mz.
Un saludo