Olá Visitante, Por favor faça Login ou Registe-se

Autor Tópico: Led a Piscar assembly  (Lida 856 vezes)

Offline fOstTer

  • Fusivel
  • *
  • Mensagens: 8
Led a Piscar assembly
« em: Março 11, 2010, 16:12:12 pm »
Boas pessoal,

estou apenas agora a começar a trabalhar com pics nomeadamente 18F4550

E o primeiro objectivo era por um led a piscar a cada 500 ms com e sem interrupções, mas em assembly.

Já fiz alguns avanços mas estou empancado. Alguém me pode ajudar?

Offline raphastream

  • Transistor
  • **
  • Mensagens: 30
Re: Led a Piscar assembly
« Responder #1 em: Março 11, 2010, 18:10:56 pm »

move x,30
label:ecrementa se não zero go to label
se zero acende led
move x,30
label:ecrementa se não zero go to label
se zero apaga led led

agora e so ver as instruções de salt oem assembly e de carregamento em registo ou memoria e ta feito so tens de calcular o tempo de instrucção para saber com quanto tens de carregar eu pos no exemplo 30 mas e um valor tens de calcular

Offline fOstTer

  • Fusivel
  • *
  • Mensagens: 8
Re: Led a Piscar assembly
« Responder #2 em: Março 11, 2010, 22:07:04 pm »
#include <p18F4550.inc>
   
   CONFIG WDT=OFF
   CONFIG MCLRE = ON
   CONFIG DEBUG = ON
   CONFIG LVP = OFF
   CONFIG FOSC = INTOSCIO_EC
   
   org 0
      
Delay1 res 1
Delay2 res 1

Start:
   CLRF PORTD
   CLRF TRISD
   
   CLRF Delay1
   CLRF Delay2
MainLoop:
   BTG PORTD,RD1

Delay:
   DECFSZ    Delay1,1 ; Decrementa e se estiver a 0 salta
   GOTO Delay
   DECFSZ     Delay2,1
   GOTO Delay

   GOTO MainLoop

Isto foi algo que já tinha feito..

Offline tó neves

  • Cristal
  • ***
  • Mensagens: 295
Re: Led a Piscar assembly
« Responder #3 em: Março 12, 2010, 03:37:07 am »
Isso gerou código sem erros? Estás a usar relocatable code, certo? Vou assumir que sim, faz:

Código: [Seleccione]
#include <p18F4550.inc>

config WDT=OFF
config MCLRE = ON
config DEBUG = OFF
config LVP = OFF
config FOSC = INTOSCIO_EC
   
UDATA
     
Delay1 res 1
Delay2 res 1

CODE

org 0

Start:
clrf PORTD
clrf TRISD
   
clrf Delay1
cltf Delay2

MainLoop:
btg PORTD,RD1

Delay:
decfsz Delay1, F
goto Delay
decfsz Delay2, F
goto Delay

goto MainLoop
END


Diz se resultou. :mdr:

EDIT: Só hoje me apercebi que faltavam as directivas UDATA e CODE, já corrigi o código.
« Última modificação: Março 15, 2010, 17:27:55 pm por tó neves »

Offline fOstTer

  • Fusivel
  • *
  • Mensagens: 8
Re: Led a Piscar assembly
« Responder #4 em: Março 16, 2010, 12:52:24 pm »
Dá-me erro ao reservar apenas um byte.

Não percebi de todo o significado das directivas, são necessárias?
Está-me a dar o seguinte erro, para UDATA e CODE:
Error[149]   C:\USERS\FRANCISCO\DESKTOP\LABSIS\LED.ASM 9 : Directive only allowed when generating an object file


Mas no que fiz não está de todo correcto, mas não consigo chegar ao erro.
« Última modificação: Março 16, 2010, 13:00:11 pm por fOstTer »

Offline fOstTer

  • Fusivel
  • *
  • Mensagens: 8
Re: Led a Piscar assembly
« Responder #5 em: Março 16, 2010, 13:00:30 pm »
Dá-me erro ao reservar apenas um byte.

Não percebi de todo o significado das directivas, são necessárias?
Está-me a dar o seguinte erro, para UDATA e CODE:
Error[149]   C:\USERS\*****\DESKTOP\LABSIS\LED.ASM 9 : Directive only allowed when generating an object file


Mas no que fiz não está de todo correcto, mas não consigo chegar ao erro.

Offline asena

  • Administrador Geral
  • *****
  • Mensagens: 1 255
Re: Led a Piscar assembly
« Responder #6 em: Março 16, 2010, 18:59:02 pm »
Experimenta fazer da forma tradicional ::

Delay1     EQU     0xABCD

ABCD - endereço disponivel nos GPR da RAM

Offline tó neves

  • Cristal
  • ***
  • Mensagens: 295
Re: Led a Piscar assembly
« Responder #7 em: Março 16, 2010, 20:18:58 pm »
(...)Não percebi de todo o significado das directivas, são necessárias?(...)

As directivas são necessárias quando se usa relocatable code.

Se estas a usar absolute code, faz o que o asena disse, por ex.:

Código: [Seleccione]
#include <p18F4550.inc>

   config WDT=OFF
   config MCLRE = ON
   config DEBUG = OFF
   config LVP = OFF
   config FOSC = INTOSCIO_EC
       
Delay1 equ 0x5F
Delay2 equ 0x5E

org 0

Start:
   clrf PORTD
   clrf TRISD
   
   clrf Delay1
   cltf Delay2

MainLoop:
   btg PORTD,RD1

Delay:
   decfsz Delay1, F
   goto Delay
   decfsz Delay2, F
   goto Delay

   goto MainLoop
END