《電子技術(shù)應(yīng)用》
您所在的位置:首頁(yè) > 模擬設(shè)計(jì) > 業(yè)界動(dòng)態(tài) > 新型微控制器ADμC812的P1口的應(yīng)用

新型微控制器ADμC812的P1口的應(yīng)用

2009-02-13
作者:李素芬 李 剛

  摘? 要: ADμC812是一種新型的高度集成的12位數(shù)據(jù)采集系統(tǒng),它在單個(gè)芯片內(nèi)包含了高性能的自校準(zhǔn)多通道ADC、兩個(gè)12位的DAC以及可編程的8位MCU(與8051兼容)。與MCS51系列單片機(jī)相似,它有P0~P3四個(gè)端口,其中P1口可實(shí)現(xiàn)多種功能,例如多通道的ADC、通用輸入端口和用于特殊功能的輸入控制等。介紹了ADμC812的P1口的結(jié)構(gòu)原理和應(yīng)用。

  關(guān)鍵詞: 端口? A/D轉(zhuǎn)換? 定時(shí)器? SPI串口

?

1 ADμC812的通用數(shù)據(jù)端口

  ADμC812是一種新型的高度集成的高精度12位數(shù)據(jù)采集系統(tǒng)。在其片內(nèi),不僅包含了可重新編程的非易失性閃速/電擦除程序存儲(chǔ)器的高性能8位(與8051兼容)MCU,還包含了高性能的自校準(zhǔn)多通道(8個(gè)輸入通道)ADC,兩個(gè)12位DAC。ADμC812微控制器內(nèi)核與8051指令集兼容,具有9個(gè)中斷源(2個(gè)優(yōu)先級(jí))。片內(nèi)還集成了8K字節(jié)的閃速/電擦除程序存儲(chǔ)器、640字節(jié)的閃速/電擦除數(shù)據(jù)存儲(chǔ)器以及256字節(jié)RAM。

  ADμC812共有52個(gè)管腳,使用4個(gè)通用數(shù)據(jù)端口P0~P3與外部器件進(jìn)行數(shù)據(jù)交換。每一個(gè)I/O口都有自己不同的驅(qū)動(dòng)執(zhí)行電路。除端口1之外都是8位雙向端口。端口1的操作是ADμC812特有的,表1說(shuō)明了P1口可復(fù)用的管腳功能。

?

?

  所有端口均包含位鎖存器和輸入緩沖器,I/O雙向端口還包含了輸出驅(qū)動(dòng)器。由于P1口沒(méi)有輸出驅(qū)動(dòng)器,所以P1口只能是輸入端口,只能被配置為數(shù)字輸入或模擬輸入,不能用于輸出,如圖1所示。ADμC812的P1口通常用于模擬輸入;當(dāng)不用于模擬輸入時(shí),可將0寫至端口值,這樣就被設(shè)置為數(shù)字輸入方式。

?

?

2 P1口的各種功能與應(yīng)用

  P1口的主要功能是ADC的模擬輸入,另外還可用于一些控制輸入、定時(shí)器2和計(jì)數(shù)器2的數(shù)字輸入以及SPI從屬選擇輸入等。

2.1 模/數(shù)轉(zhuǎn)換輸入

  ADμC812中的ADC轉(zhuǎn)換塊包含了8通道、12位、單電源A/D轉(zhuǎn)換器。此模塊為用戶提供了多通道多路轉(zhuǎn)換器、跟蹤/保持、片內(nèi)基準(zhǔn)、校準(zhǔn)特性。此模塊內(nèi)的所有部件都能方便地通過(guò)3個(gè)寄存器SFR接口來(lái)設(shè)置。

  A/D轉(zhuǎn)換器由基于電容DAC的常規(guī)逐次逼近轉(zhuǎn)換器組成。轉(zhuǎn)換器接收的模擬輸入范圍為0至+VREF。片內(nèi)提供高精度、低漂移并經(jīng)工廠校準(zhǔn)的2.5V基準(zhǔn)電壓。內(nèi)部基準(zhǔn)可經(jīng)外部VREF引腳過(guò)驅(qū)動(dòng)。外部基準(zhǔn)在2.3V至AVDD的范圍內(nèi)。

  ADμC812裝有工廠編程的校準(zhǔn)系數(shù),它在上電時(shí)自動(dòng)下載到ADC,以確保最佳的ADC性能。ADC核包括內(nèi)部失調(diào)和增益校準(zhǔn)寄存器,所提供的軟件校準(zhǔn)子程序可允許用戶在需要時(shí)重寫工廠編程的校準(zhǔn)系數(shù),以便使用戶目標(biāo)系統(tǒng)中端點(diǎn)誤差的影響為最小。

  來(lái)自片內(nèi)溫度傳感器的電壓輸出正比于絕對(duì)溫度,它也可向前端ADC多路轉(zhuǎn)換器(實(shí)際上是第9個(gè)ADC通道輸入)傳送。

2.1.1 ADC轉(zhuǎn)移函數(shù)

  ADC的模擬輸入范圍是0V至VREF。在此范圍內(nèi),設(shè)計(jì)的代碼跳變發(fā)生在連續(xù)的整數(shù)LSB值的中間。當(dāng)VREF=2.5V時(shí),輸出碼是直接的二進(jìn)制數(shù),1LSB=FS/4096或2.5V/4096=0.61mV。在0至VREF范圍內(nèi)理想的輸入/輸出轉(zhuǎn)移特性如圖2所示。

?

?

2.1.2 SFR至ADC塊的接口

  ADμC812中ADC的工作完全由3個(gè)SFR控制,它們分別是ADCCON1、ADCCON2和ADCCON3。

2.1.2.1 ADCCON1——ADC控制SFR#1

  ADCCON1寄存器控制轉(zhuǎn)換和采集時(shí)間、硬件轉(zhuǎn)換模式以及掉電模式。詳述如下:

  

  ADCCON1 SFR位的說(shuō)明如表2所示。

?

2.1.2.2 ADCCON2——ADC控制SFR#2

  ADCCON2寄存器控制ADC通道選擇和轉(zhuǎn)換模式。詳述如下:

  

  ADCCON2 SFR位說(shuō)明如表3所示。

?

?

2.1.2.3 ADCCON3——ADC控制SFR#3

  ADCCON3寄存器中只有一位有效,它給出ADC忙狀態(tài)的指示。詳述如下:

  

  ADCCON3 SFR位的說(shuō)明如表4所示。

?

2.1.3 ADC工作模式

  通過(guò)設(shè)置ADCCON1和ADCCON2兩個(gè)寄存器,可使ADC處于三種不同的工作模式:一種是單步轉(zhuǎn)換模式,一種是連續(xù)轉(zhuǎn)換模式,還有一種是DMA工作模式。用軟件或通過(guò)把轉(zhuǎn)換信號(hào)加至外部引腳23(CONVST)可以啟動(dòng)單步或連續(xù)轉(zhuǎn)換模式,同時(shí)還可設(shè)置定時(shí)器2的溢出位,用作ADC轉(zhuǎn)換起始觸發(fā)脈沖輸入。

  DMA工作模式與其他兩種工作模式有顯著不同,若配置ADC工作在DMA工作模式,則ADC塊將進(jìn)行連續(xù)轉(zhuǎn)換并把采樣值捕獲到外部RAM空間,而不需要來(lái)自MCU核的任何干預(yù),這種自動(dòng)捕獲功能可以擴(kuò)展到16M字節(jié)的外部數(shù)據(jù)存儲(chǔ)器空間。值得注意的是,若工作于DMA工作模式,將要求用戶在中斷服務(wù)子程序中用5μs的時(shí)間完成中斷服務(wù)、讀ADC結(jié)果并為進(jìn)一步的后續(xù)處理存儲(chǔ)結(jié)果,否則下一次ADC采樣可能會(huì)丟失。這一限制條件是由于ADμC812已把片內(nèi)ADC設(shè)計(jì)成能運(yùn)行在每5μs采樣一次的最高速度(即200kHz采樣速率)。因此,在要求其他中斷速率的應(yīng)用中,不能使用ADC DMA工作模式。

  現(xiàn)以我們研制的家用心電圖機(jī)為例,說(shuō)明ADC的使用方法與功能實(shí)現(xiàn)。在該心電圖機(jī)中,ADC0用于心電信號(hào)的模擬輸入,將2.5V參考電壓接至VREF,由于人體心電信號(hào)在0.5mV~4mV,典型值在1mV左右,需經(jīng)過(guò)500倍的放大,落在ADC輸入電壓0~2.5V范圍之內(nèi)。因此,心電信號(hào)經(jīng)過(guò)LM324放大、濾波后輸入ADC0,進(jìn)行A/D轉(zhuǎn)換,得到數(shù)字量以進(jìn)行顯示、存儲(chǔ)、發(fā)送、打印等功能。在這里,A/D轉(zhuǎn)換后的12位數(shù)字量,最小可分辨的信號(hào)是0.6mV。對(duì)于最小的心電信號(hào)0.5mV,經(jīng)放大后為0.25V,對(duì)于最大的心電信號(hào)4mV,經(jīng)放大后為2V,均在ADC的輸入范圍之內(nèi)。

  心電圖機(jī)使用電池作為電源,當(dāng)電池電壓不足時(shí)需要提醒用戶更新電池。電源電壓為+5V,所以不能直接接至ADC的輸入端。電源電壓要經(jīng)過(guò)分壓電路進(jìn)行分壓,使分壓的電壓在ADC的輸入范圍之內(nèi)。ADC1用于電源電壓分壓后的模擬輸入,進(jìn)而監(jiān)測(cè)電源電壓的變化,當(dāng)電源電壓低于一定值時(shí)蜂鳴器報(bào)警,同時(shí)液晶顯示提醒用戶更換電池。若電源電壓低于4.5V時(shí)報(bào)警,則分壓后為1.5V,當(dāng)ADC1的輸入低于1.5V(0999H)時(shí)則啟動(dòng)報(bào)警系統(tǒng)。

  下面是利用ADC0采集心電信號(hào)的部分程序,ADC首先要初始化,即送適當(dāng)?shù)目刂谱?根據(jù)前面介紹的ADC的SFR,選擇適當(dāng)?shù)腟FR值。

  由于ADC0作為心電信號(hào)的模擬輸入,選擇ADCCON1可使ADC正常工作,ADC時(shí)鐘分頻比為2。由于LM324輸出阻抗遠(yuǎn)遠(yuǎn)小于8kΩ,所以選擇ADC采集時(shí)鐘1,得到ADCCON1=50H。選擇通道0,可利用ADCCON2的默認(rèn)值00H。

  由于ADC1作為電源監(jiān)測(cè)的模擬輸入,選擇ADCCON1可使ADC正常工作,ADC時(shí)鐘分頻比為2。由于電源阻抗遠(yuǎn)遠(yuǎn)小于8kΩ,所以選擇ADC采集時(shí)鐘1,得到ADCCON1=50H。選擇通道1,ADCCON2=01H。

  在下面程序中,堆棧設(shè)置在60H,利用定時(shí)器0中斷后執(zhí)行采樣程序,選取采樣頻率為200Hz,因而定時(shí)器0的定時(shí)值為TL0=3CH,TH0=F6H。由于啟動(dòng)單個(gè)轉(zhuǎn)換周期完成一次A/D轉(zhuǎn)換需要16×2+1=33個(gè)ADμC812主時(shí)鐘,程序中一次延時(shí)循環(huán)為2個(gè)主時(shí)鐘,因而在采樣程序中利用R0=16作為單個(gè)轉(zhuǎn)換周期,延時(shí)36個(gè)主時(shí)鐘,以完成一次采樣后的A/D轉(zhuǎn)換。ADCDATAL為A/D轉(zhuǎn)換低8位,ADCDATAH為A/D轉(zhuǎn)換高4位;R1、R2用于存放12位A/D轉(zhuǎn)換結(jié)果,設(shè)置00H位作為采樣結(jié)束標(biāo)志位。

$MOD812

CSEG

????????????? ORG 00H

????????????? LJMP MAIN

;— — — — — —?

????????????? ORG 000BH?

DT0:MOV TL0,#3CH ???????            ?;定時(shí)器送初值?

????????????? ?MOV TH0,#0F6H?

????????????? ?PUSH PSW ???     ??????????? ;現(xiàn)場(chǎng)保護(hù)?

????????????? ?PUSH ACC?

????????????? ?SETB SCONV ??? ?????        ;ADC開始單個(gè)轉(zhuǎn)換周期?

????????????? ?MOV R0,#10H???? ?? ?????????????? ;轉(zhuǎn)換延時(shí)?

????????????? ?DJNZ R0,$?

????????????? ?MOV R1,ADCDATAL???????????????? ? ;采樣值低8位送內(nèi)部RAM:R1?

????????????? ?MOV R2,ADCDATAH?????????????????? ;采樣值高4位送內(nèi)部RAM:R2?

????????????? ?POP ACC?????????????????????????? ;彈出保護(hù)現(xiàn)場(chǎng)信息?

????????????? ?POP PSW?

????????????? ?SETB 00H????????????????????????? ;置標(biāo)志位00H,代表采樣結(jié)束?

????????????? ?RETI????????????????????????????? ;中斷返回?

;— — — — — —?

MAIN:MOV SP,#60H ??????????????????????????????? ;設(shè)置堆棧?

INIAL:MOV TL0,#3CH?????????????????????????????? ;第一次定時(shí)器0的定時(shí)值?

????????????? MOV TH0,#0F6H?

????????????? SETB EA????????????????????????????;開中斷使能?

????????????? SETB ET0?????????????????????????? ;開定時(shí)器0中斷允許?

????????????? SETB TR0?????????????????????????? ;開定時(shí)器0?

????????????? MOV ADCCON1,#50H?????????????????? ;送ADCCON1?

????????????? ·?

????????????? ·?

????????????? ·?

2.2 按鍵控制?

  當(dāng)不需要使用ADμC812的ADC的全部8個(gè)通道時(shí),剩余的ADC輸入可用作數(shù)字輸入端。例如,我們將P1口中的幾位用于按鍵控制的輸入端口,此時(shí)要先將0寫至端口值。需要注意的是,ADμC812的P1口用作按鍵時(shí)是高電平有效,在沒(méi)有按鍵輸入時(shí),P1口應(yīng)保持低電平,因此在用作按鍵的P1口應(yīng)加下拉電阻(即P1.3~P1.7在沒(méi)有輸入時(shí)為低電平),阻值一般為幾千歐。在前面的例子中,按鍵分別連接到P1.3~P1.7,它們通過(guò)2kΩ的下拉電阻接至地;插座的第6腳接高電平VCC,用于觸發(fā)按鍵。當(dāng)有鍵按下時(shí),P1.3~P1.7中的相應(yīng)位接至高電平VCC,這樣就給出了按鍵信息。通過(guò)上面的程序就可以進(jìn)行判斷并執(zhí)行相應(yīng)的按鍵功能,并且采用防抖方法來(lái)提高可靠性,具體程序如下:

KEY:ANL P1,#07H ??????? ;將所有的端口置0

 ?? MOV A,P1???? ?????? ;讀P1口值到A

??  ANL A,#0F8H????????? ;判斷P1.3~P1.7哪一位為1

???? JZ KEY???????????????;如果沒(méi)有按鍵返回繼續(xù)判斷?

???? PUSH ACC      ??;如果有按鍵保存按鍵信息放入累加器中

KEY 5:?LCALL T100M?????? ?;調(diào)100ms延時(shí)(防抖)

???????ANL P1,#07H??????? ;再次讀取按鍵信息

?? ??? MOV A,P1

?? ??? ANL A,#0F8H

?? ??? JNZ KEY5?????????? ;不為0說(shuō)明按鍵結(jié)束

?????? POP ACC????????????;彈出按鍵信息

??????????????????????????;下面是判斷按鍵的程序:

TKEY:JB ACC.3,#FUN1????? ;若ACC.3為1,執(zhí)行FUN1

?   JB ACC.4,#FUN2??????;若ACC.4為1,執(zhí)行FUN2

?   JB ACC,5,#FUN3?   ;若ACC.5為1,執(zhí)行FUN3

?   JB ACC,6,#FUN4?   ;若ACC.6為1,執(zhí)行FUN4

?   LJMP #FUN5??????????;若ACC.7為1,執(zhí)行FUN5

   RET

2.3 定時(shí)器和計(jì)數(shù)器的數(shù)字輸入

  ADμC812具有3個(gè)16位的定時(shí)器/計(jì)數(shù)器,即定時(shí)器0、定時(shí)器1和定時(shí)器2。定時(shí)器/計(jì)數(shù)器硬件已包含在片內(nèi),用以減輕用軟件實(shí)現(xiàn)定時(shí)器/計(jì)數(shù)器功能時(shí),處理期內(nèi)核固有的負(fù)擔(dān)。每一個(gè)定時(shí)器/計(jì)數(shù)器包含兩個(gè)8位寄存器THx和TLx(x=0、1、2)。所有3個(gè)定時(shí)器/計(jì)數(shù)器均可配置成定時(shí)器或事件計(jì)數(shù)器。

  在定時(shí)器功能中,每個(gè)機(jī)器周期TLx寄存器增量。因此可以把它看作對(duì)機(jī)器周期計(jì)數(shù)。在計(jì)數(shù)器功能中,TLx寄存器根據(jù)其對(duì)應(yīng)的外部輸入引腳T0、T1或T0上的1至0的跳變?cè)隽俊?/P>

  在P1口中,T2是定時(shí)器2數(shù)字輸入,輸入至定時(shí)器/計(jì)數(shù)器2。當(dāng)被使能時(shí),對(duì)應(yīng)于T2輸入的1至0的跳變,計(jì)數(shù)器2增量。T2EX是數(shù)字輸入,計(jì)數(shù)器2 Capture/Reload(捕獲/重載)觸發(fā)并用作計(jì)數(shù)器2 Up/Down(上/下)控制輸入。在ADCCON1.1中,T2C設(shè)置定時(shí)器2轉(zhuǎn)換位,可把定時(shí)器2的溢出位用作ADC轉(zhuǎn)換起始觸發(fā)脈沖輸入。

  由于ADμC812與8051有兼容的內(nèi)核,因而ADμC812定時(shí)器2的原理與功能可簡(jiǎn)單地概括如下:

  ADμC812中的定時(shí)器/計(jì)數(shù)器2是一個(gè)具有16位自動(dòng)重裝載或捕獲能力的定時(shí)器/計(jì)數(shù)器,T2CON是它的專用控制寄存器,如圖3所示。在定時(shí)器和計(jì)數(shù)器工作方式下,都可以通過(guò)T2CON中的控制位CP/來(lái)選擇捕獲能力或重載能力。TH2和TL2內(nèi)容的捕獲或自動(dòng)重載是通過(guò)一對(duì)捕獲/重載寄存器RCAP2H和RCAP2L實(shí)現(xiàn)的。當(dāng)CP/=0時(shí),選擇自動(dòng)重裝載功能,即把RCAP2H和RCAP2L的數(shù)據(jù)自動(dòng)轉(zhuǎn)入TH2和TL2;當(dāng)C/=1時(shí),選擇捕獲功能,數(shù)據(jù)傳送方向恰與上述方向相反。

  捕獲或重載發(fā)生于下面兩種情況:

  (1)定時(shí)器2的寄存器TH2和TL2溢出時(shí),若

  CP/RL2=0,則打開重裝載的三態(tài)緩沖器,把RCAP2H和RCAP2L的數(shù)據(jù)自動(dòng)轉(zhuǎn)入TH2和TL2中,同時(shí)溢出標(biāo)志位置1,申請(qǐng)中斷。

  (2)當(dāng)EXEN2=1且T2EX端的信號(hào)有負(fù)跳變時(shí),CP/是0還是1,將發(fā)生捕獲操作或重載操作,同時(shí)標(biāo)志位EXF2置1,申請(qǐng)中斷。例如,利用定時(shí)器2測(cè)量周期如圖4所示。

???? 通過(guò)下面程序的運(yùn)行,定時(shí)器2的TL2、TH2定時(shí)值就是周期T的值。

???? MOV TL2,#0

???? MOV TH2,#0

???? JNB P1.0,$

???? SETB TR2

???? JB P1.0,$

???? JNB P1.0,$

???? CLR TR2

2.4 SPI串口選擇輸入

  ADμC812提供了三種串行I/O端口:UART接口、I2C兼容的串行接口和串行外設(shè)接口(SPI)。其中,SPI接口是工業(yè)標(biāo)準(zhǔn)的同步串行接口,是一種全雙工、三線通訊的接口,它允許MCU與各種外圍設(shè)備以串行方式(8位數(shù)據(jù)同時(shí)同步地被發(fā)送和接收)進(jìn)行通信。主時(shí)鐘可以編程為不同的狀態(tài),既可編程為四種不同主波特率中的任一種,又可對(duì)時(shí)鐘的極性和相位進(jìn)行編程。SPI也可用于那些需要比微控制器上的并行I/O端口更多輸入端或輸出端的場(chǎng)合,因而提供了一種只需使用最少的微控制器引腳的擴(kuò)展I/O功能的最簡(jiǎn)單辦法。

  SPI系統(tǒng)通過(guò)使用4條線與多種標(biāo)準(zhǔn)外圍器件直接接口:串行時(shí)鐘線SCLOCK、主機(jī)輸入/從機(jī)輸出數(shù)據(jù)線MISO、主機(jī)輸出/從機(jī)輸入數(shù)據(jù)線MOSI和低電平有效的從機(jī)選擇線SS(其中SS在P1口中)。

  由于ADμC812中的SPI串口有主模式和從模式兩種工作模式,因此系統(tǒng)可配置為主(Master)操作或從(Slave)操作。在用戶系統(tǒng)中,ADμC812既可作為主MCU,也可作為從MCU。在主模式下,伴隨每一位數(shù)據(jù)的發(fā)送/接收發(fā)送一次時(shí)鐘,此時(shí)ADμC812作為主機(jī)控制數(shù)據(jù)向從外圍器件傳送。而在從模式下,每一位數(shù)據(jù)都是在接收到時(shí)鐘信號(hào)之后才發(fā)送/接收,SPI總線可在軟件的控制下構(gòu)成各種簡(jiǎn)單或復(fù)雜的系統(tǒng)。例如:1個(gè)主MCU和幾個(gè)從MCU;幾個(gè)從MCU相互連接構(gòu)成多主機(jī)系統(tǒng)(分布式系統(tǒng));1個(gè)主MCU和1個(gè)或幾個(gè)從I/O設(shè)備。在大多數(shù)應(yīng)用場(chǎng)合中,使用1個(gè)MCU作為主機(jī),控制數(shù)據(jù)向1個(gè)或多個(gè)從外圍器件傳送。從器件只能在主機(jī)發(fā)命令下才能接收或向主機(jī)傳送數(shù)據(jù)。其數(shù)據(jù)的傳輸格式是高位(MSB)在前,低位(LSB)在后。

  SS作為從單片機(jī)的SPI輸入端,是ADμC812特有的功能,通過(guò)SS將主單片機(jī)中的數(shù)據(jù)傳送到從單片機(jī),從而實(shí)現(xiàn)主單片機(jī)對(duì)從單片機(jī)的信息傳送。

  ADμC812的P1口兼容了MCS51系列單片機(jī)的功能,而且又有著自己獨(dú)特的多種其它可實(shí)現(xiàn)的功能。這樣,在一片單片機(jī)上利用P1口可以實(shí)現(xiàn)盡可能多的功能。

?

參考文獻(xiàn)

1 Analog Devices Inc.MicroConverterTM,Multichannel 12-Bit ADC with Embedded FLASH MCU ADμC812.Ver 2.0

September,1999

2 ADμC812 User's Manual.Analog Devices Inc. 2000

3 孫涵芳,徐愛(ài)卿.單片機(jī)原理及應(yīng)用.北京:北京航空航天大學(xué)出版社,1988.2

本站內(nèi)容除特別聲明的原創(chuàng)文章之外,轉(zhuǎn)載內(nèi)容只為傳遞更多信息,并不代表本網(wǎng)站贊同其觀點(diǎn)。轉(zhuǎn)載的所有的文章、圖片、音/視頻文件等資料的版權(quán)歸版權(quán)所有權(quán)人所有。本站采用的非本站原創(chuàng)文章及圖片等內(nèi)容無(wú)法一一聯(lián)系確認(rèn)版權(quán)者。如涉及作品內(nèi)容、版權(quán)和其它問(wèn)題,請(qǐng)及時(shí)通過(guò)電子郵件或電話通知我們,以便迅速采取適當(dāng)措施,避免給雙方造成不必要的經(jīng)濟(jì)損失。聯(lián)系電話:010-82306118;郵箱:aet@chinaaet.com。