红外遥控解码求助!!!
各位大吓,本人刚学C语言,编写了一个红外接收解码程序,得解码不正常,请那位大吓指点一下!#include "reg51.h"
#include "intrins.h"
#include <string.h>
sbit rem=P3^2;
sbit ACC0=ACC^0;
sbit ACC7=ACC^7;
sbit led=P3^6;
sbit bell=P3^5;
bit flay_mima=1;
bit flay_send=1;
bit temp_k;
unsigned char num,key_num;
unsigned char temp[5];
void Delay101ms(unsigned char t)//50000
{
unsigned char i;
for(i=0;i<t;i++)
{
;
}
}
Delay8400us(unsigned char t)//86=8.41ms
{
unsigned char i;
for(i=0;i<t;i++)
{
Delay101ms(50000);
}
}
Delay1000ms(unsigned char t)//10=1ms
{
unsigned char i;
for(i=0;i<t;i++)
{
Delay101ms(50000);
}
}
Delay2400ms(unsigned char t)//25=2.45ms
{
unsigned char i;
for(i=0;i<t;i++)
{
Delay101ms(50000);
}
}
void inint()
{
IT0=1;
EX0=1;
EA=1;
}
void bell_b()
{
bell=0;
Delay8400us(86);
// Delay8400us(86);
// Delay8400us(86);
Delay8400us(86);
Delay8400us(86);
bell=1;
}
/*
void Delay()
{
Delay8400us(86);
Delay8400us(86);
Delay8400us(86);
Delay8400us(86);
Delay8400us(86);
}
*/
unsigned char read_byte()
{
unsigned char t;
do{}
while(rem==0);
Delay8400us(9);//840us
for(t=0;t<8;t++)
{
if(rem==0)
{
ACC=ACC>>1;
ACC7=rem;
}
if(rem==1)
{
ACC=ACC>>1;
ACC7=rem;
Delay1000ms(10);
}
do{}
while(rem==0);
Delay8400us(9);//840us
}
return (ACC);
}
void exit()
{
rem=1;
EA=1;
}
void int0() interrupt 0 using 2
{
EA=0;
Delay8400us(86);
if(rem==1)
{
// bell_b();
exit(); //接收错误
}
if(rem==0)
{
do{}
while(rem==0);//等待高电平避开9毫秒低电平
// {
Delay2400ms(25);
if(rem==0)
{
bell_b(); // 连续码
exit();
}
if(rem==1)
{
unsigned char i;
Delay2400ms(25);
for(i=0;i<4;i++)
{
temp[i]=read_byte();
}
temp[2]=!temp[2];
if(temp[2]==temp[3])
{
key_num=temp[2];
num++;
// bell_b();
EA=1;
exit();
}
else
{
key_num=0xff;
// bell_b();
exit();
}
}
// }
}
}
void main()
{
SP=0x6f;
inint();
rem=1;
bell_b();
num=0;
flay_mima=1;
while(1)
{
if(flay_send==0)
{
flay_send=1;
}
if(flay_send==1)
{
}
if(flay_mima==0)//密码设置
{
}
else
{
if(num==0x12)//计数
{
}
if(key_num==0x01)//确认键
{
}
if(key_num==0x02)//清除键
{
}
}
}
}