历史上的今天
返回首页

历史上的今天

今天是:2025年03月07日(星期五)

正在发生

2018年03月07日 | 红外接收(模拟串口接收)程序

2018-03-07 来源:eefocus

//******************************************************************
UART51.C
Hz的方波
//  通过两个9012三极管处理,得到要发出的波形,再通过发射管发射
//@Data            2010-11-14
//Version            1.0
//*****************************************************************
#include                    //头文件


    #define ubyte unsigned char      //宏定义
#define uword unsigned int
#define Rx_Lg 16                      //定义要接收数据的个数

     

    sbit HWRx=P0^0;            //红外接收引脚声明

    bit State1,State2;            //用于暂存红外引脚的前两个状态

    
ubyte Count=0;              //定时器计数值
ubyte Date_Rx=0;          //接收数据
ubyte Bit8_Rx=0;          //接收的8位
ubyte Table_Cnt=0;      //缓冲区变量值
ubyte Flag=0,Flag8=0;      //16位数据接收完成标志位,和一个数据接收完成标志位

    ubyte Table_Rx[16]={0};    //接收数据的缓冲区

    //****************************************************************************
//@Function:        Data8_Rx()
//@Description        接收一个八位数据
//@ReturnValue      无
//@Parameters        无
//@Data                  2010-11-14
//Version                  1.0
//****************************************************************************
void Data8_Rx()      //接收8位数据的子函数
{
   if((Bit8_Rx>=1)&&(Bit8_Rx<=8))  //判断接收的数据8位,是否全部接收完成
  {
     Date_Rx>>=1;      //左移一位
              if(HWRx==1)        //判断红外接收引脚的状态
                    Date_Rx|=0x80;      //是高,则将最高位置1
              Bit8_Rx--;        //减一
              if(Bit8_Rx==0)      //八位数据全部接收,置标志位
                    Flag8=1;
      }
}

    //****************************************************************************
//@Function:        Init_Uart()
//@Description        串口初始化,波特率为9600Bit/s
//@ReturnValue      无
//@Parameters        无
//@Data                  2010-11-14
//Version                  1.0
//****************************************************************************
void Init_Uart()            //产生波特率的初始化函数
{
        TMOD|=0x20;    //定时器T1工作在方式2
        SCON=0x50;      //开ES,工作在方式1
        TH1=0xfd;          //产生9600
        TL1=0xfd;
        TR1=1;              //启动定时器
}

    //****************************************************************************
//@Function:        main()
//@Description        主函数
//@ReturnValue      无
//@Parameters        无
//@Data                  2010-11-14
//Version                  1.0
//****************************************************************************
void main()
{
        ubyte i=0;          //循环变量

            TMOD=0x01;    //定时器T0工作在方式1
        TH0=0XFF;      //定时260us,按理应该是1/1200/3=278us
        TL0=0X0F;
        EA=1;                //开总控
        ET0=1;            //打开定时器
        TR0=1;            //启动定时器
        Init_Uart();        //调用串口初始化函数
        while(1)            //等待中断
        {  }
}

    //****************************************************************************
//@Function:          Time0()
//@Description        定时器T0的中断函数
//@ReturnValue      无
//@Parameters        无
//@Data                  2010-11-14
//Version                  1.0
//****************************************************************************
void Time0() interrupt 1        //定时器中断函数
{
        ubyte i=0;                    //定义一个变量
        Count++;                    //计算进入中断的次数
        TH0=0XFF;                //重装初值
        TL0=0X0F;
 
        if((Count==1)&&(Bit8_Rx==0))        //判断数据是否发送完成
        {
                Count=0;                                //是,则计数变量清零
                State2=State1;                      //赋红外引脚的状态
                State1=HWRx; 
                if((HWRx==0)&&(State1==0)&&(State2==1)) //判断是否有有效数据,

                                                            即检测到起始位
                            Bit8_Rx=8;      //是,赋值,准备接收
        }
  
        if((Count>=3)&&((Bit8_Rx!=0)))            //判断数据是否接收完成
        {
                Count=0;                      //没有,清零计数变量
                Data8_Rx();                  //接收该位
        }
        if((Flag8==1)&&(Bit8_Rx==0)&&(HWRx==1))    //判断该数据的8位是否全部

                                                                      接收完,并且检测到停止位
        {
                Flag8=0;              //把8位数据接收完的标志位清零
                Table_Rx[Table_Cnt]=Date_Rx;        //暂存该数据
                Table_Cnt++;            //变量加,准备下一个
                if(Table_Cnt>=Rx_Lg)          //判断16个数据是否接收完成
                {
                          Table_Cnt=0;            //是,则清零
                          Flag=1;              //置标志位
                } 
        }

            if(Flag==1)              //判断所有数据接收完成
        {
              Flag=0;              //是,则该标志位清零
              for(i=0;i<16;i++)            //通过串口,发送该16个数据
              {
                      SBUF=Table_Rx[i];          //发送缓冲区数据
                      while(!TI);            //等待发送完成
                      TI=0;              //发送完成,清标志位
              }
        }
}


推荐阅读

史海拾趣

德国ACAM公司的发展小趣事

2023年,ACAM公司与上海科技大学智造系统工程中心(CASE)签署了增材制造联合研发、应用研究和教育培训协议。这次合作标志着ACAM公司在增材制造领域的布局进一步深化,双方将共同推动增材制造技术的创新和应用,为行业的发展贡献更多的力量。

这五个故事展示了德国ACAM公司在电子行业中的发展历程和取得的成就。从创立之初的技术突破,到被收购后的技术实力大增,再到超声波计量领域的革命性突破,以及与高校合作推动增材制造发展,ACAM公司始终保持着创新的精神和不断进取的态度,为电子行业的发展做出了重要贡献。

Directed Energy Inc公司的发展小趣事

为了进一步扩大市场份额,Directed Energy Inc积极寻求与全球范围内的合作伙伴建立合作关系。通过与知名电子产品制造商、分销商和解决方案提供商的合作,公司成功将其产品推向了全球各地。这些合作伙伴不仅为Directed Energy Inc带来了更多的商业机会,还帮助公司更好地了解不同市场的需求和趋势,从而不断调整和优化产品策略。

FINISAR公司的发展小趣事

FINISAR在光模块领域取得了多项重要技术创新和突破。例如,公司在1992年推出了首个850nm的千兆多模光纤光收发模块,随后在1995年推出了带数字诊断功能的光收发模块,这些创新产品极大地推动了光通信技术的发展。此外,FINISAR还不断推出新产品以满足市场需求,如SFP光模块、CWDM GBIC光模块等,这些产品均获得了市场的广泛认可。

Anaren Ceramics公司的发展小趣事

Anaren Ceramics公司在电子行业中崭露头角,首先得益于其在陶瓷材料技术方面的重大突破。公司研发了一种新型的陶瓷材料,具有优异的绝缘性能和高温稳定性,这为当时的电子行业提供了前所未有的解决方案。随着这种新型陶瓷材料在市场上的广泛应用,Anaren Ceramics公司的知名度逐渐提升,逐渐成为了行业内的佼佼者。

Fischer Elektronik公司的发展小趣事

Fischer Elektronik深知每个客户的需求都是独特的,因此公司非常注重提供客户定制化的解决方案。公司拥有一支专业的研发团队和先进的生产设备,能够根据客户的具体需求,设计并生产出符合其要求的产品。这种高度定制化的服务模式,赢得了众多客户的信赖和好评,也为公司赢得了更多的市场份额。

Altus Technology Inc公司的发展小趣事

随着公司规模的不断扩大,Altus开始实施全球化战略,积极拓展海外市场。公司通过与国际知名企业的合作,成功将产品打入国际市场,并建立了完善的销售网络和客户服务体系。同时,Altus还积极参与国际电子行业的交流和合作,不断吸收和引进国际先进技术和管理经验,提升了公司的整体竞争力。

问答坊 | AI 解惑

STC 单片子

本帖最后由 paulhyde 于 2014-9-15 09:32 编辑 有人用过STC的单片子么? 跟其他的有什么区别?怎么他们的手册很简单?  …

查看全部问答>

这4个叫什么名呀?参数是什么意思呀?

这4个叫什么名呀?参数是什么意思呀?…

查看全部问答>

USB_ISP下载线制作方法

电路图,驱动,全在下面,还有声明一下,这是从别人那里转过来的,只为和大家分享, 芯片用的是CH341电路很稳定,很实用,简单。…

查看全部问答>

LPC2148问题:只有接上JLINK程序才正常的运行

嗯,最近弄了一个LPC2148的板子。      一样的程序,我下载到LPC2131的板子的FLASH里,拔掉JLINK就可以正常的运行,下载到LPC2148的板子里就行.(操作过程是一样 的。) 这是我们的ADS设置:  程序包上 ...…

查看全部问答>

开关电源的启动噪声(变压器吱一声)--如何解决

反激隔离开关电源的启动噪声 怎么解决; 上电的时候变压器响的都会吱 一声; 该电源为恒压恒流:25W,14串14并 变压器才有ER25/10 是电流一上电过大引起的吗?还是变压器太小?目前变压器不能加大了。  …

查看全部问答>

C8051 F005单片机可否利用内部时钟进行串口通讯

如题! 请教一下单片机高手,由于我的电路版上晶振电路老出问题,启动不成功。可否不用外部晶振而只用内部晶振,并进行串口通讯。 …

查看全部问答>

DirectDrawCreate执行异常

各位大侠,小弟有个项目要用DirectDraw,但是在执行到DirectDrawCreate时总是发生异常,实在是弄不明白,请各位帮帮忙,分析分析到底是什么问题。我的开发工具是PB5.0。…

查看全部问答>

LM3S8962的耗电量

   LM3S8962具有256KB的FLASH,64KB的RAM,50 MHz的主频。     他的功率消耗如下(来自官方PDF):                  50M时,外设 ...…

查看全部问答>

调试安防监控红外匀速球电源心得

 再谈谈笔者以前调试安防监控红外匀速球心得:   红外匀速球产品散热要求很高,一定要足安足伏电源供应,不要假冒伪劣电源模块,否则工程返工很麻麻烦。市面主流红外匀速球电源特点:采用直流供电,解码板电源分配功能,驱动电机、 ...…

查看全部问答>