Jump to content
Fórum Script Brasil
  • 0

falha em .hex feito em C


habibi

Question

//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 to comment
Share on other sites

3 answers to this question

Recommended Posts

  • 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 to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      152.2k
    • Total Posts
      652k
×
×
  • Create New...