Assembly
R: Agora utilizaremos o mesmo hardware proposto , porém não utilizaremos o botão, pois estaremos nos familiarizando com a rotina de DELAY. Na rotina principal teremos a instrução CALL DELAY, que será o responsável por chamar a rotina delay de 1 ms, isso só é possível fazendo o microcontrolador perder um tempo decrementando alguns registradores, que serão criados pelo usuário, pois cada instrução no PIC é executada muito rapidamente (1us com clock de 4MHz) e nesse exemplo o delay será de 1ms, tempo ainda muito baixo para ver os Leds acenderem e apagarem (só é possível verificar usando o osciloscópio), mas a intenção é compreender como essa rotina é executada e dentro dela é encontrado o seguinte código
DELAY MOVLW .249 MOVWF TEMPO
DELAY1
NOP DECFSZ TEMPO, F GOTO DELAY1
RETURN
No label DELAY a variável tempo criada pelo usuário (para isso declare-a dentro do da diretiva CBLOCK 0x20) irá conter o valor 249 e em DELAY1 a instrução NOP gasta um ciclo de máquina sem fazer nada e então a instrução DECFSZ irá decrementar a variável TEMPO, gastando mais um ciclo e a instrução GOTO irá gastar dois ciclos de máquina e irá para o label DELAY1, assim até quando o registrador TEMPO for decrementado e o valor nele contido for zero então nesse momento gasta-se mais 2 ciclos de máquina pois haverá um salto que pula uma linha encontrando a instrução RETURN que irá voltar para o programa principal. Nota-se que o programa irá ficar no loop DELAY1 que gasta 4 ciclos x249, que é o valor contido em tempo gerando aproximadamente 1ms.
Lembrando que cada instrução é executada em 1 ciclo de máquina e instruções que provocam desvio no programa irão gastar 2 ciclos e então com um oscilador de 4 MHz, cada instrução levará 1us para ser executada.
Na internet encontra-se o