基於51微控制器ADC0809的基礎使用

2021-08-20 01:34:05 字數 1974 閱讀 5141

對於adc0809這種基礎的模擬轉數字的晶元,在現實生活中是很常用的,所以本人再此講一講自己做的心得體會。

首先我們的框架圖如下:

接下來我們需要了解adc0809,其引腳圖如下:

其中1.in(0~7):代表的是模擬輸號輸入通道,可以選擇(0~7腳)進行採集;

2.add(a~c):這3個腳是用來選擇模擬通道輸入口的,其真值表如下:

3.start:這個引腳是啟動adc0809的當有乙個脈衝輸入時,adc0809會開始轉換;

5.eoc:這個引腳是輸出腳,當adc0809處如轉換期,或者沒有工作時處於低電平狀態,當晶元轉換成功時會變成高電平;

6.2^(-1~-8):這8個腳是輸出腳,從msb到lsb分別對應的是(128,64......1),在程式中只需將其加起來再除以256*(v_ref+)即得所轉換的電壓;

7.output enable:這個引腳是控制輸出的引腳,當為低電平時,輸出呈高阻態,資料不輸出,當為高電平時,資料輸出;

8.clock:時鐘訊號輸入腳其範圍為(10khz到640khz,根據廠家的不同,其最大輸入時鐘訊號也會有所不同);

9.v_ref+:正基準電壓,這裡我選擇5v;

10.v_ref-:負基準電壓,這裡我們將其接地;

11.vcc:這裡我們接+5v;

12.gnd:接地。

寫程式時,我們需要了解其時序圖,時序圖如下:

從時序圖中可以看出,我們在程式中先寫位址,然後裝載位址,再啟動start,當eoc為高時,啟動output enable,資料輸出,微控制器讀資料。

從表中可以看出,每個電平的持續時間都是ns級的,51微控制器(以12mhz晶振為例),這裡我們的機器週期為1us,us

其微控制器與adc0809的連線圖如下:

其程式如下:

#include#define uint unsigned int

#define uchar unsigned char

sbit adda=p1^0; // 位址a

sbit addb=p1^1; // 位址b

sbit addc=p1^2; // 位址c

sbit start_ale=p1^4; // 位址裝載,轉換啟動腳

sbit oe=p1^5; // 輸出使能

sbit eoc=p1^6; // 轉換標誌位

sbit key_start=p3^2; // 開始轉換按鍵

sbit key_end=p3^3; // 停止轉換按鍵

uchar adc_date=0;

uint i;

void adc_start() //adc轉換開始函式

void usart_timer_init() //串列埠初始化,定時器初始化

void key_scan() //按鍵掃瞄函式

} }}

void main()

}void pick() interrupt 1 //定時器0中斷服務函式

VHDL狀態機控制ADC0809 轉貼

以前做硬體,現在轉做軟體了,對以前做的東西還是很懷念,想當年做的乙個用altera公司的epm7128slc84 7和adc0809做的乙個簡單系統,玩得團團轉,多有成就感啊。特別覺得狀態機的思想很奇妙。所以現在找了一篇vhdl狀態機的程式,懷念。基於vhdl語言實現對adc0809簡單控制原始碼 ...

微控制器筆記 ADC

mcp3421高精度adc轉換器 csdn部落格 blog.csdn.net 乙個專案的需求,使用的微控制器型號為stm32f030f4,雖然微控制器自帶了12位adc轉換器,解析度可以達到805.66uv 此型號沒有內部參考電壓,所以使用工作電壓作為參考電壓,所以精度值計算 3.3v除以2的12次...

微控制器 ADC詳解

之前有說到,計算機世界裡,只有數字量0和1,那你有沒有想過乙個問題,那要不是數字量怎麼表示。比如這樣。他在微控制器中是怎樣儲存及傳輸的呢?理論篇 數字量 在時間上和數量上都是離散的物理量稱為數字量。把表示數字量的訊號叫數碼訊號。把工作在數碼訊號下的電子電路叫數位電路。數字量由多個開關量組成。如三個開...