LusoRobótica - Robótica em Português
Sistemas específicos => PIC => Tópico iniciado por: vicardosof em 16 de Outubro de 2010, 22:15
-
Este é meu primeiro guia para PIC. Não sei se está totalmente certo, mas comigo funcionou. Criei um código em asm para que tu possas determinar um tempo, em segundos, e o pic irá esperar exactamente esse tempo para prosseguir para a próxima instrução.
A grande diferença desse para os outros, é que nesse podes colocar vários tempos diferentes sem ter de trocar a função!
Código de variáveis:
temp EQU 0x20
temp2 EQU 0x21
sec EQU 0x22
Secs EQU 0x23
código por si próprio:
DELAY ;Ajustado para 1/10 de segundo
movlw 0xC9 ;carrega W
movwf temp2 ;move valor em W para TEMP
movlw 0xA4 ;carrega W
movwf temp ;move valor em W para TEMP
decfsz temp, f ;decrementa TEMP em uma unidade, coloca resultado em TEMP
goto $-1 ;salta para uma instrucao anterior
nop
decfsz temp2, f ;decrementa TEMP em uma unidade, coloca resultado em TEMP
goto $-6 ; salta para duas instrucoes anteriores
movlw 0x20 ;carrega W
movwf temp ;move valor em W para TEMP
decfsz temp, f ;decrementa TEMP em uma unidade, coloca resultado em TEMP
goto $-1 ;salta para uma instrucao anterior
nop
return ;sai fora da rotina de ATRAS
Second
movlw D'11'
movwf sec
decfsz sec, F
goto $+2
return
call DELAY
goto $-4
Wait
call Second
decfsz Secs, F
goto $+2
return
call Second
goto $-4
Modo de usar:
movlw D'X'
movwf Secs
call Wait
Troque X pelo número de segundos.
Peço a opinião sobre esse código.
-
Sim Sr, já reparei que usou o código que eu lhe dei no outro fórum. Espero que o tenha ajudado a compreender como se processam os processamentos de tempo por software.
E boa iniciativa em publicar aqui um upgrade das rotnias, agora para contar já com segundos.
Aconselho-o a ajeitar e aprender como se fazem essas rotinas, porque apesar de trabalhar, aquilo está uma grande trapalhada! tem chamadas e gotos de um lado para o outro.... uma trapalhada!
É preferivel aprender como deve de ser, sem ter pressa de mostrar aos outros como se faz.... ou não se faz...
:o
-
Realmente está uma confusão ::)
Peguei o seu código de 0.1 sec e coloquei um loop para ele fazer 10 vezes. Assim tenho 1s. Depois coloquei o Wait como um loop do 1s.
Nunca usei linguagem de baixo nivel antes... Sinto muita falta de um If, um Sub e uma função...
-
Podes fazer if usando os branchs que são para isso mesmo que servem, sub não faço ideia o que seja e para funções crias macros, tendo em atenção a passagem de parâmetros pela stack.
-
como usa branch? tens algum guia?
-
Aconselho a ler esta série de tutoriais ;)
http://www.mstracey.btinternet.co.uk/pictutorial/progtut1.htm (http://www.mstracey.btinternet.co.uk/pictutorial/progtut1.htm)