|
基于EB2530單片機(jī),采集到內(nèi)部溫度傳感器信息通過串口發(fā)送到上位機(jī)。
單片機(jī)源程序如下:
- /****************************************************************************
- * 文 件 名: main.c
- * 作 者: Andy
- * 修 訂: 2013-01-09
- * 版 本: 1.0
- * 描 述: ADC把芯片溫度通過串口發(fā)給電腦,部分芯片誤差較大需校準(zhǔn)
- * 手摸芯片溫度有明顯變化
- ****************************************************************************/
- #include <stdio.h>
- #include <string.h>
- #include "UartTimer.h"
- /****************************************************************************
- * 名 稱: InitSensor()
- * 功 能: 溫度傳感器初始化函數(shù)
- * 入口參數(shù): 無
- * 出口參數(shù): 無
- ****************************************************************************/
- void InitSensor(void)
- {
- DISABLE_ALL_INTERRUPTS(); //關(guān)閉所有中斷
- InitClock(); //設(shè)置系統(tǒng)主時(shí)鐘為 32M
- TR0=0x01; //設(shè)置為1來連接溫度傳感器到SOC_ADC
- ATEST=0x01; //使能溫度傳感
- }
- /****************************************************************************
- * 名 稱: GetTemperature()
- * 功 能: 獲取溫度傳感器 AD 值
- * 入口參數(shù): 無
- * 出口參數(shù): 通過計(jì)算返回實(shí)際的溫度值
- ****************************************************************************/
- float GetTemperature(void)
- {
- uint value;
-
- ADCCON3 = (0x3E); //選擇1.25V為參考電壓;14位分辨率;對片內(nèi)溫度傳感器采樣
- ADCCON1 |= 0x30; //選擇ADC的啟動(dòng)模式為手動(dòng)
- ADCCON1 |= 0x40; //啟動(dòng)AD轉(zhuǎn)化
- while(!(ADCCON1 & 0x80)); //等待 AD 轉(zhuǎn)換完成
- value = ADCL >> 4; //ADCL 寄存器低 2 位無效,由于他只有12位有效,ADCL寄存器低4位無效。網(wǎng)絡(luò)上很多代碼這里都是右移兩位,那是不對的
- value |= (((uint)ADCH) << 4);
-
- return (value-1367.5)/4.5-5; //根據(jù) AD 值,計(jì)算出實(shí)際的溫度,芯片手冊有錯(cuò),溫度系數(shù)應(yīng)該是4.5 /℃
- //進(jìn)行溫度校正,這里減去5℃(不同芯片根據(jù)具體情況校正)
- }
- /****************************************************************************
- * 程序入口函數(shù)
- ****************************************************************************/
- void main(void)
- {
- char i;
- float fSum, AvgTemp;
- char strTemp[6];
-
- InitUART(); //初始化串口
- InitSensor(); //初始化 ADC
-
- while(1)
- {
- fSum = 0;
- for (i=0; i<64; i++)
- {
- fSum += GetTemperature(); //取64次溫度總和
- }
- AvgTemp = fSum/64; //取64次溫度平均數(shù)
-
- memset(strTemp, 0, 6);
- sprintf(strTemp,"%.02f", AvgTemp);//將浮點(diǎn)數(shù)轉(zhuǎn)成字符串,保留2位小數(shù)位
- UartSendString(strTemp, 5); //通過串口發(fā)給電腦顯示芯片溫度
- DelayMS(1000); //延時(shí)
- }
- }
復(fù)制代碼
所有資料51hei提供下載:
ADC.zip
(45.43 KB, 下載次數(shù): 10)
2019-8-21 11:26 上傳
點(diǎn)擊文件名下載附件
adc串口顯示源代碼 下載積分: 黑幣 -5
|
|