Página 1 de 1

Incremento com mikroC+McLab 1

MensagemEnviado: 13 Out 2008 20:13
por r.bertini
Olá pessoal,

fiz o seguinte programa:
Código: Selecionar todos
configs()
{
cmcon=0x07;
option_reg=0x80;
intcon=0x00;
trisb=0x00;
}
void main(){
configs();
int i;
i=0;
while(i<10){
i++;
portb=i;
}}


Mas o marvado só incrementa 1x
Este programa foi um teste de incremento, o que pretendo é escrever um programa que ao pressionar o botão 1 ligado ao RA1 incremente a variável e ao pressionar o botão 2 ligado ao RA2 execute uma rotina o número de vezes contido na variável.

Mas nem com o incremento automático não vai.

Alguém tem uma idéia?

Valeu.

MensagemEnviado: 14 Out 2008 12:15
por turuna
Posso estar enganado, mas a variável "i" deve ser declarado acima do main, ou não?

Turuna

Eita!!

MensagemEnviado: 14 Out 2008 16:31
por r.bertini
Boa Turuna, era isso mesmo, agora o incremento automático funfou.
porém tive de colocar um delay pra poder observar.
No caso do incremento por botão eu fiz esse programinha aki, mas naum funfa mesmo.

Código: Selecionar todos
configs()
{
cmcon=0x07;
option_reg=0x80;
intcon=0x00;
trisb=0x00;
}
int i;
void main()
{
configs();
while(1)
{
if(porta.f1==0)
{
i++;
}
if((porta.f2==0)&&(i>0))
{
portb=i;
Delay_ms(3000);
portb=0x00;
i--;
}} }

MensagemEnviado: 14 Out 2008 17:33
por joao
Alguém poderia explicar porque a declaração deveria ser em cima do main?
Eu ainda não entendi. :)
Isso é alguma coisa do MikroC? Ou da linguagem C?

Porque se for em cima do C ela se torna global, correto? mas não consigo ver um problema dela estar dentro do main e ser uma variavel local apenas.

Obrigado,
Joao

MensagemEnviado: 14 Out 2008 17:58
por Jorge_Francisco
Teria que colocar logo depois de main(){, resumindo, no inicio do bloco main, fora deste bloco é global.

MensagemEnviado: 15 Out 2008 04:10
por joao
Pois então Jorge_francisco,

Mas o Turuna e o r.bertini falaram que tem que ser fora do main.
Sem contar que dessa maneira não deveria nem compilar, não é? Geraria um erro de declaração de variável.

Isso que não entendi ainda. Como que funcionou a compilação daquela primeira maneira?

[]'s

Re: Eita!!

MensagemEnviado: 15 Out 2008 12:03
por turuna
r.bertini escreveu:Boa Turuna, era isso mesmo, agora o incremento automático funfou.
porém tive de colocar um delay pra poder observar.
No caso do incremento por botão eu fiz esse programinha aki, mas naum funfa mesmo.

Código: Selecionar todos
configs()
{
cmcon=0x07;
option_reg=0x80;
intcon=0x00;
trisb=0x00;
}
int i;
void main()
{
configs();
while(1)
{
if(porta.f1==0)
{
i++;
}
if((porta.f2==0)&&(i>0))
{
portb=i;
Delay_ms(3000);
portb=0x00;
i--;
}} }



faltou vc colocar o porta,1e 2 como entrada ai funfa.

Turuna

Valeu Turuna

MensagemEnviado: 15 Out 2008 19:12
por r.bertini
Foi só configurar os pinos do porta como entrada que funcionou mesmo.

Valeu por me ajudar.

Eu tinha configurado uma vez o trisa como todos entrada mas essa placa tem uma lâmpada ligada ao bit RA0. Acho que é para o comparador analógico. E ao rodar o programa a marvada acendia, por isso não declarava as entradas.



:D

MensagemEnviado: 15 Out 2008 19:19
por r.bertini
joao escreveu:Pois então Jorge_francisco,

Mas o Turuna e o r.bertini falaram que tem que ser fora do main.
Sem contar que dessa maneira não deveria nem compilar, não é? Geraria um erro de declaração de variável.

Isso que não entendi ainda. Como que funcionou a compilação daquela primeira maneira?

[]'s


Foi o que você falou mesmo

variavel antes de função = Global

Variável dentro de função = Local

Isso é coisa da Linguagem. se você declara uma variável global pode usá-la em todo o programa, mas se declara ela local só poderá usá-la na função em que ela foi declarada.

No meu caso eu declarei ela local no main, ainda não sei o porque de não funcionar.