欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 4183|回復(fù): 1
收起左側(cè)

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

[復(fù)制鏈接]
ID:412370 發(fā)表于 2018-12-9 20:53 | 顯示全部樓層 |閱讀模式
nec協(xié)議紅外通信
15w204s @11.0592hz 單片機(jī)解碼后通過(guò)串口以9600的比特率發(fā)送出去,stc的串口助手,串口3查看碼值

單片機(jī)源碼:
  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;          //儲(chǔ)存檢測(cè)紅外高低電平持續(xù)時(shí)間
  10. uchar IRcord[4];  //儲(chǔ)存解碼后的4個(gè)字節(jié)數(shù)據(jù)
  11. uchar IRdata[33]; //包含起始碼在內(nèi)的33位數(shù)據(jù)
  12. bit IRpro_ok;          //解碼后4個(gè)字節(jié)數(shù)據(jù)接收完成標(biāo)志位
  13. bit IRok;                  //33位數(shù)據(jù)接收完成標(biāo)志

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

  22.         IT0 = 1;//設(shè)置外部中斷0跳變沿觸發(fā)方式
  23.         EX0 = 1;//開(kāi)外部中斷0中斷

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

  32. //定時(shí)器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;//靜態(tài)變量用于存入33次數(shù)據(jù)計(jì)數(shù)
  41.         static bit startflag;//開(kāi)始儲(chǔ)存脈寬標(biāo)志位
  42.         if(startflag)
  43.         {
  44.                 /*判斷引導(dǎo)碼,如果是引導(dǎo)碼則從起始碼開(kāi)始存*/
  45.                 if((IRtime < 53) && (IRtime >= 32))        i = 0;
  46.                 IRdata[i] = IRtime;//以TO溢出的次數(shù)來(lái)計(jì)算脈寬把這個(gè)時(shí)間存放在數(shù)組中
  47.                 IRtime = 0;//計(jì)數(shù)清零
  48.                 i++;//計(jì)數(shù)脈寬存入次數(shù)自加
  49.                 if(i == 33)           //i等于33那么就表示已經(jīng)存入了33次脈寬
  50.                 {
  51.                         IRok = 1; //脈寬檢查完成
  52.                         i = 0;          //把脈寬計(jì)數(shù)清零準(zhǔn)備下次存入
  53.                 }
  54.         }
  55.         else
  56.         {
  57.                 IRtime = 0;          //定時(shí)器0計(jì)數(shù)清零
  58.                 startflag = 1;//開(kāi)始處理標(biāo)志位置1
  59.         }

  60. }

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

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

  103. }
復(fù)制代碼


評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

ID:88704 發(fā)表于 2019-3-3 14:25 來(lái)自觸屏版 | 顯示全部樓層
樓主,您好,為什么我照你的,寫,我的串口收到全部是四個(gè) FF FF FF FF全部按鍵 都是這樣,可以請(qǐng)教你嗎
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表