登录  | 立即注册

游客您好!登录后享受更多精彩

扫一扫,访问微社区

QQ登录

只需一步,快速开始

开启左侧

[寒假笔记] C51---红外通信

[复制链接]
发表于 2023-1-25 23:57:48 | 显示全部楼层 |阅读模式
学习笔记
学习科目: C51
学习安排: 红外通信
开始时间: 2023-01-25
结束时间: 2023-01-25
本帖最后由 王煜 于 2023-1-26 00:00 编辑

#include <reg52.h>
sbit IR_INPUT = P3^2;  
bit irflag = 0;  
unsigned char ircode[4];  
unsigned int GetHighTime()
{
    TH0 = 0;  
    TL0 = 0;
    TR0 = 1;  
    while (IR_INPUT)  
    {
        if (TH0 >= 0x70)
        {            
            break;   
        }
    }
    TR0 = 0;  
    return (TH0*256 + TL0);  
}

void EXINT0_ISR() interrupt 0
{
    unsigned char i, j;
    unsigned char byt;
    unsigned int time;
    time = GetLowTime();
    if ((time<23210) || (time>25941))  
    {                                
        IE0 = 0;   
        return;
    }
   
    time = GetHighTime();
    if ((time<10922) || (time>13653))  
    {                                
        IE0 = 0;
        return;
    }
    for (i=0; i<4; i++)  
    {
        for (j=0; j<8; j++)  
        {
         
            time = GetLowTime();
            if ((time<928) || (time>2130))
            {                           
                IE0 = 0;
                return;
            }
         
            time = GetHighTime();
            if ((time>928) && (time<2130))
            {                             
                byt >>= 1;   
            }
            else if ((time>3986) && (time<5188))
            {                                 
                byt >>= 1;   
                byt |= 0x80;
            }
            else
            {
                IE0 = 0;
                return;
            }
        }
        ircode = byt;  
    }
    irflag = 1;  
    IE0 = 0;   
}


unsigned int GetLowTime()
{
    TH0 = 0;  
    TL0 = 0;
    TR0 = 1;
    while (!IR_INPUT)  
    {
        if (TH0 >= 0x70)
        {           
            break;   
        }
    }
    TR0 = 0;  
    return (TH0*256 + TL0);  
}


void InitInfrared()
{
    IR_INPUT = 1;  
    TMOD &= 0xF0;  
    TMOD |= 0x01;
    TR0 = 0;      
    ET0 = 0;      
    IT0 = 1;      
    EX0 = 1;      
}

好懒~~不想说~~~
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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