标题:
PT2262 STC89C516单片机软件解码失败怎么回事?
[打印本页]
作者:
51jia
时间:
2018-4-29 00:47
标题:
PT2262 STC89C516单片机软件解码失败怎么回事?
12M晶振,反码方式解码,数据输入P3^2口,外部中断0。请各位帮忙看看是那里出了问题,我现在没有查到原因,本人先谢谢各位了!!!
我写的代码如下:
/*-----------------------------------------------------------------------------------------
说明:
1 反码方式解码4.7M 6.8K 1t147us 4t588us 12t1764us 124t18228us
2 编程思路:定时器测量脉冲宽度,长脉冲标记1,短脉冲标记0,共记24个脉冲保存于数组中与地址码对比.
-------------------------------------------------------------------------------------------*/
#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;//窄脉冲标记0
TH0=0;
TL0=0;
delayus(8);
}
else if((a>1600)&&(a<1900))
{
c=0x01;//宽脉冲标记1
TH0=0;
TL0=0;
delayus(2);
}
dateok[b]=c;
}
datend=1;//解码成功标志位
delay160ms();//150528us 等待第3第4组结束
EX0=1;
}
else
{
TH0=0;
TL0=0;
EX0=1;
}
}
void timer()//中断字函数
{
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
{//解码后数据
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);
}
}
}
复制代码
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1