51红外解码程序 编译通不过,看不出原因.
#include<reg52.h>#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
#define nop() _nop_0()
uchar temp,numa,numb,flag,a,b,c;
sbit b0=B^0;
void delay(uchar x)
{
uchar i,j;
for(i=x;i>0;i--)
for(j=205;j>0;j--);
}
delay1()
{
uchar i;
for(i=75;i>0;i--);
}
void main()
{
P0=0xff;
P1=0x00;
P2=0xff;
P3=0xff;
EA=1;
IT0=1;
EX0=1;
while(1)
{
do{}
while(flag==0);
flag=0;
P1=numa;
}
}
void int0() interrupt0
{
flag=1;
EA=0;
for(a=10;a>0;a--)
{
delay(2);
fi(P3^2==1)
goto out;
}
do{}
while(P3^2==0);
nop();
delay(10);
for(b=26;b>0;b--)
{
do{}
while(P3^2==0);
delay(2);
CY=P3^2;
if(CY=1)
{
delay(2);
delay1();
do{}
while(P3^2==1);
}
else{}
}
B=0;
for(c=8;c>0;c--)
{
do{}
while(P3^2==0);
delay(2);
B<<=1;
b0=P3^2;
if(P3^2==1)
{
delay(2);
delay1();
do{}
while(P3^2==1);
}
else{}
}
numa=B;
B=0;
for(c=8;c>0;c--)
{
do{}
while(P3^2==0);
delay(2);
B<<=1;
b0=P3^2;
if(P3^2==1)
{
delay(2);
delay1();
do{}
while(P3^2==1);
}
else{}
}
numb=B;
B=0;
temp=numa+numb;
if(temp!=0xff)
{
numa=numb=0x00;
}
else{}
out:nop();
EA=1;
}
http://cache.amobbs.com/bbs_upload782111/files_32/ourdev_573113.jpg
(原文件名:未命名1.jpg) 给你一个。。。。/。。。,
//************函数申明*********************
void delay882us(void); //精确延时882us 7.3728m
void delay1000us(void); //精确延时1000us
void delay520us(void); //精确延时500us
void delay16(unsigned int i)
{
while(--i);
}
//******************************************
void delay882us(void)
{
delay16(458);
}
//******************************************
void delay1000us(void)
{
delay16(518);
}
//******************************************
void delay520us(void)
{
delay16(269);
}
//*************用到的I/O口定义**************
sbit P32=P3^2; //INT0,红外信号输入
//*******************外部中断0 红外解码程序****************************************
decode(void) interrupt 0
{
unsigned char count0,count1,count2;
EX0 = 0; //外部中断0关闭
for(count0=0;count0<10;count0++) //起始码前9ms的低电平
{
delay882us();
if(P32) goto exit; //9ms没完就出来高电平则为干扰信号,跳出中断(退出解码)
}
if(!P32) //低电平没完
{
for(count0=0;count0<5;count0++)// 连续5次 520US必须是1
{
delay520us();
if(!P32) goto exit; // 2.5MS 内必须是1 否则就是连码 退出解码
}
delay520us();delay520us();delay520us();delay520us(); //9ms没结束再延时4740us,加上前面的8820us,已跳过起始码的13.5ms
for(count1=0;count1<4;count1++) //开始读数据,4个字节,32位
{
for(count2=0;count2<8;count2++) //每个字节8位
{
while(!P32); //等待高电平到来
delay882us();
if(P32) //延时882us后,若P32还是高电平,则为 位1
{
IRCode=IRCode>>1;
IRCode=IRCode|0x80;
delay1000us(); //延时1000us,结束高电平
}
else //延时882us后,若P32为低电平,则为 位0
{
IRCode=IRCode>>1;
IRCode=IRCode|0x00;
}
}
} //到这里已读完所有32位数据
if(IRCode=~IRCode) //效验 数据和数据 反码
{
RFDATA=IRCode;
}
}
exit:
EX0 = 1;
} interrupt与0之间是有空格的 http://cache.amobbs.com/bbs_upload782111/files_32/ourdev_573120.png
(原文件名:未命名图片.png)
fi?? 太感谢了。原来就是这里出的问题。把这里加了空格后程序就通过了。。。说来见笑, 这个程序我想了好几天。。。就是找不到原因。 回复【1楼】chen1986sl 动感超人
-----------------------------------------------------------------------
回复【1楼】chen1986sl 动感超人
给你一个。。。。/。。。,
//************函数申明*********************
void delay882us(void); //精确延时882us 7.3728m
void delay1000us(void); //精确延时1000us
void delay520us(void); //精确延时500us
void delay16(unsigned int i)
{
while(--i);
}
//******************************************
void delay882us(void)
{
delay16(458);
}
//******************************************
void delay1000us(void)
{
delay16(51......
-----------------------------------------------------------------------
这个程序不完整啊,编译通不过,我加了头文件了,也不行。 哪位朋友有完整的编译通过的解玛程序吗? 我这个还是不能用哦。虽然经过楼上各位的指点,编译是通过了。可是哪里还有问题。。。一加载,P1口灯全亮,遥控器按着没反应。 软件和硬件需要配套的 “interrupt”和“0”之间要加空格、“fi”应该为“if”。 红外解码程序好像不是通用的吧,关键要看遥控发射是哪种编码方式,你可以找个通过不同的方式读出编码方式和编码规格,然后在根据编码类型的不同来解码。
我也在做红外的项目,解码的关键在于延时要精确。下面是我在咱们论坛和别的地方找到资料,希望对你有用!!!
这个读取波形的方法是很好,可是在后面的解码及从图片上读取码字的方式就有点不太赞同了,只想你能学会读取波形的方法行了。ourdev_573554.pdf(文件大小:472K) (原文件名:红外遥控编解码全攻略.pdf)
这个里面有不同编码芯片编码的方式及定义,后面还有解码程序,看看能学点解码的思路。ourdev_573555.pdf(文件大小:1.00M) (原文件名:红外接收.pdf)
这个是我参考别人的程序自己改了点,做的解码,希望对你有用!!!ourdev_573556.rar(文件大小:151K) (原文件名:UPD6121.rar) 谢了楼上的 正好在找这东西玩一下 向【9楼】 lyk07351 报告 红外信号 要接收的已经接收到 要丢出去的也丢出去了哈哈东西学到手了 mark 回复【9楼】lyk07351
红外解码程序好像不是通用的吧,关键要看遥控发射是哪种编码方式,你可以找个通过不同的方式读出编码方式和编码规格,然后在根据编码类型的不同来解码。
我也在做红外的项目,解码的关键在于延时要精确。下面是我在咱们论坛和别的地方找到资料,希望对你有用!!!
这个读取波形的方法是很好,可是在后面的解码及从图片上读取码字的方式就有点不太赞同了,只想你能学会读取波形的方法行了。 (原文件名:红外遥控编解码全攻略.pdf)
这个里面有不同编码芯片编码的方式及定义,后面还有解码程序,看看能学点解码的思路。 (原文件名:红外接收.pdf)
这个是我参考别人的程序自己改了点,做的解码,希望对你有用!!! (原文件名:upd6121.rar)
-----------------------------------------------------------------------
谢谢9楼的热心帮助.不过还是有点看不懂 mark!! 呵呵
一楼的程序只是解码过程,不是完整的程序,楼主! 回复【15楼】yulri
呵呵
一楼的程序只是解码过程,不是完整的程序,楼主!
-----------------------------------------------------------------------
嗯。我现在懂了一些。不过还是没有真正的做出个解码的程序来,很失败。继续学习中。。。 路过 mark Thanks for sharing! 果断 mark 一下 好东西,正好要用,参考一下 用到了GOTO要写什么头文件? chen1986sl 发表于 2010-8-5 17:07 static/image/common/back.gif
给你一个。。。。/。。。,
//************函数申明*********************
void delay882us(void); //精确 ...
请问一下,用了GOTO语句,出现了红色字体的警告,报这个错undefined label,是怎么个一回事?
页:
[1]