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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

基于AVR單片機的PT2262軟件解碼程序

[復制鏈接]
跳轉到指定樓層
樓主



很多PT2262軟件解碼程序,都是用定時器測量脈沖寬度。占用系統太多資源。我自己編寫的程序不用定時器,不用中斷,代碼最少。但耗CPU,發射端為PT2262 3.3M 的電阻 接收端為 M8 內部1M RC振蕩。解碼成功后輸出D口顯示。編譯軟件為 ICCAVR。

以下是avr單片機源碼:
  1. #include <iom8v.h>  
  2. #include <macros.h>  
  3. void delay_ms(void)                         //毫秒延時  
  4. {     
  5.      unsigned int i;
  6.      for (i=0;i<140;i++)  
  7.           {
  8.           }
  9. }

  10. void delay_nms(unsigned int n)              //延時周期
  11. {
  12.      unsigned int i;
  13.      for (i=0;i<n;i++)
  14.           {
  15.            delay_ms();
  16.           }
  17. }
  18.   
  19. void spaz(void)                             //響蜂鳴器
  20. {
  21.      PORTC|=(1<<5);                          
  22.          delay_nms(50);                          
  23.          PORTC&=~(1<<5);                           
  24. }   
  25.   
  26. unsigned long decode(void)                 //無線解碼
  27. {
  28.      unsigned long DATA;                    //記錄數據
  29.      unsigned char count,i;                 //暫時計數
  30.          
  31. /*一共接收三字節*/         
  32.      
  33.      DATA=0;                                //   
  34.      for (count=0;count<24;count++)         //開始收集
  35.           {
  36.             
  37. /*測量高電平寬度*/         

  38.        i=0;                                 //寬度計數
  39.            while (PINC&(1<<4))           //高位計數
  40.             {        
  41.                  asm("nop");           //
  42.                  i++;                  //計數增加  
  43.                                        
  44.                  if (i>192) goto end;  //限時解碼
  45.                 }                                    
  46.                  
  47. /*分辨出電平高低*/                 
  48.         
  49.           DATA*=2;                       //數據左移
  50.                   
  51.       if (i<64)                             //分辨高低  
  52.            {     
  53.             if (!((56>i)&(i>24))) goto end;     //電平合法                                 
  54.             DATA+=0;                            //記低電平
  55.            }
  56.             
  57.           else
  58.            {      
  59.             if (!((168>i)&(i>72))) goto end;    //電平合法                                 
  60.             DATA+=1;                            //記高電平
  61.            }
  62.             
  63. /*測量低電平寬度*/         
  64.    
  65.            while (!(PINC&(1<<4)))               //低位計數
  66.             {        
  67.                  asm("nop");                 //
  68.                  i++;                        //計數增加  
  69.                                        
  70.                  if (i>224) goto end;        //限時解碼
  71.                 }           
  72.                  
  73. /*低電平是否過窄*/                 
  74.                   
  75.            if (i<96) goto end;                  //對比寬度                                 
  76.       }
  77.          
  78. /*解碼成功返結果*/         
  79.                                        
  80.          return  DATA;                          //成功返回  
  81.          
  82. /*有誤碼結束解碼*/         
  83.          
  84.      end:         
  85.          return 0;                              //誤碼結束
  86. }   
  87.   
  88. void main(void)
  89. {
  90.      unsigned long DATA;                    //
  91.          unsigned char D[3];             //  
  92.          signed char i;                  //   
  93.      
  94.      DDRB =0B00000000;                      //定義輸入
  95.      PORTB=0B11111111;                      //上拉使能
  96.          
  97.      DDRC =0B11101111;                      //輸入通道
  98.          PORTC=0B11011111;               //上拉選擇
  99.       
  100.      DDRD =0B11111111;                      //定義輸出
  101.          PORTD=0B00000000;               //輸出顯示  
  102.          
  103.          while (1)
  104.           {
  105.            DATA =decode();                      //解碼程序
  106.             
  107.            if (DATA>0)                          //
  108.             {
  109.              spaz();                            //解碼成功
  110.                   
  111.                  for (i=2;i>=0;i--)                 //數據轉換
  112.                   {  
  113.                    D[i]=DATA;                       //
  114.                    DATA>>=8;                        //  
  115.                   }
  116.                   
  117.                  i=0;                               //轉換完畢   
  118.                  while (1)                          //輸出顯示   
  119.                   {
  120.                    if (!(PINB&(1<<0)))              //按鍵檢查
  121.                     {
  122.                          delay_nms(20);                 //防誤處理
  123.                          if (!(PINB&(1<<0)))            //
  124.                           {
  125.                            i++;                         //顯示值加
  126.                            spaz();
  127.                           }
  128.                          while (!(PINB&(1<<0)))         //按鍵彈起
  129.                           {
  130.                            delay_nms(20);               //防誤處理
  131.                           }
  132.                          }  
  133.                    if (i>2) break;                  //
  134.                    PORTD=D[i];                      //輸出顯示   
  135.                   }
  136.                 }
  137.           }  
復制代碼
如果編譯錯誤最后加一個 }


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

使用道具 舉報

沙發
ID:74314 發表于 2016-4-8 17:58 | 只看該作者
您好,想請教個問題,在ICCAVR中,那個自動生成代碼的工具生成的代碼,和花括號的距離只有一個空格的位置;很多時候我都會自動生成一部分代碼,然后復制過去,這樣的結果是復制過去的代碼和花括號只有一個空格的間距,但一般我習慣用一個Tab的距離,所以想請問下,是否可以在哪里設置自動代碼的格式,它們之間的間距。。。。。。。。
回復

使用道具 舉報

板凳
ID:146924 發表于 2018-8-19 09:44 | 只看該作者
對晶振有什么要求,普通51移植可以用吧
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 一区视频 | 精品一区二区三区视频在线观看 | 成年人黄色一级片 | 黑人巨大精品欧美一区二区免费 | 99在线视频观看 | 美女亚洲一区 | 亚洲男人天堂2024 | 日韩网站在线观看 | 国产偷录叫床高潮录音 | 久久免费视频在线 | 国产精品久久久亚洲 | 久久久久久久久久久久久九 | 国产在线二区 | 99久久精品国产一区二区三区 | 精品久久久久久 | 免费视频一区二区 | 91xxx在线观看 | 成人在线观看中文字幕 | 嫩草一区二区三区 | 亚洲 成人 av | 四虎在线观看 | 成人在线播放网站 | 国产精品国产三级国产aⅴ入口 | 成人三区 | 亚洲成人精品影院 | 一区二区在线 | 亚洲综合区 | 久久久久亚洲精品 | 亚洲人成在线观看 | 中文在线www | 一区二区三区精品 | 精品久久久久久亚洲精品 | 亚洲视频免费播放 | 欧美中文一区 | 欧美一区免费 | 午夜精品影院 | 国产高清av免费观看 | av播播 | h在线免费观看 | 日本欧美在线观看视频 | 国产精品福利视频 |