Supongamos que estamos usando un oscilador externo a 8 MHz y necesitamos un voltaje alto durante aproximadamente 1 segundo en el pin RA0. Un ciclo de instrucción toma 0.5 \ $ \ mu s \ $. Hice una subrutina que toma 25 ms, con el prescaler establecido en \ $ \ frac {1} {256} \ $.
delay
clrf TMR0
L0
movf TMR0,w
xorlw d'195'
btfss STATUS, Z
goto L0
return
Esta subrutina (que da cuenta de las instrucciones de llamada y devolución que usan dos ciclos cada una) ocupa 49924 ciclos.
Entonces, para crear un retraso de un segundo, todo lo que necesito hacer es llamar a esta rutina 40 veces.
counter equ 0x21
movlw d'40'
movwf counter
bsf LATA, 0
bcf BSR, BSR1
L1
call delay
decfsz counter
goto L1
bsf BSR, BSR1
bcf LATA, 0
Sin embargo, en el analizador lógico de MPLAB obtengo algunos resultados extraños, ¡el pin RA0 ni siquiera va a ALTO! Soy autodidacta sobre este tema, y si conoce algún buen artículo en línea sobre este tema, me encantaría leerlo. También, ¿cómo podemos hacer esto usando el registro INTCON?
AQUÍ es la hoja de datos de la foto que estoy usando. El OPTION_ REG está en la página 187, y el registro de INTCON está en la página 90.