Chào các bạn !
Mình tự viết đoạn code cho Pic 12f629 để giải mã tín hiệu hồng ngoại của nút power remote. Code đã nhận đúng tín hiệu và đã chạy, nhưng có 1 lỗi mình ko thể khắc phục được như sau :
Nhấn nút power lần 1 RA0 = 1 ( đúng như code đã viết )
Nhấn nút power lần 2 RA1 = 1 ( đúng như code đã viết )
Nhấn nút power lần 3 RA0 = 0, RA1 = 0 ( đúng như code đã viết )
Nhưng đến đây thì ko thể điều khiển được nữa. Mình phải nhấn nút reset pic mới có thể điều khiển được.
Các bạn xem giúp mình đoạn code có sai chỗ nào ko vậy. Code này mình viết đã chạy tốt trên pic 16f84a, mình đã chuyển code sang 12f629 thì bị lỗi như vậy. Mong các bạn giúp đỡ ! Dưới đây là code của mình.
#include <12f629.h>
#include <def_12f629.h>
#fuses XT,NOWDT,NOPUT,NOPROTECT,NOCPD,NOMCLR
#use delay(clock=4000000)
unsigned char i,cmd;
int8 a;
void nhanma();
void main()
{
Trisa0 = 0;
Trisa1 = 0;
Trisa2 = 1;
RA0 = 0;
RA1 = 0;
RA2 = 1;
a=0;
while(1)
{
if(!input(pin_A2)) {nhanma();}
}
}
void nhanma()
{
cmd=0;
for(i=0;i<3;++i)
{
delay_us(750);
if(input(pin_A2)) return; // thoat khoi vong lap
}
while(!input(pin_A2));
for(i=0;i<7;++i)
{
cmd>>=1; // dich sang fai 1 bit
while(input(pin_A2));
delay_us(750);
if(!input(pin_A2))
{
cmd|=0x80; // cmd = cmd|0x80 phep OR tung bit cmd voi 0x80(=10000000)
while(!input(pin_A2));
}
}
cmd>>=1; // dich sang fai 1 bit
if(cmd==21) // 0x15 or 0010101 ( phim power )
{
a++;
if(a==1) {RA0 = 1;RA1 = 0;} // nhan Power lan 1 RA0 = 1
if(a==2) {RA0 = 0;RA1 = 1;} // nhan Power lan 2 RA1 = 1
if(a==3) {RA0 = 0;RA1 = 0;} //
}
delay_ms(250);
}
Mình tự viết đoạn code cho Pic 12f629 để giải mã tín hiệu hồng ngoại của nút power remote. Code đã nhận đúng tín hiệu và đã chạy, nhưng có 1 lỗi mình ko thể khắc phục được như sau :
Nhấn nút power lần 1 RA0 = 1 ( đúng như code đã viết )
Nhấn nút power lần 2 RA1 = 1 ( đúng như code đã viết )
Nhấn nút power lần 3 RA0 = 0, RA1 = 0 ( đúng như code đã viết )
Nhưng đến đây thì ko thể điều khiển được nữa. Mình phải nhấn nút reset pic mới có thể điều khiển được.
Các bạn xem giúp mình đoạn code có sai chỗ nào ko vậy. Code này mình viết đã chạy tốt trên pic 16f84a, mình đã chuyển code sang 12f629 thì bị lỗi như vậy. Mong các bạn giúp đỡ ! Dưới đây là code của mình.
#include <12f629.h>
#include <def_12f629.h>
#fuses XT,NOWDT,NOPUT,NOPROTECT,NOCPD,NOMCLR
#use delay(clock=4000000)
unsigned char i,cmd;
int8 a;
void nhanma();
void main()
{
Trisa0 = 0;
Trisa1 = 0;
Trisa2 = 1;
RA0 = 0;
RA1 = 0;
RA2 = 1;
a=0;
while(1)
{
if(!input(pin_A2)) {nhanma();}
}
}
void nhanma()
{
cmd=0;
for(i=0;i<3;++i)
{
delay_us(750);
if(input(pin_A2)) return; // thoat khoi vong lap
}
while(!input(pin_A2));
for(i=0;i<7;++i)
{
cmd>>=1; // dich sang fai 1 bit
while(input(pin_A2));
delay_us(750);
if(!input(pin_A2))
{
cmd|=0x80; // cmd = cmd|0x80 phep OR tung bit cmd voi 0x80(=10000000)
while(!input(pin_A2));
}
}
cmd>>=1; // dich sang fai 1 bit
if(cmd==21) // 0x15 or 0010101 ( phim power )
{
a++;
if(a==1) {RA0 = 1;RA1 = 0;} // nhan Power lan 1 RA0 = 1
if(a==2) {RA0 = 0;RA1 = 1;} // nhan Power lan 2 RA1 = 1
if(a==3) {RA0 = 0;RA1 = 0;} //
}
delay_ms(250);
}
Comment