|
在工業(yè)控制和智能化儀表中,常由單片機進行實時控制及實時數(shù)據(jù)處理。單片機所加工的信息都是數(shù)字量,而被控制或測量對象的有關(guān)參量往往是連續(xù)變化的模擬量,如溫度、速度、壓力等等,與此對應(yīng)的電信號是模擬電信號。單片機要處理這種信號,首先必須將模擬量轉(zhuǎn)換成數(shù)字量,這一轉(zhuǎn)換過程就是模—數(shù)轉(zhuǎn)換,實現(xiàn)模/數(shù)轉(zhuǎn)換的設(shè)備稱為A/D轉(zhuǎn)換器或ADC。 AD轉(zhuǎn)換器是單片機應(yīng)用中常見的接口,從事單片機開發(fā)的人員通常都會遇到使用AD的要求,本文通過一個典型的例子來學(xué)習(xí)一種常用AD轉(zhuǎn)換器的用法。
一、模數(shù)轉(zhuǎn)換簡介 A/D轉(zhuǎn)換電路種類很多,在選擇模/數(shù)轉(zhuǎn)換器時,主要考慮以下的一些技術(shù)指標:轉(zhuǎn)換時間和轉(zhuǎn)換頻率、量化誤差與分辨率、轉(zhuǎn)換精度、接口形式等。目前,較為流行的 AD轉(zhuǎn)換器件有很多都采用了串行接口,這使得這類芯片與單片機的硬件連接非常簡單,而軟件編程相對要復(fù)雜一些,下面,我們以TI公司的TLC1543為例,制作一個多路輸入的電壓表,了解一下這類芯片的使用特點。
二、TLC1543特性簡介 TLC1543是由TI公司開發(fā)的開關(guān)電容式AD轉(zhuǎn)換器,該芯片具有如下的一些特點: 10位精度、11通道、三種內(nèi)建的自測模式、提供EOC(轉(zhuǎn)換完成)信號等。該芯片與單片機的接口采用串行接口方式,引線很少,與單片機連接簡單。 圖1是TLC1543的引腳示意圖,其中A0~A10是11路輸入,Vcc和GND分別是電源引腳,REF+和REF-分別是參考電源的正負引腳,使用時一般將REF-接到系統(tǒng)的地,達到一點接地的要求,以減少干擾。其余的引腳是TLC1543與CPU的接口,其中CS為片選端,如不需選片,可直接接地。I/O Clock是芯片的時鐘端,Adress是地址選擇端,Data Out是數(shù)據(jù)輸出端,這三根引腳分別接到CPU的三個I/O端即可。EOC用于指示一次AD轉(zhuǎn)換已完成,CPU可以讀取數(shù)據(jù),該引腳是低電平有效,根據(jù)需要,該引腳可接入CPU的中斷引腳,一旦數(shù)據(jù)轉(zhuǎn)換完成,向CPU提出中斷請求;此外,也可將該引腳接入一個普通的I/O引腳,CPU通過查詢該引腳的狀態(tài)來了解當前的狀態(tài),甚至該引腳也可以不接,在CPU向TLC1543發(fā)出轉(zhuǎn)換命令后,過一段固定的時間去讀取數(shù)據(jù)即可。
三、單片機與TLC1543芯片的接口 圖2使用TLC1543制作的多路輸入電壓表的電路圖,從圖中可以看出,這里使用了TLC1543作為基準電壓源,將REF-直接接地,P1.0、P1.1、P1.2、P1.3和P1.4分別與EOC、時鐘、地址、數(shù)據(jù)、片選端分別相連。制作時,請參考表1進制連線。注意電容E1和C1一定要用,E1可用10u/16V電解,C1可用0.1u CBB電容,安裝時盡量接近20腳和第10腳。輸入端可根所需要,接入相應(yīng)的信號。 編程的要求是在六位數(shù)碼管的后四位數(shù)碼管上輪流顯示TLC1543各通道的測量值,同時用十六進制表示的通道號顯示在第1位數(shù)碼管上。
圖2 用單片機制作多路輸入電壓表
四、TLC1543驅(qū)動程序編寫 由于采用串行接口,在硬件電路簡單的同時,帶來了軟件編制的復(fù)雜性,初學(xué)單片機的入門者很難掌握這類芯片的編程方法,這給此類芯片的應(yīng)用帶來一定的限制。為解決這一問題,我們在實際應(yīng)用該芯片的基礎(chǔ)上寫出了該芯片的驅(qū)動程序,有了驅(qū)動程序,使用者不必再關(guān)心TLC1543數(shù)據(jù)手冊中的時序圖之類不易懂的部份,只要了解清楚驅(qū)動程序的用法,即可使用該芯片。 TLC1543共有11條輸入通道,這11條通道的編號從0~10,讀取時,根據(jù)編號來獲得想應(yīng)通道的數(shù)據(jù),此外,內(nèi)部還有三條用于測試的通道,分別是接: 、 和 其通道編號分別是11、12和13. 1.驅(qū)動程序 ;以下定義各引腳 ADCLK EQU P1.1 ;時鐘 ADaddr EQU P1.2 ;地址引腳 ADDout EQU P1.3 ;數(shù)據(jù)端 ADCS EQU P1.4 ;片選端 命令:ADConver 參數(shù):r2 通道號,轉(zhuǎn)換前存入 轉(zhuǎn)換結(jié)后數(shù)據(jù)在r0r1中,高位在前 資源占用:r0,r1,r7,A ADConver: CLR ADClk CLR ADCS MOV A,R2 RLC A ;送出地址信號 MOV R7,#4 C_L1: RLC A MOV ADAddr,C SETB ADClk NOP NOP NOP NOP CLR ADClk DJNZ R7,C_L1 ;補6個脈沖 MOV R7,#6 C_L2: SETB ADClk NOP NOP NOP NOP CLR ADClk DJNZ R7,C_L2 ;等待轉(zhuǎn)換結(jié)束 SETB ADCS NOP NOP NOP NOP CLR ADCS ;取高2位 NOP NOP NOP NOP SETB ADDout SETB ADClk MOV C,ADDout MOV ACC.1,C CLR ADClk NOP NOP NOP NOP SETB ADDout SETB ADClk MOV C,ADDout MOV ACC.0,C CLR ADClk ANL A,#00000011B ;清A的高6位 MOV R0,A ;保存數(shù)據(jù)
MOV R7,#8 C_L3: NOP NOP NOP NOP SETB ADDout SETB ADClk MOV C,ADDout MOV ACC.0,C RLC A CLR ADClk DJNZ R7,C_L3 SETB ADCS MOV R1,A RET
2.驅(qū)動程序的使用 該驅(qū)動程序中用到了四個標記符號: ADClk 與TLC1543的Clk引腳相連的單片機引腳 ADaddr 與TLC1543的Address引腳相連的單片機引腳 ADDout 與TLC1543的AdDout引腳相連的單片機引腳 ADCS 與TLC1543的 引腳相連的單片機引腳 實際使用時,根據(jù)接線的情況定義好ADclk、ADaddr、ADDout、ADCS,將通道號送入R2,調(diào)用ADConver,即可從R0、R1中得到轉(zhuǎn)換后的數(shù)據(jù),使用非常簡單。 ;************************************************** ; 平凡單片機工作室 ; http://www.mcustudio.com ; Copyright 2003 pingfan's McuStudio ; All rights Reserved ;作者:周堅 ;文件名:ad.asm ;功能簡介:每隔1s輪流將一個通道的值顯示在數(shù)碼管后4位,首位顯示通道號 ;************************************************** gCoun DATA 22H ;通道計數(shù)器 CLK bit P1.1 ;時鐘端 ADDR bit P1.0 ;地址端 Dout bit P1.4 ;數(shù)據(jù)輸出端 CS bit P1.3 ;片選端 Hidden DATA 10H ;消隱碼 Counter DATA 57H ;顯示程序用計數(shù)器 DISPBUF DATA 58H ;顯示緩沖區(qū)首地址
ORG 0000H JMP START ORG 000BH ;定時中斷使用T0 JMP DISP ;定時中斷程序 ORG 30H START: MOV SP,#5FH ;初始化 MOV P1,#0FFH MOV P0,#0FFH MOV P2,#0FFH ;關(guān)所有LED及數(shù)碼管 MOV TMOD,#00000001B MOV TH0,#HIGH(65536-3000) MOV TL0,#LOW(65536-3000) SETB TR0 SETB EA SETB ET0 MOV Counter,#0 ;計數(shù)器清零 MOV DISPBUF+1,#Hidden ;第2位顯示器消隱 MOV gCoun,#0 ;通道計數(shù)器清零,指向通道0 LOOP: CALL Delay ;延時1s MOV R2,gCoun ;送通道號 CALL ADConver MOV A,R0 MOV R6,A MOV A,R1 MOV R7,A CALL HB2 ;調(diào)用二-十進制轉(zhuǎn)換程序 ;入口:待轉(zhuǎn)換的雙字節(jié)十六進制數(shù)在R6和R7中 ;出口:轉(zhuǎn)換結(jié)束的結(jié)果在R3、R4和R5中,壓縮BCD碼方式存儲 MOV A,R4 ANL A,#0F0H SWAP A ;高低4位互換 MOV DispBuf+2,A ;最高位 MOV A,R4 ANL A,#0FH MOV DispBuf+3,A MOV A,R5 ANL A,#0F0H SWAP A MOV DispBuf+4,A MOV A,R5 ANL A,#0FH MOV DispBuf+5,A ;以上程序段將壓縮BCD碼轉(zhuǎn)換成非壓縮BCD碼并送顯示緩沖區(qū) MOV DispBuf,gCoun ;將通道號送第1個顯示器的顯示緩沖區(qū) INC gCoun ;通道號加1 MOV A,gCoun CJNE A,#11,LOOP ;判斷是否到11了 MOV gCoun,#0 ;到則回零 JMP LOOP ;主程序到此結(jié)束 |