標(biāo)題:
PT2262 STC89C516單片機軟件解碼失敗怎么回事?
[打印本頁]
作者:
51jia
時間:
2018-4-29 00:47
標(biāo)題:
PT2262 STC89C516單片機軟件解碼失敗怎么回事?
12M晶振,反碼方式解碼,數(shù)據(jù)輸入P3^2口,外部中斷0。請各位幫忙看看是那里出了問題,我現(xiàn)在沒有查到原因,本人先謝謝各位了!。
我寫的代碼如下:
/*-----------------------------------------------------------------------------------------
說明:
1 反碼方式解碼4.7M 6.8K 1t147us 4t588us 12t1764us 124t18228us
2 編程思路:定時器測量脈沖寬度,長脈沖標(biāo)記1,短脈沖標(biāo)記0,共記24個脈沖保存于數(shù)組中與地址碼對比.
-------------------------------------------------------------------------------------------*/
#include <reg51.h>
#define uint unsigned int
#define uchar unsigned char
sbit din=P3^2;
sbit d1=P1^0;
sbit d2=P1^1;
sbit d3=P1^2;
sbit d4=P1^3;//4個解碼成功指示燈
uchar b,c;
uint a;
bit datend=0;
uchar dateok[24];
void init();
void delayus(uchar c);
void delay160ms();
void timer();
void outcode();//輸出
void main()
{
init();
while(1)
{
outcode();
}
}
void delayus(uchar c)//c=1 200us
{
uchar a,b;
for(b=c;b>0;b--)
for(a=98;a>0;a--);
}
void delay160ms()
{
uchar a,b,c;
for(c=193;c>0;c--)
for(b=118;b>0;b--)
for(a=2;a>0;a--);
}
void init()
{
P1=0x00;
IT0=1;
EX0=1;
EA=1;
TMOD=0x09;
TH0=0;
TL0=0;
}
void int0() interrupt 0
{
EX0=0;
timer();
if((a>17000)&&(a<19000))//同步碼確認
{
TH0=0;
TL0=0;
for(b=0;b<24;b++)
{
timer();
if((a>550)&&(a<620))
{
c=0x00;//窄脈沖標(biāo)記0
TH0=0;
TL0=0;
delayus(8);
}
else if((a>1600)&&(a<1900))
{
c=0x01;//寬脈沖標(biāo)記1
TH0=0;
TL0=0;
delayus(2);
}
dateok[b]=c;
}
datend=1;//解碼成功標(biāo)志位
delay160ms();//150528us 等待第3第4組結(jié)束
EX0=1;
}
else
{
TH0=0;
TL0=0;
EX0=1;
}
}
void timer()//中斷字函數(shù)
{
while(din);
TR0=1;
while(!din);
TR0=0;
a=TH0*256+TL0;
}
void outcode()//輸出
{
if(datend==1)
{
datend=0;
if((dateok[0]==0)&&(dateok[1]==0)&&(dateok[2]==1)&&(dateok[3]==1)&&
(dateok[4]==1)&&(dateok[5]==0)&&(dateok[6]==0)&&(dateok[7]==0)&&
(dateok[8]==0)&&(dateok[9]==0)&&(dateok[10]==1)&&(dateok[11]==1)&&
(dateok[12]==1)&&(dateok[13]==1)&&(dateok[14]==0)&&(dateok[15]==0))//地址碼確認10f11001
{//解碼后數(shù)據(jù)
if((dateok[16]==0)&&(dateok[17]==0)&&(dateok[18]==1)&&(dateok[19]==1)&&
(dateok[20]==1)&&(dateok[21]==1)&&(dateok[22]==1)&&(dateok[23]==1))//d0
{
d1=~d1;
}
if((dateok[16]==1)&&(dateok[17]==1)&&(dateok[18]==0)&&(dateok[19]==0)&&
(dateok[20]==1)&&(dateok[21]==1)&&(dateok[22]==1)&&(dateok[23]==1))//d1
{
d2=~d2;
}
if((dateok[16]==1)&&(dateok[17]==1)&&(dateok[18]==1)&&(dateok[19]==1)&&
(dateok[20]==0)&&(dateok[21]==0)&&(dateok[22]==1)&&(dateok[23]==1))//d2
{
d3=~d3;
}
if((dateok[16]==1)&&(dateok[17]==1)&&(dateok[18]==1)&&(dateok[19]==1)&&
(dateok[20]==1)&&(dateok[21]==1)&&(dateok[22]==0)&&(dateok[23]==0))//d3
{
d4=~d4;
}
delayus(20);
}
}
}
復(fù)制代碼
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1