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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

STC8A單片機多通道同時使用的程序問題

[復制鏈接]
跳轉到指定樓層
樓主
10黑幣
請問STC8A單片機多通道使用怎么切換達使用,我只會該單通道使用的程序,兩個通道同時使用不會更改  請問怎么改

單片機源程序如下:
  1. #include
  2. #include  // _nop_()function
  3. #include "STC8.h"
  4. #include
  5. #include "DELAY.h"


  6. #define VCC  2.5
  7. #define Tstop2  1400      //剎車溫度2
  8. #define Tstop1  1400     //剎車溫度1
  9. #define T       1400        //目標溫度
  10. #define T_poor  20          //目標溫度差
  11. #define Tmax    1500      //最大溫度
  12. #define TAlert  1540     //警戒溫度
  13. #define uint unsigned int
  14. #define uchar  unsigned char
  15. #define U32 unsigned long
  16. #define U16 unsigned int

  17. #define FOSC            24000000UL
  18. #define BRT             (65536 - FOSC / 115200 / 4)


  19. #define ADC_CHANNEL0          0x00            //轉換通道P1.0
  20. #define ADC_CHANNEL1          0x01            //轉換通道P1.1
  21. #define ADC_CHANNEL2          0x02            //轉換通道P1.2
  22. #define ADC_CHANNEL3          0x03            //轉換通道P1.3
  23. #define ADC_CHANNEL4          0x04            //轉換通道P1.4
  24. #define ADC_CHANNEL5          0x05            //轉換通道P1.5
  25. #define ADC_CHANNEL6          0x06            //轉換通道P1.6
  26. #define ADC_CHANNEL7          0x07            //轉換通道P1.7
  27. #define ADC_CHANNEL8          0x08            //轉換通道P0.0
  28. #define ADC_CHANNEL9          0x09            //轉換通道P0.1
  29. #define ADC_CHANNEL10         0x0a            //轉換通道P0.2
  30. #define ADC_CHANNEL11         0x0b            //轉換通道P0.3
  31. #define ADC_CHANNEL12         0x0c            //轉換通道P0.4
  32. #define ADC_CHANNEL13         0x0d            //轉換通道P0.5
  33. #define ADC_CHANNEL14         0x0e            //轉換通道P0.6


  34. sbit TEMP1 = P0^2; //控制1
  35. sbit TEMP2 = P4^3; //控制2
  36. sbit TEMP3 = P0^3; //控制3



  37. float code RTD_TAB_PT100[] =   
  38. {
  39.   88.04,87.64,87.24,86.84,86.44,86.04,85.63,85.23,84.83,84.43, //-30
  40.         92.04,91.64,91.24,90.84,90.44,90.04,89.64,89.24,88.84,88.44, //-20
  41.         98.03,95.63,95.23,94.83,94.43,94.03,93.63,93.24,92.84,92.44, //-10
  42.         100.00,99.60,99.21,98.81,98.41,98.01,97.62,97.22,96.82,96.42, //-0
  43.         100.00,100.40,100.79,101.19,101.59,101.98,102.38,102.78,103.17,103.57, //0
  44.   103.96,104.36,104.75,105.15,105.54,105.94,106.33,106.73,107.12,107.52, //10
  45.         107.91,108.31,108.70,109.10,109.49,109.88,110.28,110.67,111.07,111.46, //20
  46.         111.85,112.25,112.64,113.03,113.43,113.82,114.21,114.60,115.00,115.39, //30
  47.         115.78,116.17,116.57,116.96,117.35,117.74,118.13,118.52,118.91,119.31, //40
  48.         119.70,120.09,120.48,120.87,121.26,121.65,122.04,122.43,122.82,123.21, //50
  49.         123.60,123.99,124.38,124.77,125.16,125.55,125.94,126.33,126.72,127.10, //60
  50. };


  51. U32 AD_value;

  52. ////PT100溫度采集
  53. //unsigned char xdata  ADC1;//外部溫度1
  54. //unsigned char xdata  ADC2;//外部溫度2
  55. //unsigned char xdata  ADC3;//油溫度

  56. /**********************初始化串口******************************/
  57. void UartInit(void)                //9600bps@24.000MHz
  58. {
  59.         SCON = 0x50;                //8位數據,可變波特率
  60.         AUXR |= 0x40;                //定時器1時鐘為Fosc,即1T
  61.         AUXR &= 0xFE;                //串口1選擇定時器1為波特率發生器
  62.         TMOD &= 0x0F;                //設定定時器1為16位自動重裝方式
  63.         TL1 = 0x8F;                //設定定時初值
  64.         TH1 = 0xFD;                //設定定時初值
  65.         ET1 = 0;                //禁止定時器1中斷
  66.         TR1 = 1;                //啟動定時器1
  67.         TI=1;
  68. }

  69. //-----------------------------------------
  70. //ADC初始化程序
  71. //
  72. //-----------------------------------------
  73. void ADC_INI()
  74. {
  75.     P1M0 = 0xff;                                //設置P1為ADC口
  76.     P1M1 = 0x00;
  77.    // ADC_CONTR |= 0x03;                                                                                                        //切換AD通道,03為  P1.3
  78.     ADCCFG = 0x0f;                              //設置ADC時鐘為系統時鐘/2/16/16
  79.     ADC_CONTR = 0x80;                           //使能ADC模塊
  80.     EADC = 1;                                   //使能ADC中斷
  81.     ADC_CONTR |= 0x40;                          //啟動AD轉換
  82. }


  83. //-----------------------------------------
  84. //AD中斷服務程序
  85. //
  86. //-----------------------------------------
  87. void ADC_Isr() interrupt 5 using 1
  88. {
  89.   static U32 accumulator = 0;//AD采集數值累加
  90.   static U16 measurements = 20;//數據值平均次數

  91.   U32 result = 0;  //平均值結果

  92.   EA = 0;//20190121
  93.         ADC_CONTR|= 0x03;
  94.   ADC_CONTR &= ~0x20;                         //清中斷標志
  95.   ADCCFG = 0x20;                              //設置結果右對齊
  96.   ACC = ADC_RES;                              //A[3:0]存儲ADC的12位結果的高4位,A[7:4]為0
  97.   B = ADC_RESL;                               //B存儲ADC的12位結果的低8位

  98.   accumulator += ACC * 256 + B;                // Add most recent sample
  99.   measurements--;

  100.   if (measurements == 0)
  101.     {
  102.      measurements = 20;//平均值濾波======================
  103.      result = accumulator / measurements;
  104.      accumulator = 0;        //=================================
  105.      AD_value =  result ;
  106.                 }
  107.         EA = 1;
  108.   ADC_CONTR |= 0x40;   //繼續AD轉換               
  109.         }



  110. /*******************************主函數**********************************/
  111. void main (void)
  112. {

  113.   float  Vin3,T0,AD3;//,//Vin2;
  114. //  uint AD3=0;
  115. //        uint T0=0;

  116.   uint AD2= 100;


  117. //使用內部高精度晶振  ----------------------------------------------------
  118.   P_SW2 = P_SW2 | 0x80;  //訪問擴展SFR時,要將P_SW2的高位置 1, EAXFR = 1
  119.   CKSEL = 0x00;//使用內部高精度晶振
  120.   CLKDIV = 0x00;//時鐘不分頻  默認是4分頻即:CLKDIV = 0x04;
  121.   while (1) //等待晶振穩定*************
  122.     {
  123.      if ((IRC24MCR & 0x01) == 1)
  124.        {
  125.        IRC24MCR = IRC24MCR |0x80;
  126.        break;
  127.        }
  128.      } //******************************
  129.   P_SW2 = P_SW2 & 0x7F;
  130. //-------------------------------------------------------------------------        
  131.   

  132.   UartInit();
  133.         ADC_INI();
  134.         TEMP1= 0;
  135.   TEMP2= 0;
  136.         TEMP3= 0;   //控制端置0
  137.                   
  138.         EA = 1;
  139.                  
  140.   while(1)
  141.                 {

  142.                 AD3 = AD_value;
  143.     Vin3 =  AD3;   //輸出通道3的電壓值
  144.                 T0 = Vin3;        
  145.         
  146.                                 
  147.                         
  148.                         
  149.                 }
  150. }
復制代碼
全部資料51hei下載地址:
TempCtrl.zip (51.99 KB, 下載次數: 17)

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

使用道具 舉報

沙發
ID:213173 發表于 2019-11-21 20:43 | 只看該作者
STC8A8K16S4A12有8個ADC通道,但內部AD轉換器只有1個(其它品牌也基本如此),通過開關選通某通道轉換。不可能多通道同時轉換,而是分時轉換。由于轉換速度很快,可以理解為同時轉換。
回復

使用道具 舉報

板凳
ID:123289 發表于 2019-11-21 21:54 | 只看該作者
多通道不用怕,就當成單通道來寫!
關鍵是協議,你可以在協議上做文章,各機下載的數據,有取有舍,協議規定是自己的就取,不是自己的就舍,也就OK了。
當然其中有此技巧,你要看書,看多機通訊的章節。
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美一区二区三区在线视频 | wwww.xxxx免费| 久久久久国产精品一区二区 | 91精品国产综合久久久久久 | 国产综合精品一区二区三区 | 黄色片免费 | 国产成人网 | 日本网站免费在线观看 | 国产精品自产拍在线观看蜜 | 欧美性猛片aaaaaaa做受 | 91偷拍精品一区二区三区 | 中文字幕在线视频一区二区三区 | 国产精品久久av | 欧美一级大片免费看 | 激情欧美日韩一区二区 | 91国在线视频 | 欧美久久国产精品 | 日韩2020狼一二三 | 日日操夜夜干 | 亚洲香蕉 | 亚洲精品视频一区 | 久久99蜜桃综合影院免费观看 | 精品久久99 | 久久久久国产精品人 | 91精品国产综合久久精品 | 羞羞午夜| 日本一二三区在线观看 | 日韩和的一区二区 | 99reav| 亚洲综合精品 | 天堂网av在线 | 亚洲黄色片免费观看 | 国产精品日日做人人爱 | 欧美日韩福利视频 | 草草视频在线观看 | 国产欧美一区二区三区久久手机版 | 人人人人爽 | 日本三级电影在线免费观看 | 欧美午夜精品久久久久免费视 | 亚洲一区精品在线 | 欧美日韩一区二区三区不卡视频 |