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

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

QQ登錄

只需一步,快速開始

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

STC12C5A60S2單片機(jī)煙霧檢測(cè)感器讀取實(shí)驗(yàn)代碼

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

  6. #include <STC12C5A60S2.h>


  7. #define                BUF_LENTH        128                //定義串口接收緩沖長(zhǎng)度
  8. #define     uint unsigned int
  9. #define     uchar unsigned char
  10. unsigned char         uart1_wr;                //寫指針
  11. unsigned char         uart1_rd;                //讀指針
  12. unsigned char         xdata RX0_Buffer[BUF_LENTH];        //接收緩沖
  13. unsigned char flag;
  14. unsigned char i;
  15. unsigned char   xdata mbus_buffer[255];
  16. unsigned char   xdata mbus_Sendbuf[255];
  17. unsigned char   xdata Crc_buf[2];  //聲明存儲(chǔ)CRC校驗(yàn)值的高8位及低8位的緩存
  18. unsigned int  Crc_return_data;  //聲明CRC校驗(yàn)值
  19. bit                B_TI; //發(fā)送完成標(biāo)志
  20. sbit  P1_0 = P1^0;//定義P1.0端口
  21. //                                                                7       6      5       4         3      2    1    0   Reset Value
  22. //sfr ADC_CONTR = 0xBC;                ADC_POWER SPEED1 SPEED0 ADC_FLAG ADC_START CHS2 CHS1 CHS0 0000,0000        //AD 轉(zhuǎn)換控制寄存器
  23. #define ADC_OFF()        ADC_CONTR = 0
  24. #define ADC_ON                (1 << 7)
  25. #define ADC_90T                (3 << 5)
  26. #define ADC_180T        (2 << 5)
  27. #define ADC_360T        (1 << 5)
  28. #define ADC_540T        0
  29. #define ADC_FLAG        (1 << 4)        //軟件清0
  30. #define ADC_START        (1 << 3)        //自動(dòng)清0
  31. #define ADC_CH0                0
  32. #define ADC_CH1                1
  33. #define ADC_CH2                2
  34. #define ADC_CH3                3
  35. #define ADC_CH4                4
  36. #define ADC_CH5                5
  37. #define ADC_CH6                6
  38. #define ADC_CH7                7

  39. uint adc10_start(uchar channel);
  40. void        uart1_init(void);
  41. void Uart1_TxByte(unsigned char dat);
  42. void Uart1_String(unsigned char code *puts);
  43. void delay_ms(unsigned char ms);
  44. unsigned int cal_crc(unsigned char *snd, unsigned char num);
  45. /*************** 用戶定義參數(shù) *****************************/

  46. #define MAIN_Fosc                11059200UL       
  47. #define Baudrate0                9600UL               
  48.                                                                        
  49. /**********************************************************/


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

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


  52. /**********************************************************/

  53. //**********************************************************************
  54. //函數(shù)名:main(void)
  55. //輸入  :無
  56. //輸出  :無
  57. //功能描述:煙霧檢測(cè)傳感器采用MQ-2,當(dāng)有可燃?xì)怏w或者煙霧的時(shí)候,ADC1的采樣值大于
  58. //          85,即判定有煙霧,輸出字符串“YanWu”.         
  59. //**********************************************************************
  60. void        main(void)
  61. {
  62.         uint        j;
  63.         uart1_init();//初始化串口
  64.         P1ASF = (1 << ADC_CH1);        //STC12C5A16S2系列模擬輸入(AD)選擇ADC1(P1.1)
  65.         ADC_CONTR = ADC_360T | ADC_ON;
  66.         while(1)
  67.         {
  68.           
  69.          if(flag==1)
  70.                         {                delay_ms(5);
  71.                                                                                                                                                 
  72.                                         if(RX0_Buffer[0x03] == 0x34)
  73.                                         {
  74.                                                     j = adc10_start(1);        //(P1.1)ADC1轉(zhuǎn)換
  75.                                                            mbus_Sendbuf[3] = ((j>>8)&0xff);
  76.                                                            mbus_Sendbuf[4] = j&0xff;
  77.                                                            mbus_Sendbuf[2] = (((RX0_Buffer[0x04] * 16) + RX0_Buffer[0x05]) * 2);                                                          
  78.                                                            mbus_Sendbuf[0] = RX0_Buffer[0];  
  79.                                                            mbus_Sendbuf[1] = 0x03;
  80.                                                              
  81.                                                        
  82.                                                            Crc_return_data=cal_crc(mbus_Sendbuf, 5);  //取得將要發(fā)送數(shù)據(jù)的CRC值
  83.                                                    Crc_buf[0]=((Crc_return_data >> 8)&0xff);  //取得CRC值的高8位
  84.                                                    Crc_buf[1]=(Crc_return_data & 0xff);   //取得CRC值的低8位
  85.                                                            mbus_Sendbuf[5]=Crc_buf[1];  //CRC值低8位賦值給將要發(fā)送的數(shù)據(jù)的倒數(shù)第二個(gè)字節(jié)
  86.                                                            mbus_Sendbuf[6]=Crc_buf[0];  //CRC值高8位賦值給將要發(fā)送的數(shù)據(jù)的最后一個(gè)
  87.                                                          for(i = 0; i < 7; i++)
  88.                                                            {            
  89.                                                                         Uart1_TxByte(mbus_Sendbuf[i]);       
  90.                                                            }
  91.                                                                 flag=0;                          
  92.                                                         uart1_wr=0;                  
  93.                                         }       
  94.                           }
  95.         }
  96. }
  97. //**********************************************************************
  98. //函數(shù)名:adc10_start(uchar channel)
  99. //輸入  :ADC轉(zhuǎn)換的通道
  100. //輸出  :ADC值
  101. //功能描述:ADC轉(zhuǎn)換
  102. //**********************************************************************
  103. uint        adc10_start(uchar channel)        //channel = 0~7
  104. {
  105.         uint        adc;
  106.         uchar        i;

  107.         ADC_RES = 0;
  108.         ADC_RESL = 0;

  109.         ADC_CONTR = (ADC_CONTR & 0xe0) | ADC_START | channel;
  110.         i = 250;
  111.         do{
  112.                 if(ADC_CONTR & ADC_FLAG)
  113.                 {
  114.                         ADC_CONTR &= ~ADC_FLAG;
  115.                         adc = (uint)ADC_RES;
  116.                         adc = (adc << 2) | (ADC_RESL & 3);
  117.                         return        adc;
  118.                 }
  119.         }while(--i);
  120.         return        1024;
  121. }
  122. /*****************************CRC校驗(yàn)計(jì)算函數(shù)********************************/
  123. unsigned int cal_crc(unsigned char *snd, unsigned char num)

  124. {

  125.    unsigned char i, j;

  126.    unsigned int c,crc=0xFFFF;

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

  128.    {

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

  130.        crc ^= c;

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

  132.        {

  133.            if (crc & 0x0001)

  134.            {

  135.                crc>>=1;

  136.                crc^=0xA001;

  137.            }

  138.            else crc>>=1;

  139.        }

  140.    }   

  141.    return(crc);
  142. }
  143. //**********************************************************************
  144. //函數(shù)名:uart1_init(void)
  145. //輸入  :無
  146. //輸出  :無
  147. //功能描述:串口初始化函數(shù),通信參數(shù)為9600 8 N 1
  148. //**********************************************************************
  149. void        uart1_init(void)
  150. {
  151.         PCON |= 0x80;                //UART0 Double Rate Enable
  152.         SCON = 0x50;                //UART0 set as 10bit , UART0 RX enable
  153.         AUXR |=  0x01;                //UART0 使用BRT
  154.         AUXR |=  0x04;                //BRT set as 1T mode
  155.         BRT = BRT_Reload;
  156.         AUXR |=  0x10;                //start BRT       

  157.         ES  = 1;
  158.         EA = 1;
  159. }
  160. //**********************************************************************
  161. //函數(shù)名:Uart1_TxByte(unsigned char dat)
  162. //輸入  :需要發(fā)送的字節(jié)數(shù)據(jù)
  163. //輸出  :無
  164. //功能描述:從串口發(fā)送單字節(jié)數(shù)據(jù)
  165. //**********************************************************************
  166. void Uart1_TxByte(unsigned char dat)
  167. {
  168.     B_TI = 0;
  169.         SBUF = dat;
  170.         while(!B_TI);
  171.         B_TI = 0;
  172. }
  173. //**********************************************************************
  174. //函數(shù)名:Uart1_String(unsigned char code *puts)
  175. //輸入  :字符串首地址
  176. //輸出  :無
  177. //功能描述:從串口發(fā)送字符串
  178. //**********************************************************************
  179. void Uart1_String(unsigned char code *puts)
  180. {
  181.     for(; *puts != 0; puts++)
  182.         {
  183.         Uart1_TxByte(*puts);

  184.         }
  185. }

  186. //**********************************************************************
  187. //函數(shù)名:UART1_RCV (void)
  188. //輸入  :無
  189. //輸出  :無
  190. //功能描述:串口中斷接收函數(shù)
  191. //**********************************************************************
  192. void UART1_RCV (void) interrupt 4
  193. {
  194.         if(RI)
  195.         {
  196.                 RI = 0;
  197.                 RX0_Buffer[uart1_wr++] = SBUF;
  198.                 //if(++uart0_wr >= BUF_LENTH)        uart0_wr = 0;
  199.                 flag = 1;
  200.         }

  201.         if(TI)
  202.         {
  203.                 TI = 0;
  204.                 B_TI = 1;
  205.         }
  206. }

  207. void delay_ms(unsigned char ms)
  208. {
  209.     unsigned int i;
  210.         do{
  211.             i = MAIN_Fosc /1400;
  212.                 while(--i);
  213.         }while(--ms);
  214. }
復(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ù) 返回頂部 返回列表
主站蜘蛛池模板: 色吊丝2| 精品国产免费一区二区三区演员表 | 男女网站免费观看 | 91精品国产91久久久久久 | 超碰8| 一级黄色毛片免费 | 另类在线| 最新国产在线 | 国产精品国产精品国产专区不卡 | 欧美网址在线观看 | 黄a在线观看 | 日韩一区二区三区在线观看 | 羞羞在线观看视频 | 亚洲精品久久久久久久不卡四虎 | 亚洲国产精品一区二区第一页 | 欧美九九 | 日韩一区二区三区在线 | 国产精品黄色 | 成人一区二区三区在线观看 | 亚洲高清免费视频 | 在线精品亚洲欧美日韩国产 | 午夜免费电影 | 精品1区2区 | 九九九久久国产免费 | 日本成人中文字幕在线观看 | 久久久久国产 | 中文字幕日韩欧美一区二区三区 | 婷婷五月色综合 | 国产成都精品91一区二区三 | 午夜影院在线免费观看视频 | 久久精品中文 | 久久久久久久久久影视 | 精品亚洲一区二区三区四区五区 | 亚洲二区在线观看 | 国产视频福利一区 | h网站在线观看 | 日本一区二区在线视频 | 麻豆精品国产免费 | aaaaaa大片免费看最大的 | 欧美精品在线免费观看 | 四虎影院欧美 |