娇小w搡bbbb搡bbb,《第一次の人妻》,中国成熟妇女毛茸茸,边啃奶头边躁狠狠躁视频免费观看

歷史上的今天

今天是:2024年09月01日(星期日)

正在發生

2020年09月01日 | 利用STM8的PWM輸入捕獲測紅外碼程序

發布者:電子設計探索者 來源: eefocus關鍵字:STM8  PWM  輸入捕獲  測紅外碼 手機看文章 掃描二維碼
隨時隨地手機看文章

實例說明:
1、本實例是利用STM8單片機定時器TIM1的PWM輸入捕獲模式測量紅外遙控碼。 

2、紅外遙控碼格式為NEC紅外編碼。
3、紅外接收信號輸入接PC1(TIM1輸入通道1)。
4、采用外部晶振16M。
5、采用IAR FOR STM8開發環境。
6、程序代碼如下:
//--------------------------------------------------------------------
#include


#define uchar              unsigned char
#define uint                unsigned int


uchar IrRecStep = 0;                             //接收步驟
uchar IrIndex = 0;                                //接收位數
uchar IrRecFlag = 0;                             //接收完標志
uchar IrRecBuff[4];                               //接收緩沖區
uchar IrRecAddr1;                                //紅外地址碼
uchar IrRecAddr2;
uchar IrRecData1;                                //紅外數據碼
uchar IrRecData2;
uint IrCycle = 0;                                  //紅外周期
uint IrHigh = 0;                                   //占空比
const uchar IrCode[8]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};


//--------引導碼低電平范圍------------------
#define IrHeadLow_Max       2300            //2300*4 = 9200us
#define IrHeadLow_Min        2100            //2100*4 = 8400us
//--------引導碼高電平范圍------------------
#define IrHeadHigh_Max      1250            //1250*4 = 5000us
#define IrHeadHigh_Min       1050            //1050*4 = 4200us
//--------數據0的周期范圍-------------------
#define IrData00_Max         300             //300*4 = 1200us
#define IrData00_Min          260             //260*4 = 1040us
//--------數據1的周期范圍-------------------
#define IrData10_Max         580             //580*4 = 2320us
#define IrData10_Min          540             //540*4 = 2160us
//--------數據0的占空比(高電平)范圍---------
#define IrData0_Max          160             //160*4 = 640us
#define IrData0_Min           120             //120*4 = 480us
//--------數據1的占空比(高電平)范圍---------
#define IrData1_Max          440             //440*4 = 1760us
#define IrData1_Min           400             //400*4 = 1600us
//----------------------------------------------------------
#define REMOTE_CLK_DIV       63              //63+1=64----16Mh/64=4us
#define REMOTE_ICF_FILTER   0x30


//延時程序
void Delay_ms( uint ms )

  uint i,j;
  for( j=0; j   { 
    for( i=0; i<1000; i++ )
    {;} 
  }
}


//紅外接收端口初始化
void Ir_Init(void)
{
  PC_DDR_DDR1 = 0;       //PC1為輸入
  PC_CR1_C11 = 1;
  PC_CR2_C21 = 0;
}


//使用TIM1的PWM輸入捕獲
void Ir_PWM_Init(void)

  TIM1_PSCRH = 0;
  TIM1_PSCRL = REMOTE_CLK_DIV;


  TIM1_CCER1 &= 0xee;//禁止輸入捕獲1,2
  TIM1_CCMR1 |= (REMOTE_ICF_FILTER + 0x01);// ch1到ti1fp1
  TIM1_CCER1 &= 0xec;//ch1 上升沿觸發
  TIM1_CCMR2 |= (REMOTE_ICF_FILTER + 0x02);// ch2選擇 ti1fp2上
  TIM1_CCER1 |= 0x20;//ch1 下降沿觸發 ic2
  TIM1_SMCR |= 0x54;//選源觸發源和觸發方式 復位
  TIM1_CCER1 |= 0x11;//使能輸入捕獲1,2
  TIM1_CR1 |= 0x05;
}


//紅外接收程序
void Ir_Receive(void)
{
  switch(IrRecStep)
  {
  case 0:
          IrIndex = 0;
          if ((TIM1_SR1_CC1IF == 1)&&(TIM1_SR1_CC2IF == 1))
          {
            IrHigh = (uint)(TIM1_CCR2H); 
            IrHigh = (IrHigh << 8) + TIM1_CCR2L;  //IrHigh占空比
            IrCycle = (uint)(TIM1_CCR1H);
            IrCycle = (IrCycle << 8) + TIM1_CCR1L;  //IrCycle周期
            //是否在引導碼低電平范圍內
            if (((IrCycle - IrHigh) < IrHeadLow_Max)&&((IrCycle - IrHigh) > IrHeadLow_Min))
            {
              IrRecStep = 1;
              TIM1_SR1_CC1IF = 0;
              TIM1_SR1_CC2IF = 0;
              TIM1_SR2_CC1OF = 0;
              TIM1_SR2_CC2OF = 0;
              TIM1_SR1_UIF = 0;
              
              IrRecBuff[0] = 0;
              IrRecBuff[1] = 0;
              IrRecBuff[2] = 0;
              IrRecBuff[3] = 0;
            }
          }
          break;
  case 1:
          if ((TIM1_SR2_CC1OF==1) || (TIM1_SR2_CC2OF==1) || (TIM1_SR1_UIF==1))
          { 
            IrRecStep = 0;
          }
          else
          { 
            if ((TIM1_SR1_CC1IF == 1)&&(TIM1_SR1_CC2IF == 1))
            { 
              IrHigh = (uint)(TIM1_CCR2H); 
              IrHigh = (IrHigh << 8) + TIM1_CCR2L;
              IrCycle = (uint)(TIM1_CCR1H); 
              IrCycle = (IrCycle << 8) + TIM1_CCR1L;
              //是否在引導碼高電平范圍內
              if ((IrHigh < IrHeadHigh_Max)&&(IrHigh > IrHeadHigh_Min))
              {
                IrRecStep = 2;
              }
            }
          }
          break;
  case 2:
          if ((TIM1_SR2_CC1OF==1) || (TIM1_SR2_CC2OF==1) || (TIM1_SR1_UIF==1))
          { 
            IrRecStep = 0;
          }
          else
          { 
            if ((TIM1_SR1_CC1IF == 1)&&(TIM1_SR1_CC2IF == 1))
            { 
              IrHigh = (uint)(TIM1_CCR2H); 
              IrHigh = (IrHigh << 8) + TIM1_CCR2L;
              IrCycle = (uint)(TIM1_CCR1H); 
              IrCycle = (IrCycle << 8) + TIM1_CCR1L;
              //周期是否在數據0范圍內
              if ((IrCycle > IrData00_Min)&&(IrCycle < IrData00_Max))
              {
                //高電平是否在數據0范圍內
                if ((IrHigh > IrData0_Min)&&(IrHigh < IrData0_Max))
                {
                  IrIndex++;
                }
                else
                {
                  IrRecStep = 0;
                }
              }
              //周期是否在數據1范圍內
              else if ((IrCycle > IrData10_Min)&&(IrCycle < IrData10_Max))
              {
                //高電平是否在數據1范圍內
                if ((IrHigh > IrData1_Min)&&(IrHigh < IrData1_Max))
                {
                  IrRecBuff[IrIndex >> 3] |= IrCode[IrIndex & 0x07];
                  IrIndex++;
                }
                else
                {
                  IrRecStep = 0;
                }
              }
              else
              {
                IrRecStep = 0;
              }
              if(IrIndex >= 32)
              {
                IrRecStep = 0;
                IrRecFlag = 1;
              }
            }
          }
          break;
  }
}
      
//時鐘初始化
void CLK_Init(void)
{
  CLK_ECKR=0x03;//外部時鐘寄存器 外部時鐘準備就緒,外部時鐘開
  CLK_SWCR=0x02;//切換控制寄存器 使能切換機制
  CLK_SWR=0xB4;//主時鐘切換寄存器 選擇HSE為主時鐘源*/

[1] [2]
關鍵字:STM8  PWM  輸入捕獲  測紅外碼 引用地址:利用STM8的PWM輸入捕獲測紅外碼程序

上一篇:stm8s開發(九) EEPROM的使用:使用EEPROM存儲數據!
下一篇:基于IOT的LED智能照明控制系統

推薦閱讀

智能化時代已經到來,在人工智能技術的助力下,新一代服務機器人逐漸走進人們的生活場景當中,同時顯現出巨大的市場機遇。從醫療到家庭、教育、養老、商場服務等,智能服務機器人為人類工作和生活提供了極大的便利和創造了更先進的體驗。 2018年8月30-9月1日,由中國高科技行業門戶OFweek維科網、HTC高科會主辦,OFweek人工智能網承辦的2018中國(上海...
近年來,隨著自動化需求的加速釋放,以及人口紅利的日漸衰退,機器人產業在全球迎來了迅猛發展。各國為搶占機器人產業發展高地,增強各自實力與競爭力,都在加大和加快機器人產業的發展布局,我國也不例外! 自2013年以來,我國政府出臺了大量的鼓勵政策,投入了巨額扶持資金,并引領了一大批企業的快速崛起,由此帶動了產業發展的高速增長和不斷向前。...
#include <reg52.h> //C51通用串口收發數據C語言程序模塊#define uchar unsigned char#define uint unsigned intuchar shu;bit i;sbit led1=P0^0;void delayms(uint xms) //1ms;{ uint i,j; for(i=xms;i>0;i--) for(j=110;j>0;j--) ;}/*********************************************************...
廣告摘要聲明廣告【文/石頭】8月27日,達意隆發布2021年半年報,公司2021年1-6月實現營業收入5.24億元,同比增長54.71%,實現歸母凈利潤563.48萬元,同比增長222.94%。從主營業務上看,今年上半年,達意隆的灌裝生產線實現營收2.05億元,同比增長53.88%,占總營收比39.30%;全自動PET瓶吹瓶機實現營收1.72億元,同比增長81.38%,占總營收比32.90%;二次包...

史海拾趣

小廣播
設計資源 培訓 開發板 精華推薦

最新單片機文章
何立民專欄 單片機及嵌入式寶典

北京航空航天大學教授,20余年來致力于單片機與嵌入式系統推廣工作。

 
EEWorld訂閱號

 
EEWorld服務號

 
汽車開發圈

 
機器人開發圈

電子工程世界版權所有 京ICP證060456號 京ICP備10001474號-1 電信業務審批[2006]字第258號函 京公網安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 镇坪县| 岳阳市| 尤溪县| 调兵山市| 龙胜| 英山县| 大竹县| 涟源市| 梁河县| 黔西| 屏南县| 吉首市| 文昌市| 六枝特区| 双江| 海淀区| 新乐市| 大兴区| 汉阴县| 扶沟县| 米易县| 靖西县| 鹤壁市| 新干县| 萝北县| 南和县| 张掖市| 喜德县| 天门市| 寿阳县| 喀什市| 安宁市| 淮北市| 汉沽区| 永靖县| 从化市| 仙居县| 崇礼县| 丹寨县| 唐河县| 平安县|