久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4958|回復: 6
打印 上一主題 下一主題
收起左側

哪位老師幫忙加一個掉電模式及喚醒

[復制鏈接]
跳轉到指定樓層
樓主
ID:86421 發表于 2017-6-1 20:43 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
用STC15F104W做了一個紅外搖控的開關,其輸出可控制繼電器或雙向晶閘管。程序已調試,好用。但工作時耗電為7mA左右,想加一個掉電模式,用紅外喚醒,這樣平時工作電流就可以到0.1μA。但不知道如何加入掉電模式并喚醒,紅外接收還能好用。整了好幾天了,我是整不明白了。哪位大俠幫忙。程序如下:

  1. /*

  2. 控制器引腳定義:
  3. 1 P3.4
  4. 2 VCC  3.8--5.5V
  5. 3 P3.5
  6. 4 GND
  7. 5 P3.0 接燒錄器的TXD
  8. 6 P3.1 接燒錄器的RXD
  9. 7 P3.2
  10. 8 P3.3
  11. */



  12. /*-----------------------------------------------
  13.   名稱:遙控器紅外控制MAC97A8

  14.   內容:三種遙控器控制三個晶閘管
  15. ------------------------------------------------*/
  16. #include<reg52.h>    //包含頭文件,一般情況不需要改動,頭文件包含特殊功能寄存器的定義
  17. #include <INTRINS.h>
  18. sbit IR=P3^2;  //紅外接口標志
  19. sbit jd1=P3^5;
  20. sbit jd2=P3^4;
  21. sbit jd3=P3^3;
  22. /*----------------------------------------------
  23.                 全局變量聲明
  24. ------------------------------------------------*/

  25. unsigned char  irtime;//紅外用全局變量
  26. unsigned int a=0;
  27. bit irpro_ok,irok;
  28. unsigned char IRcord[4];
  29. unsigned char irdata[33];

  30. /*------------------------------------------------
  31.                   函數聲明
  32. ------------------------------------------------*/

  33. void Ir_work(void);
  34. void Ircordpro(void);

  35. /*------------------------------------------------
  36.                 定時器0初始化
  37. ------------------------------------------------*/
  38. void TIM0init(void)//定時器0初始化
  39. {

  40.   TMOD=0x02;//定時器0工作方式2,TH0是重裝值,TL0是初值
  41.   TH0=0x00; //重載值
  42.   TL0=0x00; //初始化值
  43.   ET0=1;    //開中斷
  44.   TR0=1;   
  45. }

  46. /*------------------------------------------------
  47.                   定時器0中斷處理
  48. ------------------------------------------------*/

  49. void tim0_isr (void) interrupt 1 using 1
  50. {
  51.   irtime++;  //用于計數2個下降沿之間的時間
  52. }

  53. /*------------------------------------------------
  54.                   外部中斷0初始化
  55. ------------------------------------------------*/
  56. void EX0init(void)
  57. {
  58. IT0 = 1;   //指定外部中斷0下降沿觸發,INT0 (P3.2)
  59. EX0 = 1;   //使能外部中斷
  60. EA = 1;    //開總中斷
  61. }

  62. /*------------------------------------------------
  63.                   外部中斷0中斷處理
  64. ------------------------------------------------*/
  65. void EX0_ISR (void) interrupt 0 //外部中斷0服務函數
  66. {
  67.           static unsigned char  i;             //接收紅外信號處理
  68.           static bit startflag;                //是否開始處理標志位
  69.          
  70.           if(startflag)                        
  71.            {

  72.             if(irtime<63&&irtime>=33)//引導碼 TC9012的頭碼,9ms+4.5ms
  73.                                 i=0;
  74.                             irdata[i]=irtime;//存儲每個電平的持續時間,用于以后判斷是0還是1
  75.                             irtime=0;
  76.                             i++;
  77.                                     if(i==33)
  78.                                       {
  79.                                            irok=1;
  80.                                          i=0;
  81.                                           }
  82.            }
  83.           else
  84.            {
  85.                 irtime=0;
  86.                 startflag=1;
  87.        
  88.            }
  89.           
  90. }
  91. /*------------------------------------------------
  92.                 紅外碼值處理
  93. ------------------------------------------------*/
  94. void Ircordpro(void)//紅外碼值處理函數
  95. {
  96.   unsigned char i, j, k;
  97.   unsigned char cord,value;
  98.   k=1;
  99.   for(i=0;i<4;i++)      //處理4個字節
  100.      {
  101.       for(j=1;j<=8;j++) //處理1個字節8位
  102.          {
  103.           cord=irdata[k];
  104.           if(cord>7)//大于某值為1,這個和晶振有絕對關系,這里使用12M計算,此值可以有一定誤差
  105.              value|=0x80;
  106.           if(j<8)
  107.                     {
  108.                          value>>=1;
  109.                         }
  110.            k++;
  111.          }
  112.      IRcord[i]=value;
  113.      value=0;     
  114.      }
  115.          irpro_ok=1;//處理完畢標志位置1

  116. }
  117. /*------------------------------------------------
  118.                   鍵值處理
  119. ------------------------------------------------*/

  120. void Ir_work(void)//紅外鍵值散轉程序
  121. {

  122.        switch(IRcord[3])//判斷第三個數碼值 可 根 據        自 己 的 搖        控 器 填 寫        碼 值                  {


  123.                          case 0xf3:jd1=~jd1;break; //搖控器一1230
  124.                          case 0xe7:jd2=~jd2;break;
  125.                          case 0xa1:jd3=~jd3;break;
  126.                          case 0xe9:jd1=1;jd2=1;jd3=1;break;

  127.                          case 0x6d:jd1=~jd1;break;//搖控器二1230
  128.                          case 0x6c:jd2=~jd2;break;
  129.                          case 0x33:jd3=~jd3;break;
  130.                          case 0x78:jd1=1;jd2=1;jd3=1;break;


  131.                          case 0x0f:jd1=~jd1;break; //搖控器三1230
  132.                          case 0x13:jd2=~jd2;break;
  133.                          case 0x17:jd3=~jd3;break;
  134.                          case 0x3f:jd1=1;jd2=1;jd3=1;FLAG=1;break;



  135.              default:break;
  136.                          }
  137.                   irpro_ok=0;//處理完成標志

  138. }
  139. /*------------------------------------------------
  140.                     主函數
  141. ------------------------------------------------*/
  142. void main(void)
  143. {
  144. EX0init(); //初始化外部中斷
  145. TIM0init();//初始化定時器

  146. jd1=0;
  147. jd2=0;
  148. jd3=0;

  149. while(1)//主循環
  150.    {

  151.             if(irok)                        //如果接收好了進行紅外處理
  152.                   {   
  153.                    Ircordpro();
  154.                     irok=0;
  155.                   }
  156.        
  157.             if(irpro_ok)                   //如果處理好后進行工作處理
  158.                   {
  159.                    Ir_work();
  160.                     }

  161.    }
  162. }
復制代碼



分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:123289 發表于 2017-6-2 16:34 | 只看該作者
請查閱單片機,省電模式部分。
一條指令即可解決問題。
回復

使用道具 舉報

板凳
ID:86421 發表于 2017-6-2 17:38 | 只看該作者
加入PCON |=0x02;就進入了掉電模式,然后有紅外觸發時就喚醒,然后就執行外部中斷程序.過程是這樣的,我也知道.但如何加?如何不影響紅外部分的接收和處理呀?我現在做到了能進入掉電模式,有紅外時就會喚醒,但喚醒后就不能進入掉電模式了,要不就是在掉電模式,而不能執行紅外搖控的功能.
回復

使用道具 舉報

地板
ID:111634 發表于 2017-6-2 21:30 | 只看該作者
按單片機掉電模式處理就可以了,至于紅外喚醒,接中斷就行。
回復

使用道具 舉報

5#
ID:86421 發表于 2017-6-3 07:46 | 只看該作者
是那樣做了,但一直處于正常工作狀態。后紅過我的觀察,估計是紅外有干擾,所以單片機一直處于喚醒狀態。
回復

使用道具 舉報

6#
ID:706063 發表于 2020-3-13 21:35 | 只看該作者
你這個不能進入掉電模式,因為進入后定時器關閉,irtime得不到正確的計數無法正確解碼。也不能進入空閑模式,定時器中斷會不斷喚醒。
回復

使用道具 舉報

7#
ID:706063 發表于 2020-3-13 22:07 | 只看該作者
但在主循環里最后加上   PCON=0x01;     _nop_();      _nop_();也許能多少省一些電。
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 91免费在线看 | 欧美 日本 国产 | 99热在线免费| 欧美一二三区 | 亚洲国产精品久久久 | 国产欧美日韩视频 | 日韩欧美国产精品综合嫩v 一区中文字幕 | www.天天操.com | 日韩看片| 欧美亚洲国产一区二区三区 | a欧美| 国产97视频在线观看 | 亚洲精品欧洲 | 亚洲国产高清免费 | 久久久久久国产精品三区 | 毛片一区二区 | 精品1区2区3区4区 | 色综合99 | 在线国产视频观看 | 国产欧美在线播放 | 激情五月婷婷综合 | 91在线视频| 欧美久久精品一级黑人c片 91免费在线视频 | 亚洲国产成人精品女人久久久野战 | 天堂成人国产精品一区 | 6996成人影院网在线播放 | www.97zyz.com| 国产高清久久 | 亚洲国产中文字幕 | 日韩欧美一区二区三区 | 欧美aⅴ在线观看 | 求毛片| 亚洲视频一区二区三区 | 婷婷桃色网 | 超碰成人在线观看 | 夜久久 | 福利视频一区 | 色视频在线播放 | 污视频在线免费观看 | 久久久妇女国产精品影视 | 久久国内精品 |