大家帮帮忙,软件解码2262?(附有程序)
解码时序图
解不出码啊,各位大虾请指教那里出了问题,谢了
//----------------------------------------
//
// 单片机模拟2272解码
//
//--------------------------------------
#include <reg52.h>
#define uchar unsigned char
void int_0(); //外部中断0
void display();
void delay_1s(uchar);
sbit P1_0=P1^0;
sbit P1_1=P1^1;
sbit P1_2=P1^2;
sbit P1_3=P1^3;
sbit P3_2=P3^2;
sbit P3_5=P3^5;
bit FINT0; //中断标志为
uchar temp,data0,data1,counttime;
void int_0() interrupt 0 using 1
{
unsigned int time,time1;
FINT0=0; //清中断标志
ET1=0;
TF2=0; //溢出标志
TR2=1;
P3_5=0; //红灯亮 //测试时用
// delay_1s(1); //测试时用
// P3_5=1; //红灯灭 //测试时用
if(P3_2==1)
{
TR2=0;
time=TH2*256+TL2;
time1=time;
}
if(time1 <15000) //限时15000us
{
if(time1> 780&&time1 <1100) //0
{
temp=0x00;
}
if(time1> 210&&time1 <450) //1
{
temp=0x01;
}
if(time1> 11000&&time1 <12500) //同步码
{
counttime=0;
data0=0;
data1=0;
return; //返回,等待下次开始接收
}
counttime++;
if(counttime <8) //开始接收前8位
{
data0=data0|temp;
data0=data0 < <1;
}
if(counttime==8) // 第8位
{
data0=data0|temp;
}
if(counttime> 8) //开始接收后4位
{
data1=data1|0x0f;
data1=data1|temp;
data1=data1 < <1;
}
if(counttime==12) // 第12位
{
data1=data1|temp;
counttime=0;
}
}
else
{
TH2=0x00;
TL2=0x00;; //误码,重新记时
}
}
void main()
{
EX0=1; // INT0中断开
IT0=1; // INT0下降沿触发(为0 低电平触发)
TH2=0x00; //15ms
TL2=0x00;
EA=1;
while(1)
{
display();
}
}
void display()
{
if(data0==0x00)
{
P1_0=!data1&0x01;
delay_1s(1);
P1_1=!data1&0x02;
delay_1s(1);
P1_2=!data1&0x04;
delay_1s(1);
P1_3=!data1&0x08;
delay_1s(1);
}
}
void delay_1s(uchar k) //1s
{
uchar i,j,t;
for(i=0;i <k;i++)
for(j=0;j <100;j++)
for(t=0;t <100;t++);
}
发表时间:2006年5月22日23:34:34