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

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

QQ登錄

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

搜索
查看: 2474|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

51單片機(jī)紅外反射傳感器實(shí)驗(yàn)代碼

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:448967 發(fā)表于 2018-12-18 15:34 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
  1. /**********************************************************/
  2. //晶振頻率:11.0592MHz
  3. //文件名  :Main.c
  4. //功能說(shuō)明:紅外反射傳感器實(shí)驗(yàn)
  5. /**********************************************************/

  6. #include <STC12C5A60S2.h>


  7. #define                BUF_LENTH        128                //定義串口接收緩沖長(zhǎng)度
  8. unsigned char         uart1_wr;                //寫(xiě)指針
  9. unsigned char         uart1_rd;                //讀指針
  10. unsigned char         xdata RX0_Buffer[BUF_LENTH];        //接收緩沖
  11. unsigned char flag;
  12. unsigned char i;
  13. unsigned char   xdata mbus_buffer[255];
  14. unsigned char   xdata mbus_Sendbuf[255];
  15. unsigned char   xdata Crc_buf[2];  //聲明存儲(chǔ)CRC校驗(yàn)值的高8位及低8位的緩存
  16. unsigned int  Crc_return_data;  //聲明CRC校驗(yàn)值
  17. bit                B_TI; //發(fā)送完成標(biāo)志
  18. sbit  P1_0 = P1^0;//定義P1.0端口

  19. void        uart1_init(void);
  20. void Uart1_TxByte(unsigned char dat);
  21. void Uart1_String(unsigned char code *puts);
  22. void delay_ms(unsigned char ms);
  23. unsigned int cal_crc(unsigned char *snd, unsigned char num);

  24. /*************** 用戶定義參數(shù) *****************************/

  25. #define MAIN_Fosc                11059200UL       
  26. #define Baudrate0                9600UL               
  27.                                                                        
  28. /**********************************************************/


  29. /****************** 編譯器自動(dòng)生成,用戶請(qǐng)勿修改 ************************************/

  30. #define BRT_Reload                        (256 - MAIN_Fosc / 16 / Baudrate0)                //Calculate the timer1 reload value ar 1T mode


  31. /**********************************************************/

  32. //**********************************************************************
  33. //函數(shù)名:main(void)
  34. //輸入  :無(wú)
  35. //輸出  :無(wú)
  36. //功能描述:當(dāng)串口有讀取紅外反射的指令過(guò)來(lái),單片機(jī)把有無(wú)物體擋在紅外反射
  37. //傳感器上面的狀態(tài)指令返回到串口
  38. //**********************************************************************
  39. void        main(void)
  40. {
  41.         uart1_init();//初始化串口
  42.         while(1)
  43.         {
  44.              if(flag==1)
  45.                         {                delay_ms(5);
  46.                                                                                                                                                 
  47.                                         if(RX0_Buffer[0x03] == 0x36)
  48.                                         {
  49.                                                    
  50.                                                            mbus_Sendbuf[3] = 0x00;
  51.                                                            mbus_Sendbuf[4] = 0x00;
  52.                                                            if(P1_0==0)
  53.                                                            {
  54.                                                            mbus_Sendbuf[4] = 0x01;
  55.                                                            }
  56.                                                            mbus_Sendbuf[2] = (((RX0_Buffer[0x04] * 16) + RX0_Buffer[0x05]) * 2);                                                          
  57.                                                            mbus_Sendbuf[0] = RX0_Buffer[0];  
  58.                                                            mbus_Sendbuf[1] = 0x03;
  59.                                                              
  60.                                                        
  61.                                                            Crc_return_data=cal_crc(mbus_Sendbuf, 5);  //取得將要發(fā)送數(shù)據(jù)的CRC值
  62.                                                    Crc_buf[0]=((Crc_return_data >> 8)&0xff);  //取得CRC值的高8位
  63.                                                    Crc_buf[1]=(Crc_return_data & 0xff);   //取得CRC值的低8位
  64.                                                            mbus_Sendbuf[5]=Crc_buf[1];  //CRC值低8位賦值給將要發(fā)送的數(shù)據(jù)的倒數(shù)第二個(gè)字節(jié)
  65.                                                            mbus_Sendbuf[6]=Crc_buf[0];  //CRC值高8位賦值給將要發(fā)送的數(shù)據(jù)的最后一個(gè)
  66.                                                          for(i = 0; i < 7; i++)
  67.                                                            {            
  68.                                                                         Uart1_TxByte(mbus_Sendbuf[i]);       
  69.                                                            }
  70.                                                                 flag=0;                          
  71.                                                         uart1_wr=0;                  
  72.                                         }       
  73.                           }  
  74.         }
  75. }


  76. //**********************************************************************
  77. //函數(shù)名:uart1_init(void)
  78. //輸入  :無(wú)
  79. //輸出  :無(wú)
  80. //功能描述:串口初始化函數(shù),通信參數(shù)為9600 8 N 1
  81. //**********************************************************************
  82. void        uart1_init(void)
  83. {
  84.         PCON |= 0x80;                //UART0 Double Rate Enable
  85.         SCON = 0x50;                //UART0 set as 10bit , UART0 RX enable
  86.         AUXR |=  0x01;                //UART0 使用BRT
  87.         AUXR |=  0x04;                //BRT set as 1T mode
  88.         BRT = BRT_Reload;
  89.         AUXR |=  0x10;                //start BRT       

  90.         ES  = 1;
  91.         EA = 1;
  92. }
  93. /*****************************CRC校驗(yàn)計(jì)算函數(shù)********************************/
  94. unsigned int cal_crc(unsigned char *snd, unsigned char num)

  95. {

  96.    unsigned char i, j;

  97.    unsigned int c,crc=0xFFFF;

  98.    for(i = 0; i < num; i ++)

  99.    {

  100.        c = snd[i] & 0x00FF;

  101.        crc ^= c;

  102.        for(j = 0;j < 8; j ++)

  103.        {

  104.            if (crc & 0x0001)

  105.            {

  106.                crc>>=1;

  107.                crc^=0xA001;

  108.            }

  109.            else crc>>=1;

  110.        }

  111.    }   

  112.    return(crc);
  113. }
  114. //**********************************************************************
  115. //函數(shù)名:Uart1_TxByte(unsigned char dat)
  116. //輸入  :需要發(fā)送的字節(jié)數(shù)據(jù)
  117. //輸出  :無(wú)
  118. //功能描述:從串口發(fā)送單字節(jié)數(shù)據(jù)
  119. //**********************************************************************
  120. void Uart1_TxByte(unsigned char dat)
  121. {
  122.     B_TI = 0;
  123.         SBUF = dat;
  124.         while(!B_TI);
  125.         B_TI = 0;
  126. }
  127. //**********************************************************************
  128. //函數(shù)名:Uart1_String(unsigned char code *puts)
  129. //輸入  :字符串首地址
  130. //輸出  :無(wú)
  131. //功能描述:從串口發(fā)送字符串
  132. //**********************************************************************
  133. void Uart1_String(unsigned char code *puts)
  134. {
  135.     for(; *puts != 0; puts++)
  136.         {
  137.         Uart1_TxByte(*puts);

  138.         }
  139. }

  140. //**********************************************************************
  141. //函數(shù)名:UART1_RCV (void)
  142. //輸入  :無(wú)
  143. //輸出  :無(wú)
  144. //功能描述:串口中斷接收函數(shù)
  145. //**********************************************************************
  146. void UART1_RCV (void) interrupt 4
  147. {
  148.         if(RI)
  149.         {
  150.                 RI = 0;
  151.                 RX0_Buffer[uart1_wr++] = SBUF;
  152.                 //if(++uart0_wr >= BUF_LENTH)        uart0_wr = 0;
  153.                 flag = 1;
  154.         }

  155.         if(TI)
  156.         {
  157.                 TI = 0;
  158.                 B_TI = 1;
  159.         }
  160. }

  161. void delay_ms(unsigned char ms)
  162. {
  163.     unsigned int i;
  164.         do{
  165.             i = MAIN_Fosc /1400;
  166.                 while(--i);
  167.         }while(--ms);
  168. }
復(fù)制代碼


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

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 欧美天堂在线观看 | 91香蕉嫩草 | 亚洲品质自拍视频 | 亚洲欧美日韩在线 | 免费一区二区三区在线视频 | 欧美一级做a爰片免费视频 国产美女特级嫩嫩嫩bbb片 | 韩国av一区二区 | 国产精品国产 | 九色视频网站 | 国产精品一区二区视频 | 在线一区二区国产 | 久久精品视频在线免费观看 | 黄色一级免费 | 亚洲精品日韩综合观看成人91 | 黄色福利 | 久久久.com | 亚洲日日操 | 亚洲国产精品美女 | 女同videos另类 | 欧美日韩精品一区二区三区蜜桃 | 日本在线综合 | 久久久久久中文字幕 | 在线成人福利 | 国产精品久久久久国产a级 欧美日韩国产免费 | 99国产精品99久久久久久 | 欧美一区二区久久 | 亚洲人成网站777色婷婷 | av一区在线 | 国产免费一区二区三区 | 日本在线观看网址 | 精品在线一区 | 精品国产91| 精品久久久久久久久久久久久久 | 精品欧美一区二区三区久久久小说 | 福利精品 | 免费久久99精品国产婷婷六月 | 亚洲精品久久久一区二区三区 | 久久国产精品一区二区三区 | 香蕉视频在线播放 | 亚洲风情在线观看 | av中文字幕网 |