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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

STC15w204s @11.0592hz單片機紅外解碼串口助手查看

[復制鏈接]
跳轉到指定樓層
樓主
ID:412370 發表于 2018-12-9 20:53 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
nec協議紅外通信
15w204s @11.0592hz 單片機解碼后通過串口以9600的比特率發送出去,stc的串口助手,串口3查看碼值

單片機源碼:
  1. #include <reg52.h>
  2. /*====================================
  3. 自定義類型名
  4. ====================================*/
  5. typedef unsigned char INT8U;
  6. typedef unsigned char uchar;

  7. typedef unsigned int INT16U;
  8. typedef unsigned int uint;

  9. uchar IRtime;          //儲存檢測紅外高低電平持續時間
  10. uchar IRcord[4];  //儲存解碼后的4個字節數據
  11. uchar IRdata[33]; //包含起始碼在內的33位數據
  12. bit IRpro_ok;          //解碼后4個字節數據接收完成標志位
  13. bit IRok;                  //33位數據接收完成標志

  14. //初始化定時器0,外部中斷0,串口
  15. void init()
  16. {
  17.         TMOD |= 0x02;//設置定時器0工作模式2,8位自動重裝
  18.         TL0 = TH0 = 0;//初始化定時器0寄存器,定時器0溢出一次時間為256個機器周期
  19.         EA = 1;//開總中斷
  20.         ET0 = 1;//開定時器0中斷
  21.         TR0 = 1;//啟動定時器0

  22.         IT0 = 1;//設置外部中斷0跳變沿觸發方式
  23.         EX0 = 1;//開外部中斷0中斷

  24.         S3CON = 0x10;                //8位數據,可變波特率
  25.         S3CON &= 0xBF;                //串口3選擇定時器2為波特率發生器
  26.         AUXR &= 0xFB;                //定時器2時鐘為Fosc/12,即12T
  27.         T2L = 0xE8;                //設定定時初值
  28.         T2H = 0xFF;                //設定定時初值
  29.         AUXR |= 0x10;                //啟動定時器2
  30.         SM1 =  1;//設置串口工作模式1,10位異步收發
  31. }

  32. //定時器0中斷,每中斷一次需要256*1.085us =  277.76us
  33. void time0() interrupt 1
  34. {
  35.         IRtime++;//277.76us
  36. }

  37. //外部中斷0 存入33次脈寬
  38. void int0() interrupt 0
  39. {
  40.         static uchar i;//靜態變量用于存入33次數據計數
  41.         static bit startflag;//開始儲存脈寬標志位
  42.         if(startflag)
  43.         {
  44.                 /*判斷引導碼,如果是引導碼則從起始碼開始存*/
  45.                 if((IRtime < 53) && (IRtime >= 32))        i = 0;
  46.                 IRdata[i] = IRtime;//以TO溢出的次數來計算脈寬把這個時間存放在數組中
  47.                 IRtime = 0;//計數清零
  48.                 i++;//計數脈寬存入次數自加
  49.                 if(i == 33)           //i等于33那么就表示已經存入了33次脈寬
  50.                 {
  51.                         IRok = 1; //脈寬檢查完成
  52.                         i = 0;          //把脈寬計數清零準備下次存入
  53.                 }
  54.         }
  55.         else
  56.         {
  57.                 IRtime = 0;          //定時器0計數清零
  58.                 startflag = 1;//開始處理標志位置1
  59.         }

  60. }

  61. //把提取的33次脈寬進行解碼 NEC協議
  62. void IRcordpro()
  63. {
  64.         uchar i;//i是用于計數處理4個字節
  65.         uchar j;//j用于計數處理1個字節的8位數據
  66.         uchar k;//k用于計數處理33次脈寬
  67.         k = 1;//從第一位脈寬開始處理,丟掉起始碼
  68.         for(i = 0; i < 4; i++)
  69.         {
  70.                 for(j = 0; j < 8; j++)
  71.                 {
  72.                         //如果脈寬大于數據0標準的1125us那么就判定為數據1
  73.                         if(IRdata[k] > 5) IRcord[i] |= 0x80;//寫1
  74.                         //只能右移7次,如果右移8次則會把第一位數據移出去
  75.                         if(j < 7) IRcord[i] >>= 1;
  76.                         k++; //處理下一次脈寬
  77.                 }
  78.         }
  79.         IRpro_ok = 1;//解碼完成
  80. }

  81. void main()
  82. {
  83.         uchar i; //計數串口發送字節數
  84.         init();//初始化
  85.         while(1)
  86.         {
  87.                 if(IRok)//判斷33次脈寬是否提取完成
  88.                 {
  89.                          IRcordpro();//根據脈寬解碼出4個字節的數據
  90.                         IRok = 0;//清零脈寬檢查完成標志位等待下一次脈寬檢查
  91.                         if(IRpro_ok)//判斷解碼是否完成
  92.                         {
  93.                                 for(i = 0; i < 4; i++) //串口發送4個字節數據
  94.                                 {
  95.                                         SBUF = IRcord[i]; //發送數據
  96.                                         while(!TI);                  //等待發送完成標志
  97.                                         TI = 0;                          //清零發送完成標志位
  98.                                 }
  99.                                 IRpro_ok = 0;//清零解碼標志位        
  100.                         }
  101.                 }
  102.         }

  103. }
復制代碼


評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

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

使用道具 舉報

沙發
ID:88704 發表于 2019-3-3 14:25 來自手機 | 只看該作者
樓主,您好,為什么我照你的,寫,我的串口收到全部是四個 FF FF FF FF全部按鍵 都是這樣,可以請教你嗎
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲一区二区在线免费观看 | 欧美国产视频 | 中文字幕国产高清 | 91视频91| 国产午夜视频 | 欧美亚洲成人网 | 欧美一级二级视频 | 蜜桃视频在线观看免费视频网站www | h视频在线免费 | 91伊人网| 久婷婷 | 久久精品国产久精国产 | 黄色电影在线免费观看 | 亚洲精品成人 | 国产精品免费一区二区三区四区 | 黄色一级免费观看 | 国产成人免费视频网站高清观看视频 | 黄色a级一级片 | 国产操操操 | 91久久国产综合久久91精品网站 | 久久在线看 | 在线成人免费观看 | 九九精品网 | 91精品国产乱码久久久久久久 | 香蕉一区| 国产精品揄拍一区二区 | 欧美国产日韩精品 | 日韩性生活网 | 免费能直接在线观看黄的视频 | 欧美多人在线 | 久久精品亚洲 | 特黄特色大片免费视频观看 | 99久久久久| 国产免费国产 | 日韩亚洲视频 | 精品国产91久久久久久 | 免费在线色 | 在线激情视频 | 日干夜干 | 亚洲3级 | 国内精品久久久久久 |