He estado experimentando con un PIC 12F508 y acabo de comenzar a escribir mis propios bucles de retardo en el ensamblador. Nada lujoso, pero simplemente encender y apagar un LED conectado a GP1 (configurado como salida) para verificar el código.
Finalmente conseguí que mi bucle funcionara, pero no entiendo por qué debe escribirse de cierta manera para que funcione.
He copiado parte del código que no funciona a continuación, omití los bits de configuración y configuración de TRIS de entrada / salida para mayor claridad.
Cuando el código se escribe tal como está debajo y dly4 vuelve a su estado original, el LED no parpadea, simplemente permanece encendido.
No entiendo por qué esto se debe a que, de acuerdo con la hoja de datos, una vez que la variable count4 llega a 0, se debe omitir el goto dly4 La siguiente instrucción, goto main_loop, debe ejecutarse, la cual vuelve al inicio del código, alterna el led nuevamente y el proceso se repite.
main_loop
movf sGPIO,w
xorlw b'000010' ; toggle LED on GP1
movwf sGPIO
movwf GPIO
movlw .80
movwf count
movwf count2
movwf count3
movwf count4
dly1 decfsz count,f
goto dly1
dly2 decfsz count2,f
goto dly2
dly3 decfsz count3,f
goto dly3
dly4 decfsz count4,f
goto dly4
goto main_loop
END
Para hacer que el código funcione, tengo que modificar el goto al final del bucle de:
goto dly4 to goto dly1
¿Por qué querría volver a los cuatro bucles? ¿No disminuiría las variables de 0 al reiniciarlas de nuevo a 255? Aunque el código funciona con la modificación anterior, no puedo entender cómo se está saliendo del bucle.
Gracias por cualquier ayuda por adelantado.