collapse

* Posts Recentes

Como reproteger as pontas de cobre do ferros de soldar? por vasco
[Ontem às 18:53]


é preciso ter cuidado com ESD? por vasco
[15 de Dezembro de 2018, 21:26]


Bibliotecas para arduino e drivers de stepper - o problema da 'distracção' por SerraCabo
[14 de Dezembro de 2018, 12:12]


Potênciometro 4.7 ou 5 KOhm com switch por brunus
[13 de Dezembro de 2018, 19:35]


Zener BZW04-105? por brunus
[11 de Dezembro de 2018, 17:34]


Artigo 11, 13 e os restantes por jm_araujo
[10 de Dezembro de 2018, 11:05]


Compra Colectiva Mouser N3-2018 (limite 25 Nov) por Hugu
[10 de Dezembro de 2018, 01:07]


Ajuda para reparar Luzes de LED de Natal por brunus
[09 de Dezembro de 2018, 00:59]


Usar steppers de 5 pontas como se fossem de 4 pontas por SerraCabo
[08 de Dezembro de 2018, 21:18]


LusoRobótica - Website - Estado actual por Tech_JA
[06 de Dezembro de 2018, 09:18]

Autor Tópico: [GUIA] Definir um tempo exacto qualquer no PIC(Asm)  (Lida 1634 vezes)

0 Membros e 1 Visitante estão a ver este tópico.

Offline vicardosof

  • Mini Robot
  • *
  • Mensagens: 223
[GUIA] Definir um tempo exacto qualquer no PIC(Asm)
« 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:
Código: [Seleccione]
temp   EQU     0x20
temp2  EQU     0x21
sec    EQU     0x22
Secs   EQU     0x23

código por si próprio:
Código: [Seleccione]
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:
Código: [Seleccione]
movlw   D'X'
movwf   Secs
call    Wait

Troque X pelo número de segundos.




Peço a opinião sobre esse código.
« Última modificação: 16 de Outubro de 2010, 22:19 por vicardosof »

Offline Sérgio_Sena

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 1.645
    • Electronic Gear for Musicians
Re: [GUIA] Definir um tempo exacto qualquer no PIC(Asm)
« Responder #1 em: 17 de Outubro de 2010, 12:21 »
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

Offline vicardosof

  • Mini Robot
  • *
  • Mensagens: 223
Re: [GUIA] Definir um tempo exacto qualquer no PIC(Asm)
« Responder #2 em: 17 de Outubro de 2010, 15:09 »
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...

Offline senso

  • Global Moderator
  • Mini Robot
  • *****
  • Mensagens: 9.586
  • Helpdesk do sitio
Re: [GUIA] Definir um tempo exacto qualquer no PIC(Asm)
« Responder #3 em: 17 de Outubro de 2010, 15:15 »
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.
Avr fanboy

Offline vicardosof

  • Mini Robot
  • *
  • Mensagens: 223
Re: [GUIA] Definir um tempo exacto qualquer no PIC(Asm)
« Responder #4 em: 18 de Outubro de 2010, 00:37 »
como usa branch? tens algum guia?

Offline senso

  • Global Moderator
  • Mini Robot
  • *****
  • Mensagens: 9.586
  • Helpdesk do sitio
Re: [GUIA] Definir um tempo exacto qualquer no PIC(Asm)
« Responder #5 em: 18 de Outubro de 2010, 00:44 »
Aconselho a ler esta série de tutoriais ;)
http://www.mstracey.btinternet.co.uk/pictutorial/progtut1.htm
Avr fanboy