打印
[51单片机]

自己写了个红外遥控的程序,麻烦帮确认下思路

[复制链接]
1866|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
liwei12400|  楼主 | 2013-9-25 09:50 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 liwei12400 于 2013-9-25 09:54 编辑

在网上看了很多资料,因为手头上没有现成的硬件,所以想让大家帮看下写程序的思路是不是正确,

另外,看看能不能把解码的数据存到数组里。小白在此谢过啦
#include<reg52.h>
sbit IR=P3^2;
unsigned char str[4];
void delay100us(unsigned char t)  
{
    unsigned char a,b;
    for(b=t;b>0;b--)
        for(a=47;a>0;a--);
}
void mian()
{
        IT0=1;
        EX0=1;
        EA=1;
        while(1)
        {
               
        }
}
void int0() interrupt 0        //下降沿触发
{
        unsigned char i,j,us,temp;
        EX0=0;
        if(IR==1)  //排除干扰造成的中断触发
        {
                 EX0=1;
                return;
        }
        while(!IR);//等待引导码4.5ms低电平
        for(i=0;i<4;i++)   //4位数据依次是低8位地址码,高8位地址码,数据码,数据反码 ,先接收到的是低位
        {
                for(j=0,temp=0,us=0;j<8;j++)
                {
                        delay100us(8);//跳过0,1开始的0.565ms的高电平
                        while(!IR)
                        {
                                us++;
                        }//低电平持续的时间,从而判断0,1
                        if(us>400)
                                temp=temp|0x80;
                        temp=temp>>1;
                }
                str=temp;//这里就存在下标为i的数组里。帖子里【】打不出来
        }
        EX0=1;
}

相关帖子

沙发
liwei12400|  楼主 | 2013-9-25 10:24 | 只看该作者
人工置顶

使用特权

评论回复
板凳
liwei12400|  楼主 | 2013-9-25 10:45 | 只看该作者
有用过的朋友吗?

使用特权

评论回复
地板
coody| | 2013-9-25 13:44 | 只看该作者
别的贴我贴过STC官网上的程序,查询方式. 我从来不用外中断方式接收.

使用特权

评论回复
5
老鱼探戈| | 2013-9-25 15:52 | 只看该作者
如果主程序忙的过来就用查询方式,否则就用外部中断,但是不需要在中断里面等待

使用特权

评论回复
6
草民| | 2013-9-25 16:00 | 只看该作者
void mian()

使用特权

评论回复
7
liwei12400|  楼主 | 2013-9-26 10:27 | 只看该作者
草民 发表于 2013-9-25 16:00
void mian()

:loveliness:我知道错了。请问下,我用中断的思路正确吗?有纰漏吗?语法上的小弟粗心大意了

使用特权

评论回复
8
liudongabc| | 2013-9-29 17:12 | 只看该作者
while(!IR)
                        {
                                us++;
                        }//
以单片机的速度,US马上就会溢出。还是多看看别人写的好的程序。一般都是用定时器计数,外部中断读计数值

使用特权

评论回复
9
电子点名| | 2013-10-6 14:34 | 只看该作者
红外遥控对延时的精确度比较高,最好用汇编语言写,而且,最好把那个原理搞懂,时序一定要清楚,还要外接数码管把你的数显示出来。

使用特权

评论回复
10
1324968| | 2013-10-6 15:25 | 只看该作者
一个红外最好不要用中断,直接用IO口读取就好了,再main里面循环跑,计时在中断计时就可以了

使用特权

评论回复
11
旭日东起| | 2013-10-6 16:00 | 只看该作者
开一个50us的定时器,在定时器中断里检测数据的电平,然后存起来,并计时间,判断电平是下降沿的时候,看看计时间的变量是多少,以此判别是什么码

使用特权

评论回复
12
很忙| | 2013-10-6 17:06 | 只看该作者
我觉得这个代码问题很多。纠错能力很差。如果一个遥控是坏的,发出来的波形不是标准的,那你就麻烦了,一直跑在这个中断里出不来了,就算你得到一个值,也是一个错误的值。你这个代码太理想化了。一般还是用时钟加中断的方式来做比较好。不太建议用查询的方式。因为你做好了中断加时钟的方式,代码的可移植性会比较好。用查询的方式在大一点的系统就用不上了。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

10

主题

57

帖子

1

粉丝