erro ao inserrir função MIkroc

Software e Hardware para uC PIC

Moderadores: andre_luis, 51, guest2003, Renie

erro ao inserrir função MIkroc

Mensagempor cristian » 16 Set 2009 06:44

o codigo abaixo funciona normal mas ao inserrir //ler_Num_ticket();

para ler o Tik_num fora da funçao ele alem de nao ler nao funciona o resto do codigo

end_aux=25;//inicia end
ind_memo=SI2C_read(0)<<8;ind_memo=ind_memo+SI2C_read(1);
do
{
ler_dados_memo();
converte_dados();
}while(end_aux<ind_memo);//imrpime ticket ate ind memoria
//...-------------------------- continua relatorio
//total de tickets
//**************************** ler Num ticket impressos **********
var1byte=SI2C_read(3);unilo(Tik_num,var1byte);
var1byte=SI2C_read(2);unihi(Tik_num,var1byte);
//ler_Num_ticket();
wordtostr(Tik_num,txt);
uart1_write_text("Quant. Total de Ticket=");
uart1_write_text(txt);
uart1_write(13);
//valor tickets
//**************************** ler valor do total de creditos
var1byte=SI2C_read(7);unilo(Total_credito,var1byte);
var1byte=SI2C_read(6);unihi(Total_credito,var1byte);
var1byte=SI2C_read(5);unihigh(Total_credito,var1byte);
var1byte=SI2C_read(4);unihiguest(Total_credito,var1byte);
wordtostr(Total_credito,txt);
uart1_write_text("Valor Total de Ticket=");
uart1_write_text(txt);
uart1_write_text(",00");
uart1_write(13);
cristian
Word
 
Mensagens: 570
Registrado em: 03 Nov 2006 08:15
Localização: serrinha-ba

Mensagempor fabim » 16 Set 2009 08:10

Bom, assim como o ajudamos em outra tread e você não agradeceu, esta tread esta parecendo novamente que o erro é a pecinha.
Esta rotina de readXX, é uma função criada por vocÊ ?
tick_num, você a definiu no cabeçalho como global ?

É fioti, não confunda uma IDE ruim, com um programador ruim....
De mais informações, coloque o escopo do programa para que possamos ver as cacas...
Mano, ve só.
Sou responsável pelo que escrevo!!! E não pelo que você entende !!!
fabim
Dword
 
Mensagens: 5001
Registrado em: 16 Out 2006 10:18
Localização: aqui uái!!!?

Mensagempor cristian » 16 Set 2009 08:15

o programador é ruim mesmo eu admito q nao tenho muita experiencia

mas a IDE deveria ajudar + .... pelo menos é q acho



ta ai fabim o programa completo



unsigned short read_ds1307(unsigned short address );
void ler_Num_ticket();
void salva_Total_credito();
void ler_total_credito();

#define liga_led2 portc.f1=0;
#define desliga_led2 portc.f1=1;
#define liga_ponto portc.f1=0;
#define desliga_ponto portc.f1=1;
unsigned short sec;
unsigned short minute;
unsigned short hour;
unsigned short day;
unsigned short date;
unsigned short month;
unsigned short year;

char txt[12];
char ddate[11];
char time[10];

sbit botao_B at Rc1_bit;
sbit botao_g at RC0_BIT;
unsigned int pulsos,dados,receive,ind_rx,x;
unsigned short int var,var1byte, var2,credito;
char buf_rs232[15];
unsigned long int Total_credito;

#define unilo(param,param2) ((short *)&param)[0] = ((short *)&param2)[0]
#define unihi(param,param2) ((short *)&param)[1] = ((short *)&param2)[0]
#define unihigh(param, param2) ((short *)&param)[2] = ((short *)&param2)[0]
#define unihiguest(param, param2) ((short *)&param)[3] = ((short *)&param2)[0]
//******************* memoria **************
unsigned int Tik_num,ind_memo,end_aux,total_tik;
unsigned short int dip,valor_tik,num_relat,valor_display,relat_num;

struct flag1{
print;
timer_pulso;
piscaled1;
piscaled2;
trat_pulso;
att_display ;
DISPLAY_pronto;
incr_contador;
timer_1seg;
imrime;
}a;

unsigned char BCD2UpperCh(unsigned char bcd)
{

return ((bcd >> 4) + 0x30);

}

unsigned char BCD2LowerCh(unsigned char bcd)
{

return ((bcd & 0x0F) + 0x30);

}

#include "24c256.c"
#include "ds1307.c"
#include "built_in.h"
// #include "memoria.c"


//****************************** salva ticket **************
salva_ticket()
{
ind_memo=SI2C_read(0)<<8;
ind_memo=ind_memo+SI2C_read(1);
SI2C_write(ind_memo,hi(Tik_num));ind_memo++;
SI2C_write(ind_memo,lo(Tik_num));ind_memo++;
SI2C_write(ind_memo,dip);ind_memo++;
SI2C_write(ind_memo,hour);ind_memo++;
SI2C_write(ind_memo,minute);ind_memo++;
SI2C_write(ind_memo,month);ind_memo++;
SI2C_write(ind_memo,date);ind_memo++;
SI2C_write(ind_memo,credito);ind_memo++;
SI2C_write(0,hi(ind_memo));
SI2C_write(1,lo(ind_memo));
}//salva ticket

ler_dados_memo()
{
Tik_num=SI2C_read(end_aux)<<8;end_aux++;
Tik_num=tik_num+SI2C_read(end_aux);end_aux++;
dip=SI2C_read(end_aux);end_aux++;
hour=SI2C_read(end_aux);end_aux++;
minute=SI2C_read(end_aux);end_aux++;
month=SI2C_read(end_aux);end_aux++;
date=SI2C_read(end_aux);end_aux++;
credito=SI2C_read(end_aux);end_aux++;
}
converte_dados()
{
wordtostr(Tik_num,txt);
uart1_write_text("Ticket ");
uart1_write_text(txt);
txt[0]=BCD2UpperCh(dip);
txt[1]=BCD2LowerCh(dip);
txt[2]='\0';
uart1_write_text("/");
uart1_write_text(txt);
uart1_write_text(" ");
txt[0]=BCD2UpperCh(date);
txt[1]=BCD2LowerCh(date);
txt[2]='/';
txt[3]=BCD2UpperCh(month);
txt[4]=BCD2LowerCh(month);
txt[5]=' ';
txt[6]=BCD2UpperCh(hour);
txt[7]=BCD2LowerCh(hour);
txt[8]=':';
txt[9]=BCD2UpperCh(minute);
txt[10]=BCD2LowerCh(minute);
uart1_write_text(txt);
uart1_write_text(' ');
wordtostr(credito,txt);
uart1_write_text(txt);
uart1_write_text(",00");
uart1_write(13);
}

unsigned char ler_rtc()
{
sec=read_ds1307(0); // read second
minute=read_ds1307(1); // read minute
hour=read_ds1307(2); // read hour
day=read_ds1307(3); // read day
date=read_ds1307(4); // read date
month=read_ds1307(5); // read month
year=read_ds1307(6); // read year
time[0] = BCD2UpperCh(hour);
time[1] = BCD2LowerCh(hour);
time[2] = ':';
time[3] = BCD2UpperCh(minute);
time[4] = BCD2LowerCh(minute);
time[5] = ':';
time[6] = BCD2UpperCh(sec);
time[7] = BCD2LowerCh(sec);
time[8] = ' ';
time[9] = '\0';

ddate[0] = BCD2UpperCh(date);
ddate[1] = BCD2LowerCh(date);
ddate[2] ='/';
ddate[3] = BCD2UpperCh(month);
ddate[4] = BCD2LowerCh(month);
ddate[5] ='/';
ddate[6] = '2';
ddate[7] = '0';
ddate[8] = BCD2UpperCh(year);
ddate[9] = BCD2LowerCh(year);
ddate[10] = '\0';
}
Apaga_buf()
{
for(x=0;x<=14;x++)
{
buf_rs232[x]=0;
ind_rx=0;
}
}
//********************************** apaga memoria
Apaga_memoria()
{
for(x=25;x<=ind_memo;x++)
{
SI2C_write(x,0);
}
SI2C_write(0,0);SI2C_write(1,25);//restaura indice
}

ler_Num_ticket()
{
delay_ms(20);
}
//*************************************************************************
void main() {

I2C1_Init(100000);
UART1_Init(9600);
TRISA=0B00000000;
trisc=0b10011000;
portc=0;
TRISB=0;
TRISD=0B11111111;
TRISE=0B00000000;
TRISB = 0;
PORTB = 0;


Delay_ms(100);
pulsos=0;
dip=0x10;
credito=100;



while(1)
{

//*********************************** relatorio *******************
if (UART1_Data_Ready() == 1) {
//****************************************** relatorio *******************
if(UART1_Read()=='1')
{
end_aux=25;//inicia end
ind_memo=SI2C_read(0)<<8;ind_memo=ind_memo+SI2C_read(1);
do
{
ler_dados_memo();
converte_dados();
}while(end_aux<ind_memo);//imrpime ticket ate ind memoria
//...-------------------------- continua relatorio
//total de tickets
//**************************** ler Num ticket impressos **********
var1byte=SI2C_read(3);unilo(Tik_num,var1byte);
var1byte=SI2C_read(2);unihi(Tik_num,var1byte);
//ler_Num_ticket();
wordtostr(Tik_num,txt);
uart1_write_text("Quant. Total de Ticket=");
uart1_write_text(txt);
uart1_write(13);
//valor tickets
//**************************** ler valor do total de creditos
var1byte=SI2C_read(7);unilo(Total_credito,var1byte);
var1byte=SI2C_read(6);unihi(Total_credito,var1byte);
var1byte=SI2C_read(5);unihigh(Total_credito,var1byte);
var1byte=SI2C_read(4);unihiguest(Total_credito,var1byte);
wordtostr(Total_credito,txt);
uart1_write_text("Valor Total de Ticket=");
uart1_write_text(txt);
uart1_write_text(",00");
uart1_write(13);
//quant relator
//icrementa quantidade relatorio
Relat_num=SI2C_read(0x08);
Relat_num++;
SI2C_write(0x08,Relat_num);
shorttostr(Relat_num,txt);
uart1_write_text("Quant. de Relatorios=");
uart1_write_text(txt);
uart1_write(13);
//ultimo relat

//salva o ultimo relatorio
SI2C_write(0x12,hour);
SI2C_write(0x13,minute);
SI2C_write(0x11,month);
SI2C_write(0x10,date);
}
//****************************************** imprime ticket *******************
if(UART1_Read()=='2')
{
//**************************** ler Num ticket impressos **********
var1byte=SI2C_read(3);unilo(Tik_num,var1byte);
var1byte=SI2C_read(2);unihi(Tik_num,var1byte);
//**************************** end *******************************

Tik_num++;
wordtostr(Tik_num,txt);
uart1_write_text("Ticket ");
uart1_write_text(txt);
uart1_write(13);
wordtostr(credito,txt);
uart1_write_text("credito=");
txt[0]='R';txt[1]='$';
uart1_write_text(txt);
uart1_write_text(",00");
uart1_write(13);
ler_rtc();//pega data e hora
uart1_write_text(time);
uart1_write_text(ddate);
salva_ticket();
//****************************salvar ticket
SI2C_write(2,hi(Tik_num));
SI2C_write(3,lo(Tik_num));
//**************************** ler valor do total de creditos
var1byte=SI2C_read(7);unilo(Total_credito,var1byte);
var1byte=SI2C_read(6);unihi(Total_credito,var1byte);
var1byte=SI2C_read(5);unihigh(Total_credito,var1byte);
var1byte=SI2C_read(4);unihiguest(Total_credito,var1byte);

Total_credito=Total_credito+credito;//soma valor do ticket ao total

SI2C_write(7,lo(Total_credito));
SI2C_write(6,hi(Total_credito));
SI2C_write(5,higher(Total_credito));
SI2C_write(4,highest(Total_credito));


}
//****************************************** apaga memoria *******************
if(UART1_Read()=='3')
{
ind_memo=SI2C_read(0)<<8;ind_memo=ind_memo+SI2C_read(1); //ler end atual
apaga_memoria();
uart1_write_text("memoria apagada");
}
//****************************************** inicializa sistema ****************
if(UART1_Read()=='4')
{
//**************** init indice
SI2C_write(0,0);SI2C_write(1,25);
//**************** init memoria
for(x=2;x<=0x18;x++){SI2C_write(x,0);}

}//******************************************** fim receptor
cristian
Word
 
Mensagens: 570
Registrado em: 03 Nov 2006 08:15
Localização: serrinha-ba

Mensagempor Sergio38br » 16 Set 2009 12:27

Um conselho depois das declarações de variaveis , defines, declare todas as suas funções, rotinas.

esta parte do inicio vc pode declarar depois das variaveis e defines, os includes devem estar no inicio, fica mais facil ler depois

ex.
Código: Selecionar todos
unsigned short read_ds1307(unsigned short address );// isto ja estava
void ler_Num_ticket();
void salva_Total_credito();
void ler_total_credito();

void salva_ticket(void);//isto acrescentei


[ ]'s
Sergio
Avatar do usuário
Sergio38br
Word
 
Mensagens: 759
Registrado em: 22 Nov 2007 13:39
Localização: São Paulo - SP

Mensagempor cristian » 16 Set 2009 13:34

fica assim as declaraçoes


includes

variaveis

defines

rotinas , funçoes

seria assim
cristian
Word
 
Mensagens: 570
Registrado em: 03 Nov 2006 08:15
Localização: serrinha-ba

Mensagempor Sergio38br » 16 Set 2009 16:43

exato

[ ]`s
Sergio
Avatar do usuário
Sergio38br
Word
 
Mensagens: 759
Registrado em: 22 Nov 2007 13:39
Localização: São Paulo - SP

Mensagempor fabim » 16 Set 2009 16:53

sergio diga+ Exatamente tudo errado e uma verdadeira salada.

Cristian, tu disse uma coisa.. mais fez outra totalemente diferente.
Tem include no meio do fonte!!

Cara faz assim ó.

Todos includes

Todos Defines

Todas Variaveis

Todas as rotinas

Void interrupt (void);

void Main(void){

}

Pode fazer os prototipos das rotinas logo abaixo dos defines.

Compila novamente e testa.

Fabim
Mano, ve só.
Sou responsável pelo que escrevo!!! E não pelo que você entende !!!
fabim
Dword
 
Mensagens: 5001
Registrado em: 16 Out 2006 10:18
Localização: aqui uái!!!?

Mensagempor cristian » 16 Set 2009 17:48

quando coloquei os includes antes das variaveis deu problema pois nao tem declarado ainda as variaveis
cristian
Word
 
Mensagens: 570
Registrado em: 03 Nov 2006 08:15
Localização: serrinha-ba


Voltar para PIC

Quem está online

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

x