PDA

View Full Version : Ngắt RB mô phỏng bình thường nhưng mạch thực tếkhông chạy dc


zhangthang
08-12-2012, 09:26 AM
mình có 1 chương trình, khi mô phỏng thì bình thường nhưng thử cắm mạch thì ngắt RB ko hoạt động, nhờ mọi người chỉ giúp

#include <16f877a.h>
#device *=16
#FUSES NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT,NOLVP, NOCPD, NOWRT
#use delay(clock=4000000)
#use rs232 (baud=9600 , parity=n , xmit=pin_C6 , rcv=pin_C7,bits=9 )

int khoang;
int tang;
int step=0;
int khoanggui=3;
int tanggui=3;
int khoangnhan=1;
int tangnhan=1;
int tran1=1;
int tran2=1;
int tran3=1;
char daygui='b';
char daynhan='a';
int trangthai=1;
char buffer[8];
int i;

#INT_RB
void cn_khoang()
{

if (input(pin_B7))
{
khoang=1;
}

if (input(pin_B6))
{
khoang=2;
}

if (input(pin_B5))
{
khoang=3;
}

if(input(pin_B4))
{
step++;
if(step==2)
{
step=0;
trangthai=2;
}

}

}

#INT_RDA
void nhan_lenh()
{

buffer[i]=getc();
i++;

if (buffer[0]=='1')
{
tangnhan=1;
}
else if (buffer[0]=='2')
{
tangnhan=2;
}
else if (buffer[0]=='3')
{
tangnhan=3;
}

if (buffer[1]=='1')
{
khoangnhan=1;
}
else if (buffer[1]=='2')
{
khoangnhan=2;
}
else if (buffer[1]=='3')
{
khoangnhan=3;
}

daynhan=buffer[2];

if (buffer[3]=='1')
{
tanggui=1;
}
else if (buffer[3]=='2')
{
tanggui=2;
}
else if (buffer[3]=='3')
{
tanggui=3;
}

if (buffer[4]=='1')
{
khoanggui=1;
}
else if (buffer[4]=='2')
{
khoanggui=2;
}
else if (buffer[4]=='3')
{
khoanggui=3;
}

daygui=buffer[5];

if (i==6)
{
i=0;
trangthai=1;
tran1=1;
tran2=1;
tran3=1;
}

}

void main()
{
setup_ccp1(ccp_pwm);
setup_ccp2(ccp_pwm);
enable_interrupts ( INT_RB ) ;
enable_interrupts ( INT_RDA ) ;
enable_interrupts ( GLOBAL ) ;
setup_timer_2(t2_div_by_16,255,16);
buffer[0]='1';
buffer[1]='1';
buffer[2]='a';
buffer[3]='3';
buffer[4]='3';
buffer[5]='b';
while(true)
{
if (trangthai==0)
{
set_pwm1_duty(0);

}
if (trangthai==1)
{

if(step==0)
{
if(khoang<khoangnhan)
{
output_high(pin_B1);
set_pwm1_duty(1000);
}
if (khoang>khoangnhan)
{
output_low(pin_B1);
set_pwm1_duty(1000);
}
if (khoang==khoangnhan)
{
set_pwm1_duty(0);
if (tran1==1)
{
putc('s');
putc(buffer[0]);
putc(buffer[2]);
putc(buffer[3]);
putc(buffer[5]);
tran1=0;
}
}
}
if (step==1)
{
if (khoang==khoanggui)
{
set_pwm1_duty(0);
if (tran2==1)
{
putc('c');
tran2=0;
}
}
if (khoang<khoanggui)
{
output_high(pin_B1);
set_pwm1_duty(1000);
}
if (khoang>khoanggui)
{
output_low(pin_B1);
}
}
}
if (trangthai==2)
{
if (khoang>1)
{
output_low(pin_B1);
set_pwm1_duty(1000);
}
else
{
set_pwm1_duty(0);
if (tran3==1)
{
putc('l');
tran3=0;
trangthai=0;
}
}
}
}
}

http://i1295.photobucket.com/albums/b633/zhangthang/untitled.png

tdm
08-12-2012, 04:14 PM
mình có 1 chương trình, khi mô phỏng thì bình thường nhưng thử cắm mạch thì ngắt RB ko hoạt động, nhờ mọi người chỉ giúp

#include <16f877a.h>
#device *=16
#FUSES NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT,NOLVP, NOCPD, NOWRT
#use delay(clock=4000000)
#use rs232 (baud=9600 , parity=n , xmit=pin_C6 , rcv=pin_C7,bits=9 )

int khoang;
int tang;
int step=0;
int khoanggui=3;
int tanggui=3;
int khoangnhan=1;
int tangnhan=1;
int tran1=1;
int tran2=1;
int tran3=1;
char daygui='b';
char daynhan='a';
int trangthai=1;
char buffer[8];
int i;

#INT_RB
void cn_khoang()
{

if (input(pin_B7))
{
khoang=1;
}

if (input(pin_B6))
{
khoang=2;
}

if (input(pin_B5))
{
khoang=3;
}

if(input(pin_B4))
{
step++;
if(step==2)
{
step=0;
trangthai=2;
}

}

}

#INT_RDA
void nhan_lenh()
{

buffer[i]=getc();
i++;

if (buffer[0]=='1')
{
tangnhan=1;
}
else if (buffer[0]=='2')
{
tangnhan=2;
}
else if (buffer[0]=='3')
{
tangnhan=3;
}

if (buffer[1]=='1')
{
khoangnhan=1;
}
else if (buffer[1]=='2')
{
khoangnhan=2;
}
else if (buffer[1]=='3')
{
khoangnhan=3;
}

daynhan=buffer[2];

if (buffer[3]=='1')
{
tanggui=1;
}
else if (buffer[3]=='2')
{
tanggui=2;
}
else if (buffer[3]=='3')
{
tanggui=3;
}

if (buffer[4]=='1')
{
khoanggui=1;
}
else if (buffer[4]=='2')
{
khoanggui=2;
}
else if (buffer[4]=='3')
{
khoanggui=3;
}

daygui=buffer[5];

if (i==6)
{
i=0;
trangthai=1;
tran1=1;
tran2=1;
tran3=1;
}

}

void main()
{
setup_ccp1(ccp_pwm);
setup_ccp2(ccp_pwm);
enable_interrupts ( INT_RB ) ;
enable_interrupts ( INT_RDA ) ;
enable_interrupts ( GLOBAL ) ;
setup_timer_2(t2_div_by_16,255,16);
buffer[0]='1';
buffer[1]='1';
buffer[2]='a';
buffer[3]='3';
buffer[4]='3';
buffer[5]='b';
while(true)
{
if (trangthai==0)
{
set_pwm1_duty(0);

}
if (trangthai==1)
{

if(step==0)
{
if(khoang<khoangnhan)
{
output_high(pin_B1);
set_pwm1_duty(1000);
}
if (khoang>khoangnhan)
{
output_low(pin_B1);
set_pwm1_duty(1000);
}
if (khoang==khoangnhan)
{
set_pwm1_duty(0);
if (tran1==1)
{
putc('s');
putc(buffer[0]);
putc(buffer[2]);
putc(buffer[3]);
putc(buffer[5]);
tran1=0;
}
}
}
if (step==1)
{
if (khoang==khoanggui)
{
set_pwm1_duty(0);
if (tran2==1)
{
putc('c');
tran2=0;
}
}
if (khoang<khoanggui)
{
output_high(pin_B1);
set_pwm1_duty(1000);
}
if (khoang>khoanggui)
{
output_low(pin_B1);
}
}
}
if (trangthai==2)
{
if (khoang>1)
{
output_low(pin_B1);
set_pwm1_duty(1000);
}
else
{
set_pwm1_duty(0);
if (tran3==1)
{
putc('l');
tran3=0;
trangthai=0;
}
}
}
}
}
http://i1295.photobucket.com/albums/b633/zhangthang/untitled.png
dùng4 con r 10k nối chân rb4...rb7 xuống mass.