Mas esse erro ocorre apenas na simulação ou rodando gravado na placa também ?
No meu tempo, simulação de interrupção não era algo nada confiável.
Moderadores: andre_luis, 51, guest2003, Renie
for(z=1; z<8; z++)
{
dado[z]=getc();
}
// no programa principal, declara z como variavel global, e inicializa com valor zero
int z = 0 ;
// na interrupçao, substitui o "for" pelo "if"
if (z<8)
{
dado[z++]=getc();
}
else z = 0 ;
#include <16F628A.h>
#FUSES NOWDT //No Watch Dog Timer
#FUSES HS //High speed Osc (> 4mhz for PCM/PCH) (>10mhz for PCD)
#FUSES PUT //Power Up Timer
#FUSES NOPROTECT //Code not protected from reading
#FUSES NOBROWNOUT //No brownout reset
#FUSES NOMCLR //Master Clear pin used for I/O
#FUSES NOLVP //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOCPD //No EE protection
#use delay(clock=4000000)
#use rs232(baud=1200,parity=N,xmit=PIN_B2,rcv=PIN_B1,bits=8)
#byte porta =0x05
#byte portb =0x06
#byte trisa =0x85
#byte trisb =0x86
#byte pir1 =0x0c
#bit recebeu = pir1.5
#bit led=porta.1
char dado[9];
int x=1;
int conta=0;
#int_RDA
void RDA_isr(void)
{
if(recebeu==1)
{
if(dado[0]==0XAA)
{
dado[x]=getc();
x++;
if(x==8)
{
x=1;
}
}
}
}
void limpa (void)
{
dado[4]=0x00;
}
void main()
{
port_b_pullups(TRUE);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);
enable_interrupts(INT_RDA);
enable_interrupts(GLOBAL);
porta=0x00;
portb=0x00;
trisa=0b00000000;
trisb=0b11111010;
dado[0]=0XAA;
while(true)
{
if(dado[1]==0x4A && dado[2]==0x4C && dado[3]==0x4B && dado[4]+dado[5]==0x4F)
{
led=1;
conta=0;
recebeu=0;
}
if(dado[1]==0x4B && dado[2]==0x4C && dado[3]==0x4A && dado[4]+dado[5]==0x40)
{
led=0;
conta=0;
recebeu=0;
}
else
{
conta++;
delay_ms(100);
if(conta==100)
{
while(true)
{
led=~led;
}
}
}
}
}
merovirus escreveu:realmente ate esqueci de mencionar isso eu havia deduzido que o for poderia estar causando o problema entao o removi e realmente pus um if porem também travava ae eu desconfiei do compilador achei que ele tava loco ,e deletei tudo e comecei do zero ate agora ta funfando ! nao ficando travado na interrupção, realmente acho que na vida real teria funcionado a simulação nao é 100% para resolver a questão da perda da comunicação, fiz assim, como agora ele nao trava na int eu coloquei um contador caso nenhuma das opções fosse atendida ele a zera, caso ela estoure ele sinaliza a perda da comunicação vou postar o codigo a seguir. mas esse nao é o código real é so o teste que fiz como disse fiquei frustrado e deletei tudo.obrigado pela ajuda e paciência amigo vou refazer o código e ver se desta vez funciona tudo !
![]()
- Código: Selecionar todos
#include <16F628A.h>
#FUSES NOWDT //No Watch Dog Timer
#FUSES HS //High speed Osc (> 4mhz for PCM/PCH) (>10mhz for PCD)
#FUSES PUT //Power Up Timer
#FUSES NOPROTECT //Code not protected from reading
#FUSES NOBROWNOUT //No brownout reset
#FUSES NOMCLR //Master Clear pin used for I/O
#FUSES NOLVP //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOCPD //No EE protection
#use delay(clock=4000000)
#use rs232(baud=1200,parity=N,xmit=PIN_B2,rcv=PIN_B1,bits=8)
#byte porta =0x05
#byte portb =0x06
#byte trisa =0x85
#byte trisb =0x86
#byte pir1 =0x0c
#bit recebeu = pir1.5
#bit led=porta.1
char dado[9];
int x=1;
int conta=0;
#int_RDA
void RDA_isr(void)
{
if(recebeu==1)
{
if(dado[0]==0XAA)
{
dado[x]=getc();
x++;
if(x==8)
{
x=1;
}
}
}
}
void limpa (void)
{
dado[4]=0x00;
}
void main()
{
port_b_pullups(TRUE);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);
enable_interrupts(INT_RDA);
enable_interrupts(GLOBAL);
porta=0x00;
portb=0x00;
trisa=0b00000000;
trisb=0b11111010;
dado[0]=0XAA;
while(true)
{
if(dado[1]==0x4A && dado[2]==0x4C && dado[3]==0x4B && dado[4]+dado[5]==0x4F)
{
led=1;
conta=0;
recebeu=0;
}
if(dado[1]==0x4B && dado[2]==0x4C && dado[3]==0x4A && dado[4]+dado[5]==0x40)
{
led=0;
conta=0;
recebeu=0;
}
else
{
conta++;
delay_ms(100);
if(conta==100)
{
while(true)
{
led=~led;
}
}
}
}
}
Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante