Ir para conteúdo
Fórum Script Brasil
  • 0

falha em .hex feito em C


habibi

Pergunta

//Calibrador p70
//
#include <16F628.h>
#device *=16
///3505-2871
#FUSES NOWDT
#FUSES INTRC_IO
#FUSES PUT
#FUSES PROTECT=3
#FUSES BROWNOUT
#FUSES NOMCLR
#FUSES NOLVP
#FUSES NOCPD
//
#use delay(clock=4000000)
#use rs232(baud=9600,parity=E,xmit=PIN_a0,rcv=PIN_a1,bits=8)
//#use rs232(baud=9600,parity=N,xmit=PIN_a0,rcv=PIN_a1,bits=8)
#define use_portb_lcd TRUE
#include <lcd1.c>
#include <stdlib.h>
#use FAST_IO(A)
#use FAST_IO(B)
#byte porta=0x05
#byte portb=0x06
#byte trisb = 0x86
#byte trisa = 0X85
#byte sai=0xff
#bit botao1=porta.7
#bit botao2=porta.6
#bit botao3=porta.5
#bit Rele_Reset=porta.3
#bit Rele_Grava=porta.2
#bit tristx=trisa.0
#bit bittx=porta.0
#bit trisb3=trisb.3
char versao[20];
char wversao[1];
byte data;
byte wdata[6];
int k,i,l,c;
void p70()
{
rele_reset = 0;
rele_grava = 0;
trisb = 1;
lcd_putc("\f");
lcd_gotoxy(1,1);
lcd_putc("3-Atual 1-Versao");
lcd_gotoxy(1,2);
lcd_putc("2-Teste/Calibra");
botao1 = 1;
while (1)
{
if (botao2 == 0) {
lcd_putc("\f");
lcd_gotoxy(1,1);
lcd_putc(" Lendo EPROM ");
Rele_Reset = 1;
delay_ms(1200);
Rele_Reset = 0;
lcd_putc("\f");
lcd_gotoxy(1,1);
l = 1;
c = 1;
for (i=1;i<=23;++i) {
wversao[0] = getc();
if (i > 3) {
versao[i-3] = wversao[0];
};
};
for (i=1;i<=20;i++) {
lcd_gotoxy(c,l);
lcd_putc(versao);
c++;
if (c==16) {
l = 2;
c=1;
};
};
while (Botao3 == 1) {
};
while (Botao3 == 0) {
};
reset_cpu();
};
if (Botao1 == 0) {
Rele_Grava = 1;
lcd_putc("\f");
lcd_gotoxy(1,1);
lcd_putc(" Modo Atualiza ");
lcd_gotoxy(1,2);
lcd_putc("1-Reset 2-Sair ");
botao1 = 1;
while (Botao3 == 1) {
if (Botao2 == 0) {
Rele_Reset = 1;
delay_ms(600);
};
if (Botao2 == 1) {
Rele_Reset = 0;
};
};
reset_cpu();
};
if (Botao3 == 0) {
lcd_putc("\f");
lcd_gotoxy(1,1);
lcd_putc("3- Testa Motor");
lcd_gotoxy(1,2);
lcd_putc("1-Calibra 2-Sai");
k = 0;
delay_ms(1000);
while (Botao3 == 1) {
if (Botao2 == 0) {
lcd_putc("\f");
lcd_gotoxy(1,1);
lcd_putc(" Modo Calibrar ");
putc(110);
delay_ms(1000);
putc(20);
delay_ms(1000);
lcd_gotoxy(1,2);
lcd_putc("Inserir a Folha");
while (Botao3 == 1) {
};
rele_reset = 1;
delay_ms(1000);
reset_cpu();
};
if (Botao1 == 0) {
lcd_putc("\f");
lcd_gotoxy(1,1);
lcd_putc("Veloci. Frente ");
putc(110);
delay_ms(1000);
putc(25);
delay_ms(1000);
putc(01);
for (i=1;i<=100;++i) {
data = getc();
lcd_gotoxy(0,2);
printf(LCD_PUTC, " %u",data);
//delay_ms(1);
};
putc(99);
lcd_putc("\f");
lcd_putc("Veloci. Tras ");
lcd_gotoxy(1,1);
putc(110);
delay_ms(1000);
putc(25);
delay_ms(1000);
putc(02);
for (i=1;i<=100;++i) {
data = getc();
lcd_gotoxy(0,2);
printf(LCD_PUTC, " %u",data);
//delay_ms(1);
};
putc(99);
lcd_putc("\f");
lcd_gotoxy(1,1);
lcd_putc("1- Testa Motor");
lcd_gotoxy(1,2);
lcd_putc("2-Calibra 3-Sai");
Botao3 == 0;
k == 0;
};
};
while (botao3==0) {
delay_us(1);
};
reset_cpu();
};
}
}
void bl700() {
putc(51);
putc(00);
delay_ms(1000);
putc(10);
putc(56);
putc(00);
delay_ms(1000);
lcd_putc("\f");
lcd_gotoxy(1,1);
lcd_putc("Insira o cartao");
lcd_gotoxy(1,2);
lcd_putc("Menu para Cont.");
while (botao1 == 1) {
delay_us(100);
};
delay_ms(500);
lcd_putc("\f");
lcd_gotoxy(1,1);
putc(00);
k = 0;
lcd_putc(" 1 2 3 - 4 5 6");
while (botao1 == 1) {
do {
data = getc();
} while (data==0) ;
k = k + 1;
if (k==5) {
wdata[0] = data;
};
if (k==6) {
wdata[1] = data;
};
if (k==7) {
wdata[2] = data;
};
if (k==8) {
wdata[3] = data;
};
if (k==9) {
wdata[4] = data;
};
if (k==10) {
wdata[5] = data;
};
if (k>=16) {
lcd_gotoxy(1,2);
printf(LCD_PUTC, " %X%X%X - %X%X%X",wdata[0],wdata[1],wdata[2],wdata[3],wdata[4],wdata[5]);
k = 0;
delay_ms(400);
putc(00);
};
if (botao3 == 0) {
Reset_cpu();
};
};
putc(00);
lcd_putc("\f");
lcd_gotoxy(0,1);
lcd_putc(" Retire a folha ");
putc(255);
delay_ms(1000);
putc(10);
putc(56);
putc(255);
delay_ms(2000);
reset_cpu();
}
void Main() {
rele_reset = 0;
rele_grava = 0;
lcd_init();
lcd_gotoxy(1,1);
lcd_putc(" calibrador ");
lcd_gotoxy(1,2);
lcd_putc("1-P70 2-BL700");
botao1 = 1;
botao2 = 1;
botao3 = 1;
while (1)
{
if (botao1 == 0) {
delay_ms(100);
if (botao1 == 0) {
while (botao1 == 0) {
};
p70();
};
};
if (botao3 == 0) {
while (botao3 == 0) {
};
bl700();
};
};
reset_cpu();
}
existe algum erro??? pois ele não esta fazendo 2 funções que seria "lendo eprom" e "modo calibrar" no void p70(){
Link para o comentário
Compartilhar em outros sites

3 respostass a esta questão

Posts Recomendados

  • 0

Não sei se eu conseguiria te ajudar por aqui. porque você está com um programa pra PIC. Aparentemente não vejo erro no seu código (embora seja difícil afirmar isso, porque não tenho como depurá-lo, visto que não tenho o esquema do seu circuito). O problema é que quando se trabalha com pic, a gente sempre culpa o código pelo mal funcionamento do circuito. E às vezes o problema não está no código.

Você já verificou o seu display? Os outros caracteres que você manda escrever aparecerem normalmente? Não se esqueça que display lcd depende de um tempo entre as escritas, mesmo usando a biblioteca do microc. Existe algum pino do pic que não esteja totalmente definido e você esteja usando? O oscilador do pic é interno ou externo? Ele não está sofrendo nenhuma interferência? (Principalmente se estiver usando motor). Existem muitos fatores que podem influenciar no funcionamento.

Estou vendo que você não configurou o conversor AD, que por padrão é o que vem ativado quando você configura o TRISA como entrada.

Caso esteja tudo ok. Tente utilizar as interrupções INT ou PORTB.

Boa sorte!

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...