Utilizando C no Keil

Software e Hardware para linha x51

Moderadores: 51, guest2003, Renie, gpenga

Utilizando C no Keil

Mensagempor power » 19 Abr 2007 16:04

Olá Pessoal blz!

Estou precisando da ajuda dos amigos. Eu só programo em assembly do 8051, mas gostaria de começar a programar em C. Já fiz uns programas em C para computador mas faz algum tempo que não uso mais e quando comecei a utilizar o C para 8051 ficou tudo meio confuso. Por exemplo
quando faço todo o programa em um único modulo principal roda legal, mas gostaria de fazer de uma forma mais profissional, isto é, tentar modularizar, coisas do tipo; modulo para eeprom , módulo para lcd,etc...
Eu já fiz uma pesquisa no forum, mas algumas coisas ainda estão meio confusas, como por exemplo como declarar uma variavel global que
possa ser utilizada em varios módulos. Eu olhei o tutorial parte1 do Jean,
que por sinal tava muito bem escrito, mas não consequi as outras partes do tutorial para baixar se alguem tiver e puder me enviar eu agradeço.
Ou se alguem tiver exemplos bem descritos de como declarar variaveis
globais e declaraçao de modulos, como inserir codigo asm em c.
Eu estou utilizando o Keil e até ja fui no site da Keil, mas como meu inglês e pobre fica difícil. Bom se alguem querer ajudar eu aceito qualquer orientação.
Até +, colegas!
power
Bit
 
Mensagens: 10
Registrado em: 12 Dez 2006 07:46

Mensagempor brasilma » 19 Abr 2007 18:36

Beleza Power,

A melhor dica que posso te dar é:

PROGRAMAÇÃO C PARA MICROCONTROLADORES 8051
MAURICIO CARDOSO DE SÁ

Ele explica a programação C voltada para o 8051 desde o inico.

Explica o uso do compilador Keil.

Abraços,
MArcos.
" A Teoria orienta e a Prática decide" ;-)
Avatar do usuário
brasilma
Dword
 
Mensagens: 3621
Registrado em: 11 Out 2006 15:39
Localização: Planeta Terra

Mensagempor Maurício » 19 Abr 2007 19:03

Falou, Marcos! :lol:
Olá, power. Bem-vindo ao fórum.

Apesar de que é puxar a brasa pra sardinha, mas...

Eu trato destes assuntos que vc citou, no meu curso online:

http://www.microgenios.com.br/doc_ead/f ... icial.html

Dá uma visitada, lá. Mas, é um curso de técnicas avançadas em C para o 8051. É necessário ter conhecimentos de C básico para programação do 51.

Agora, não dá pra responder. Fim de semana eu volto. Espero!

[]'s

RETI.
"Não leve a vida tão à sério, afinal, nenhum de nós sairá vivo, dela!"
Avatar do usuário
Maurício
Word
 
Mensagens: 678
Registrado em: 14 Out 2006 17:23
Localização: São Paulo - SP

Utilizando C no Keil

Mensagempor power » 23 Abr 2007 11:38

Olá Brasilma,
Obrigado pela sugestão. Com certeza eu preciso comprar um
livro para dar uma olhada quando tiver dúvidas, o problema eh que
nesse momento tô meio sem dinheiro para investir em conhecimento
e como precisso dessas informações para terminar um projeto
vou ter que contar com a ajuda do pessoal do forum.

Olá Mauricio,
Olhei no seu site este curso online e parece ser bastante
interessante, mas como falei pro Brasilma no momento vai ser
meio difícil por questões financeiras. Sei que conhecimento
custa dinheiro, mas tenho que me virar do jeito que dá, por enquanto.

só gostaria de fazer uma pergunta, eu fiz um teste com variveis
globais como descrevo abaixo e quanto vou compilar da a sequinte mensagem

*** WARNING L1: UNRESOLVED EXTERNAL SYMBOL
SYMBOL: VG_R1
MODULE: principal.obj (PRINCIPAL)
*** WARNING L1: UNRESOLVED EXTERNAL SYMBOL
SYMBOL: VG_S1 MODULE: principal.obj (PRINCIPAL)
*** WARNING L2: REFERENCE MADE TO UNRESOLVED EXTERNAL
SYMBOL: VG_S1 MODULE: principal.obj (PRINCIPAL)
ADDRESS: 0019H
*** WARNING L2: REFERENCE MADE TO UNRESOLVED EXTERNAL
SYMBOL: VG_R1 MODULE: principal.obj (PRINCIPAL)
ADDRESS: 001DH
*** WARNING L1: UNRESOLVED EXTERNAL SYMBOL
SYMBOL: VG_R1 MODULE: multiplicacao.obj (MULTIPLICACAO)
*** WARNING L1: UNRESOLVED EXTERNAL SYMBOL
SYMBOL: VG_S1 MODULE: multiplicacao.obj (MULTIPLICACAO)
*** WARNING L2: REFERENCE MADE TO UNRESOLVED EXTERNAL
SYMBOL: VG_R1 MODULE: multiplicacao.obj (MULTIPLICACAO)
ADDRESS: 0028H
*** WARNING L2: REFERENCE MADE TO UNRESOLVED EXTERNAL
SYMBOL: VG_S1 MODULE: multiplicacao.obj (MULTIPLICACAO)
ADDRESS: 002BH Program Size: data=10.0 xdata=0 code=68 "TesHeader" - 0 Error(s), 8 Warning(s).

Esses WARNING são normais ou estou fazendo algo errado. Tem uma forma correta de fazer
para não aparecer esses WARNING.



- criei um modulo calculos.c
- um calculos.h
- um modulo multiplicacao.c
- um multiplicacao.h
- um modulo principal.c e
- um modulo variaveis.h onde esta as declarações das variaveis globais



No modulo calculos.c
//-------------------------
#include<REGX52.H>


unsigned char soma(unsigned a,unsigned b)
{
unsigned c=0;

c=(a+b);
return c;
}



No modulo calculos.h
//----------------------
#include<REGX52.H>

#ifndef _calculos_h
#define _calculos_h
extern unsigned char soma(unsigned a,unsigned b);

#endif




No modulo multiplicacao.c
//-------------------------

#include<REGX52.H>
#include"calculos.h"
#include"variaveis.h"

unsigned char multSimples(unsigned char a, unsigned char b)
{
unsigned char r;
r=soma(a,b);
r=(r+VG_r1); // VG_r1 eh uma variavel global
r=VG_s1; // VG_s1 eh outra variavel global
return(r*3);
}




No modulo multiplicacao.h
//--------------------------
#include<REGX52.H>

#ifndef _multiplicacao_h
#define _multiplicacao_h
extern unsigned char multSimples(unsigned char a, unsigned char b);

#endif

No modulo variaveis.h
//----------------------
#ifndef _variaveis_h1
#define _variaveis_h1
extern unsigned char VG_x1;
extern unsigned char VG_s1;
extern unsigned char VG_r1;

#endif



No modulo principal.c
//------------------------

#include<REGX52.H>
#include"calculos.h"
#include"multiplicacao.h"
#include"variaveis.h"

/*------------------------------------------------------*
* Main
*
*-------------------------------------------------------*/
void main(void)
{
unsigned char x,y,z;

x=1;
y=2;
z=soma(x,y);
z=multSimples(x,5);
VG_r1=(3+VG_s1);
z=z+VG_r1;

while(1);



}
power
Bit
 
Mensagens: 10
Registrado em: 12 Dez 2006 07:46

Re: Utilizando C no Keil

Mensagempor andre_luis » 23 Abr 2007 11:48

No modo multiplicação.c, por exemplo, eu nao vi voce declarar :
extern unsigned char VG_s1 ;

Segue por esse caminho.

+++
Avatar do usuário
andre_luis
Dword
 
Mensagens: 5447
Registrado em: 11 Out 2006 18:27
Localização: Brasil - RJ

Mensagempor power » 23 Abr 2007 13:24

Olá Andre_teprom,

No modulo multiplicação.c eu inclui o modulo variaveis.h onde declaro
as variaveis globais, e a variavel VG_s1 eh global.
Valeu pela dica!
power
Bit
 
Mensagens: 10
Registrado em: 12 Dez 2006 07:46

Mensagempor Maurício » 23 Abr 2007 23:18

É isso mesmo que o André disse. Seus procedimentos são os corretos.
Só que vc não declarou a variável global unsigned char VG_s1, em nenhum módulo do programa. Talvez seja por isso que o Keil não consiga resolver a referência que é feita ao símbolo.
Existe o símbolo externo declarado em algum módulo, mas, não foi criada a variável externa a que esse símbolo se refere.

Eu, declaro minhas variáveis globais no escopo do módulo main, e declaro como extern, em algum módulo que eu vá utilizar essa variável.
É um método. Mas, óbvio, existem vários outros.

[]'s

RETI.
"Não leve a vida tão à sério, afinal, nenhum de nós sairá vivo, dela!"
Avatar do usuário
Maurício
Word
 
Mensagens: 678
Registrado em: 14 Out 2006 17:23
Localização: São Paulo - SP

Mensagempor power » 25 Abr 2007 10:09

Olá pessoal, blz,

Agradeço a ajuda do Andre_teprom assim como a ajuda do Mauricio. Ainda esta meio confuso esta parte de declaração de variaveis
globais. Eu declarei elas no modulo principal Main
e ainda continua com os mesmos WARNING. Acho que solução sera
estudar um pouco mais o c, por isso comprei o livro Programação C para Microcontroladores 8051, acho que o livro deve chegar la em casa até sabado, pois pedi via sedex. Então na proxima semana, eu com certeza
vou postar aqui mais algumas perguntas e conto com a colaboração dos
amigos do forum.
Até a proxima mensagem pessoal.
power
Bit
 
Mensagens: 10
Registrado em: 12 Dez 2006 07:46

Mensagempor Maurício » 25 Abr 2007 18:15

Uma outra coisa, tb.
Apesar de estarem ligados através dos arquivos .H, os arquivos .C dos módulos também devem ser incluídos no projeto do Keil. Devem ser adicionados ao projeto. Todos eles. Se eles não estiverem incluídos, os erros podem ser os que vc citou aqui.

Grato pelo livro! Espero que ele lhe seja bastante útil.

[]'s

RETI.
"Não leve a vida tão à sério, afinal, nenhum de nós sairá vivo, dela!"
Avatar do usuário
Maurício
Word
 
Mensagens: 678
Registrado em: 14 Out 2006 17:23
Localização: São Paulo - SP


Voltar para 8051

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante

x