Página 1 de 2
Dúvida C18

Enviado:
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.

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

Enviado:
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

Enviado:
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.

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

Enviado:
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)

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

Enviado:
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

Enviado:
09 Ago 2010 14:18
por ÁgioFelipe
Agora vocês me confudiram todo...
tcpipchip
Que referência externa por exemplo?
Sergio
Que objeto???

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

Enviado:
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?

Enviado:
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;

Enviado:
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!

Enviado:
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?

Enviado:
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?