Página 1 de 2

Dúvida C18

MensagemEnviado: 05 Ago 2010 13:42
por ÁgioFelipe
Pessoal, estou apredendo C18 para usar com o PIC18F4550 (antes usava CCS para o 877A).
Vi que meu programa só compila se eu incluir lá no MPLAB o arquivo p18F4550.lkr, o que esse arquivo faz?
Quando usava o CCS lá no mplab era bem simples, era só selecionar a ferramenta de compilação e pronto. Tem como não precisar incluir esse arquivo lkr?

Valeu.

MensagemEnviado: 08 Ago 2010 22:21
por ÁgioFelipe
Ninguém pode ajudar?

MensagemEnviado: 08 Ago 2010 23:22
por Andre_Cruz
ÁgioFelipe,

Também estou iniciando agora no compilador da microchip o C18, tive a mesma dúvida, vendo o "MPLAB_C18_Getting_Started_51295f.pdf" no site da microchip, indica que os arquivos com extensão "lkr", contem os registradores e suas respectivas posições de memória, meu inglês é péssimo mas foi isso que eu entendi.
Acho que é como os arquivos com extesão "inc", do assembler.

Caso eu esteja errado ou com resposta incompleta, o pessoal do fórum ajudará a saber a funcão desse arquivo.

Abraço

André Cruz

MensagemEnviado: 09 Ago 2010 09:00
por ÁgioFelipe
Olá André, então vamos aprender juntos!

Eu acho que não, o endereço dos resistradores é dito através da diretiva: #include <p18F4550.h> ou #include <p18cxxx.h> que funciona para todos os modelos 18F.
Também, consegui em um dos pcs lá do trabalho, compilar um projeto sem incluir o arquivo *.lkr, vou ver aqui como é e te digo.

Até mais.

MensagemEnviado: 09 Ago 2010 10:18
por tcpipchip
Imagine que o LKR tem as definições dos registradores do processador.

MensagemEnviado: 09 Ago 2010 11:19
por ÁgioFelipe
Acho que não, consegui compilar sem incluir o *.lkr.
Project > Build Options > Project > MPASM/C17/C18 Suite
marcar a opção Build library target (invoke MPLIB)

MensagemEnviado: 09 Ago 2010 13:19
por tcpipchip
Sim, se voce nao fizer referencia externa ele nao será necessário...

MensagemEnviado: 09 Ago 2010 13:40
por Sergio38br
Agio vc com isto criou apenas um biblioteca, para gerar o objeto vai precisar do lkr. e se usar os .h das bibliotecas prontas...

[ ]'s
Sergio

MensagemEnviado: 09 Ago 2010 14:18
por ÁgioFelipe
Agora vocês me confudiram todo...

tcpipchip
Que referência externa por exemplo?

Sergio
Que objeto???

MensagemEnviado: 09 Ago 2010 14:25
por tcpipchip
extern, ou funções que está em outras LIBs...

MensagemEnviado: 15 Ago 2010 15:08
por ÁgioFelipe
Olá, tenho outra dúvida para vocês me ajudarem aqui no C18.

Código: Selecionar todos
PORTBbits.RB0 = 1;
Delay10KTCYx(50);      
PORTBbits.RB1 = 1;

Quando essa última instrução é executada (RB1=1) automaticamente RB0 vai a zero, isto está certo? O C18 funciona assim mesmo?
E se eu quisesse permanecer com RB0 em 1?

MensagemEnviado: 20 Out 2010 09:50
por ÁgioFelipe
Outra dúvida:

LCD_DATA4_IO = ((Data & 0x10) == 0x10);

O que esse linha faz?

E essa outra:

uiValorAD = (unsigned int) ADRES;

MensagemEnviado: 20 Out 2010 12:26
por ivan
Código: Selecionar todos
PORTBbits.RB0 = 1;
Delay10KTCYx(50);     
PORTBbits.RB1 = 1;

Quando essa última instrução é executada (RB1=1) automaticamente RB0 vai a zero, isto está certo?


Não

E se eu quisesse permanecer com RB0 em 1?

Faz como está no código.

Código: Selecionar todos
LCD_DATA4_IO = ((Data & 0x10) == 0x10);

a) (Data & 0x10)

b) ((Data & 0x10) == 0x10);


a) Uma AND entre Data e 0x10(2 em decimal) - Esta operação zera o primeiro bit, o menos significativo, e extrai o valor do segundo bit, se "0" ou "1".

b) Compara se no passo acima o resultado é igual 0x10

e finalmente o resultado de uma comparação é "0" se forem diferentes e "1" se forem iguais, atribuindo este valor, o resultado da comparação, à LCD_DATA4_IO.

Código: Selecionar todos
uiValorAD = (unsigned int) ADRES;


Converte o tipo de dado, seja ele qual for, de ADRES para o tipo inteiro sem sinal.

Para programar em C, antes é preciso ler uma apostila de linguagem C.
http://www.google.com.br/url?sa=t&source=web&cd=1&ved=0CBkQFjAA&url=http%3A%2F%2Fwww.inf.ufsc.br%2F~fernando%2Fine5412%2FC_UFMG.pdf&rct=j&q=apostila%20linguagem%20c%20ufmg&ei=qgm_TNicF8K88gao8dm7Bg&usg=AFQjCNH6_InTN9l_eTQOsXQJS7MMvPzLrA&cad=rja

Boa leitura!

MensagemEnviado: 15 Dez 2011 15:07
por ÁgioFelipe
Mais uma dúvida:

Se fizer isto:

float Freq;

Freq = 1/2;

Vai mostrar no final o valor da variável Freq como sendo 0, e não 0.5 como esperado. Agora se fizer assim dá certo:

Freq = 2;
Freq = 1/Freq;

Freq no final será 0.5 . Alguém sabe o porque?

MensagemEnviado: 15 Dez 2011 15:26
por ÁgioFelipe
Mais uma dúvida:

Se fizer isto:

float Freq;

Freq = 1/2;

Vai mostrar no final o valor da variável Freq como sendo 0, e não 0.5 como esperado. Agora se fizer assim dá certo:

Freq = 2;
Freq = 1/Freq;

Freq no final será 0.5 . Alguém sabe o porque?