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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

第9章 單片機模數轉換器ADC

[復制鏈接]
跳轉到指定樓層
樓主
9章 單片機模數轉換器ADC

1 A/D轉換實驗電路

2 使用單片機內部的10位ADC轉換器 (1) ADC相關的特殊功能寄存器
(2) 實例代碼
1 A/D轉換實驗電路

模數轉換就是將電路中連續變化的模擬電壓信號轉換為單片機可以識別的數 字信號,簡稱為A/D,實現模擬信號轉換成數字信號的器件稱為模數轉換器, 稱為ADC,ADC有專用的集成電路芯片,現在的新型單片機內部一般也集成有 ADC模塊。


(1) ADC相關的特殊功能寄存器
1、 P1口模擬功能控制寄存器P1ASF,各位定義如表9-1所示,如果要使用相應 口的ADC輸入功能,需將P1ASF特殊功能寄存器中的相應位置為1,比如:P1ASF
|= 0x02; // 開啟P1.1口的ADC輸入功能。
表9-1 P1ASF(復位值為0000 0000B)
D7
D6
D5
D4
D3
D2
D1
D0
位名稱
P17ASF
P16ASF
P15ASF
P14ASF
P13ASF
P12ASF
P11ASF
P10ASF
2、ADC控制寄存器ADC_CONTR,各位定義如表9-2所示。
表9-2 ADC_CONTR(復位值為0000 0000B)

① ADC_POWER:ADC電源控制位。 0:關閉ADC電源。 1:打開ADC電源。

② SPEED1、SPEED0:ADC轉換速度控制位, 如表9-3所示,當被采樣信號變化 頻率較高時應使用高的轉換頻率(比如用ADC采樣電路波形實現簡易的示波
器),當對功耗限制嚴格時應使用低的轉換頻率。
表9-3 ADC轉換速度控制

③ ADC_FLAG:A/D轉換結束標志位。

A/D轉換完成后,ADC_FLAG = 1,可由該位申請產生中斷,或者由軟件查詢該標志位判
斷A/D轉換是否結束,此標志只能由軟件清零。
④ ADC_START:A/D轉換啟動控制位,ADC_START=1,啟動轉換,轉換結束后為0。
⑤ CHS2、CHS1、CHS0:模擬輸入通道選擇,如表所示。

3、ADC轉換結果寄存器 ADC_RES、ADC_RESL ADC_RES[7:0]存放高8位ADC結果,ADC_RESL[1:0]存放低2位ADC結果。 ADC轉換結果計算公式如下(Vin為模擬輸入電壓,Vcc為單片機實際供電電壓): Vin = Vcc ×(ADC_RES[7:0],ADC_RESL[1:0])/1023

9.2.2、實例代碼

9.2.2、實例代碼

例9.1 IAP15W4K58S4單片機A/D轉換程序,查詢方式,測量結果電壓值發送到計算機串口
助手顯示,波特率9600/22.1184MHz,當使用配套實驗板時,需要將跳線帽“AD/串口2”插接
到AD處。
#include "UART.H"
//
包含IAP15W4K58S4寄存器定義文件
#define VCC 4.970
unsigned int ADC_P11()
//
存放用萬用表實測的單片機供電電壓
{
unsigned int i;

//

用于軟件延時程序

unsigned char status;
//
用于判斷A/D轉換結束的標志
unsigned int AD_Dat=0;
//
10位A/D轉換值
unsigned char Tmp;
//
臨時變量用于將A/D轉換出來的2個字節合成一個字節
ADC_CONTR|=0x80;
//
開ADC轉換器電源,第一次使用時要打開內部模擬電源
for (i=0;i<10000;i++);
//
適當延時等待ADC轉換供電穩定,一般延時1ms以內即可,
P1ASF|=0x02;
//
選擇P1.1作為ADC轉換通道,0x02= 0000 0010
ADC_CONTR=0xE1; // 選擇P1.1作為ADC轉換通道,最高轉換速度,清轉換完成標志。
for (i=0;i<1000;i++);
// 如果是多通道模擬量進行A/D轉換,則更換A/D轉換通道后要延時200μs

ADC_CONTR|=0x08; // 啟動 A/D 轉換,ADC_START=1。

status=0;
while(status==0) // 等待A/D轉換結束。
{
status=ADC_CONTR&0x10; // 判斷ADC_FLAG是否等于1,0x10=0001 0000B。
}
ADC_CONTR&=0xE7; // 將ADC_FLAG清0,0xE7=1110 0111B,ADC_FLAG=0,ADC_START=0。 AD_Dat = ADC_RES; // 默認高字節高8位。
AD_Dat <<= 2;
Tmp = ADC_RESL; // 默認低字節低2位。 Tmp &= 0x03; // 屏蔽無關位
AD_Dat |= Tmp; // 高低字節拼接成一個10位數。
return AD_Dat;
}
void main(void)
{
float Vin; // 存放計算出來的外部輸入電壓
unsigned int ADvalue; // 存放A/D轉換返回的結果 UART_init(); // 串口初始化9600/22.1184MHz printf("串口初始化完畢");
while(1)
{
ADvalue=ADC_P11(); // 采樣P1.1口模擬輸入電壓 Vin=VCC*ADvalue/1023; // 注意是1023才正確
printf("%.3f ",Vin);
delay500ms();
} // 若不用串口顯示,此行可設置斷點仿真觀察結果
}

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

使用道具 舉報

沙發
ID:143203 發表于 2016-11-21 11:40 | 只看該作者
1023????為何不是1024份?
回復

使用道具 舉報

板凳
ID:190932 發表于 2017-4-18 18:49 | 只看該作者
Y!NG 發表于 2016-11-21 11:40
1023????為何不是1024份?

0-1023  共有1024個數字  
回復

使用道具 舉報

地板
ID:143203 發表于 2017-9-12 08:02 | 只看該作者
鮮衣怒馬 發表于 2017-4-18 18:49
**** 作者被禁止或刪除 內容自動屏蔽 ****

既然是1024個數字那分母為什么不除去1024
回復

使用道具 舉報

5#
ID:255919 發表于 2019-1-1 21:18 | 只看該作者
這個程序沒有問題,通過串口助手,可以直接觀察輸輸出電壓。就是接入IIC接口的OLED屏后,不能實時顯示輸出的電壓
回復

使用道具 舉報

6#
ID:994634 發表于 2023-12-7 20:40 | 只看該作者
受益了,謝謝!
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 激情欧美日韩一区二区 | 91久久久精品国产一区二区蜜臀 | 精品毛片 | 91中文字幕在线观看 | 蜜臀网 | 国产精品久久久久影院色老大 | 国产乱码精品一区二区三区五月婷 | 日韩另类视频 | h视频在线免费 | 黄色片视频免费 | 91精品国产自产精品男人的天堂 | 亚洲精品99| 久草热在线 | 午夜激情免费 | 成人在线观看欧美 | 午夜免费视频 | 色悠悠久| 激情小视频 | 91精品一区| 91欧美激情一区二区三区成人 | 亚洲成人精品一区 | 99久久精品免费看国产四区 | 国产成人久久精品 | 国产粉嫩尤物极品99综合精品 | 国产一区二区成人 | 午夜影晥 | 欧美久久精品一级黑人c片 91免费在线视频 | 免费国产黄网站在线观看视频 | 国产精品毛片无码 | 国产高清免费视频 | 亚洲一区二区三区在线视频 | 青青操91| 91丨国产| 亚洲精品一区二区 | 1区2区视频| 精品亚洲一区二区三区四区五区 | 午夜资源 | 99久久婷婷国产综合精品电影 | 精品少妇一区二区三区在线播放 | 亚洲精品一区二区三区中文字幕 | 欧美一区二区三区一在线观看 |