請問STC8A單片機多通道使用怎么切換達使用,我只會該單通道使用的程序,兩個通道同時使用不會更改 請問怎么改
170606ofznnsfpeggnevh1.png (27.92 KB, 下載次數: 32)
下載附件
2019-11-21 18:58 上傳
單片機源程序如下:
- #include
- #include // _nop_()function
- #include "STC8.h"
- #include
- #include "DELAY.h"
- #define VCC 2.5
- #define Tstop2 1400 //剎車溫度2
- #define Tstop1 1400 //剎車溫度1
- #define T 1400 //目標溫度
- #define T_poor 20 //目標溫度差
- #define Tmax 1500 //最大溫度
- #define TAlert 1540 //警戒溫度
- #define uint unsigned int
- #define uchar unsigned char
- #define U32 unsigned long
- #define U16 unsigned int
- #define FOSC 24000000UL
- #define BRT (65536 - FOSC / 115200 / 4)
- #define ADC_CHANNEL0 0x00 //轉換通道P1.0
- #define ADC_CHANNEL1 0x01 //轉換通道P1.1
- #define ADC_CHANNEL2 0x02 //轉換通道P1.2
- #define ADC_CHANNEL3 0x03 //轉換通道P1.3
- #define ADC_CHANNEL4 0x04 //轉換通道P1.4
- #define ADC_CHANNEL5 0x05 //轉換通道P1.5
- #define ADC_CHANNEL6 0x06 //轉換通道P1.6
- #define ADC_CHANNEL7 0x07 //轉換通道P1.7
- #define ADC_CHANNEL8 0x08 //轉換通道P0.0
- #define ADC_CHANNEL9 0x09 //轉換通道P0.1
- #define ADC_CHANNEL10 0x0a //轉換通道P0.2
- #define ADC_CHANNEL11 0x0b //轉換通道P0.3
- #define ADC_CHANNEL12 0x0c //轉換通道P0.4
- #define ADC_CHANNEL13 0x0d //轉換通道P0.5
- #define ADC_CHANNEL14 0x0e //轉換通道P0.6
- sbit TEMP1 = P0^2; //控制1
- sbit TEMP2 = P4^3; //控制2
- sbit TEMP3 = P0^3; //控制3
- float code RTD_TAB_PT100[] =
- {
- 88.04,87.64,87.24,86.84,86.44,86.04,85.63,85.23,84.83,84.43, //-30
- 92.04,91.64,91.24,90.84,90.44,90.04,89.64,89.24,88.84,88.44, //-20
- 98.03,95.63,95.23,94.83,94.43,94.03,93.63,93.24,92.84,92.44, //-10
- 100.00,99.60,99.21,98.81,98.41,98.01,97.62,97.22,96.82,96.42, //-0
- 100.00,100.40,100.79,101.19,101.59,101.98,102.38,102.78,103.17,103.57, //0
- 103.96,104.36,104.75,105.15,105.54,105.94,106.33,106.73,107.12,107.52, //10
- 107.91,108.31,108.70,109.10,109.49,109.88,110.28,110.67,111.07,111.46, //20
- 111.85,112.25,112.64,113.03,113.43,113.82,114.21,114.60,115.00,115.39, //30
- 115.78,116.17,116.57,116.96,117.35,117.74,118.13,118.52,118.91,119.31, //40
- 119.70,120.09,120.48,120.87,121.26,121.65,122.04,122.43,122.82,123.21, //50
- 123.60,123.99,124.38,124.77,125.16,125.55,125.94,126.33,126.72,127.10, //60
- };
- U32 AD_value;
- ////PT100溫度采集
- //unsigned char xdata ADC1;//外部溫度1
- //unsigned char xdata ADC2;//外部溫度2
- //unsigned char xdata ADC3;//油溫度
- /**********************初始化串口******************************/
- void UartInit(void) //9600bps@24.000MHz
- {
- SCON = 0x50; //8位數據,可變波特率
- AUXR |= 0x40; //定時器1時鐘為Fosc,即1T
- AUXR &= 0xFE; //串口1選擇定時器1為波特率發生器
- TMOD &= 0x0F; //設定定時器1為16位自動重裝方式
- TL1 = 0x8F; //設定定時初值
- TH1 = 0xFD; //設定定時初值
- ET1 = 0; //禁止定時器1中斷
- TR1 = 1; //啟動定時器1
- TI=1;
- }
- //-----------------------------------------
- //ADC初始化程序
- //
- //-----------------------------------------
- void ADC_INI()
- {
- P1M0 = 0xff; //設置P1為ADC口
- P1M1 = 0x00;
- // ADC_CONTR |= 0x03; //切換AD通道,03為 P1.3
- ADCCFG = 0x0f; //設置ADC時鐘為系統時鐘/2/16/16
- ADC_CONTR = 0x80; //使能ADC模塊
- EADC = 1; //使能ADC中斷
- ADC_CONTR |= 0x40; //啟動AD轉換
- }
- //-----------------------------------------
- //AD中斷服務程序
- //
- //-----------------------------------------
- void ADC_Isr() interrupt 5 using 1
- {
- static U32 accumulator = 0;//AD采集數值累加
- static U16 measurements = 20;//數據值平均次數
- U32 result = 0; //平均值結果
- EA = 0;//20190121
- ADC_CONTR|= 0x03;
- ADC_CONTR &= ~0x20; //清中斷標志
- ADCCFG = 0x20; //設置結果右對齊
- ACC = ADC_RES; //A[3:0]存儲ADC的12位結果的高4位,A[7:4]為0
- B = ADC_RESL; //B存儲ADC的12位結果的低8位
- accumulator += ACC * 256 + B; // Add most recent sample
- measurements--;
- if (measurements == 0)
- {
- measurements = 20;//平均值濾波======================
- result = accumulator / measurements;
- accumulator = 0; //=================================
- AD_value = result ;
- }
- EA = 1;
- ADC_CONTR |= 0x40; //繼續AD轉換
- }
- /*******************************主函數**********************************/
- void main (void)
- {
- float Vin3,T0,AD3;//,//Vin2;
- // uint AD3=0;
- // uint T0=0;
- uint AD2= 100;
-
- //使用內部高精度晶振 ----------------------------------------------------
- P_SW2 = P_SW2 | 0x80; //訪問擴展SFR時,要將P_SW2的高位置 1, EAXFR = 1
- CKSEL = 0x00;//使用內部高精度晶振
- CLKDIV = 0x00;//時鐘不分頻 默認是4分頻即:CLKDIV = 0x04;
- while (1) //等待晶振穩定*************
- {
- if ((IRC24MCR & 0x01) == 1)
- {
- IRC24MCR = IRC24MCR |0x80;
- break;
- }
- } //******************************
- P_SW2 = P_SW2 & 0x7F;
- //-------------------------------------------------------------------------
-
- UartInit();
- ADC_INI();
- TEMP1= 0;
- TEMP2= 0;
- TEMP3= 0; //控制端置0
-
- EA = 1;
-
- while(1)
- {
- AD3 = AD_value;
- Vin3 = AD3; //輸出通道3的電壓值
- T0 = Vin3;
-
-
-
-
- }
- }
復制代碼 全部資料51hei下載地址:
TempCtrl.zip
(51.99 KB, 下載次數: 17)
2019-11-21 16:01 上傳
點擊文件名下載附件
程序
|