找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1029|回复: 2
打印 上一主题 下一主题
收起左侧

大佬们帮忙看看这个红外模块的单片机程序对吗?

[复制链接]
跳转到指定楼层
楼主
ID:923440 发表于 2021-8-27 11:20 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

这是hx1838红外处理程序,请问哪里有问题?

void ir_init(void)
        {

                IRIN = 1;//初始化红外接收头为1

                INTCLkO = 0x10;//开启INT2为下降沿触发

                EA = 1;

        }





void  EX2_ISR() interrupt 10//红外中断函数
        {
                unsigned char i;
                unsigned char j;
                unsigned int cnt;
                unsigned char temp = 0;

        if(IRIN == 0)
        {
        //判断9ms的高电平
        cnt = 0;
        while(IRIN == 0)
        {
                cnt++;
                Delay10us();
                if(cnt > 1000)//超时判断
                return ;
        }

        cnt = 0;
        //4.5ms
        while(IRIN)
        {
                cnt++;
                Delay10us();
                if(cnt > 500)//超时等待
                return ;
        }
        //开始接受红外信号
        for( i = 0; i<4; i++)
        {

                for( j = 0; j<8;j++)
                {
                        cnt = 0;
                        while(IRIN == 0)//560us
                        {
                                cnt++;
                                Delay10us();
                                if(cnt > 60)
                                return ;
                        }

                        Delay600us();//延时600us判断是高电平还是电平
                        if(IRIN)
                        {
                                        temp |= 1<<j;//数据是从低位开始传输
                                        cnt = 0;
                                while(IRIN)
                                {
                                        cnt++;
                                        Delay10us();
                                        if(cnt > 110)
                                        return ;
                                }
                        }

                }
                        ircode[ i] = temp;
                        temp = 0;
        }
                Delay600us();
                if(ircode[2] != ~ircode[3])//判断命令码是不是接受正确
                        return;

        }

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:923440 发表于 2021-8-27 11:21 | 只看该作者
这里处理ircode[2]数据感觉没有接收到为什么
回复

使用道具 举报

板凳
ID:584814 发表于 2021-8-28 11:21 | 只看该作者
在中断里乱或多用延时或循环都是比较可怕的事。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表