<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 新型微控制器ADμC812的P1口的應用

          新型微控制器ADμC812的P1口的應用

          作者: 時間:2006-05-07 來源:網(wǎng)絡 收藏

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

          本文引用地址:http://www.ex-cimer.com/article/241609.htm

          關鍵詞:端口 A/D轉換 定時器 SPI串口

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

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

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

          表1 P1口管腳說明

          符 號 類 型 功 能
          P1.0~P1.7 輸入 端口1僅為8位輸入端口。端口1缺省為模擬輸入端口,為了把這些端口的任一個腳配置為數(shù)字輸入,應把0寫至端口值。端口1引腳是多功能的
          ADC0~ADC7 輸入 8個單端模擬輸入。通過ADCCON2SFR進行通道選擇
          T2 輸入 定時器2數(shù)字輸入。輸入至定時器/計數(shù)器2。當被使能時,對應于T2輸入的1至0的跳變,計數(shù)器2增量
          T2EX 輸入 數(shù)字輸入。計數(shù)器2 Capture/Reload(捕獲/重載)觸發(fā)關用作計數(shù)器2 Up/Down(上/下)控制輸入
          SS 輸入 SPI接口的從屬選擇輸入

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

          2 P1口的各種功能與應用

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

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

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

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

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

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

          2.1.1 ADC轉移函數(shù)

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

          2.1.2 SFR至ADC塊的接口

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

          2.1.2.1 ADCCON1——ADC控制SFR#1

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

          SFR地址: FFH

          SFR上電缺省值: 20H

          位可尋址: 無

          MD1 MD0 CK1 CK0 AQ1 AQ0 T2C EXC

          ADCCON1 SFR位的說明如表2所示。

          表2 ADCCON1 SFR位的說明

          位地址 位助記符 說 明
          ADCCON1.7
          ADCCON1.6





          MD1
          MD0





          模式位(MD1,MD0)
          選擇ADC的有效工作模式如下:
          MD1 MD0 有效模式
          0 0 ADC掉電
          0 1 ADC正常工作
          1 0 如果不執(zhí)行轉換周期,那么ADC掉電
          1 1 如果不執(zhí)行轉換周期,那么ADC待機
          ADCCON1.5
          ADCCON1.4





          CK1
          CK0





          ADC時鐘分頻位(CK1,CK0)
          選擇用于產(chǎn)生ADC時鐘的主時鐘分頻比。一次ADC轉換需要16個ADC時鐘加述)。分頻比選擇如下:
          CK1 CK0 MCLK分頻比
          0 0 1
          0 1 2
          1 0 4
          1 1 8
          ADCCON1.3
          ADCCON1.2








          AQ1
          AQ0








          ADC采集選擇位(AQ1,AQ0)
          選擇用于輸入跟蹤/保持放大器采集輸入信號的時間,具體選擇如下:
          AQ1 AQ0 #ADC時鐘數(shù)
          0 0 1
          0 1 2
          1 0 4
          1 1 8
          注釋:對于小8kΩ的模擬輸入源阻抗,缺省的AQ0/AQ1選擇為00,即1個采集時鐘便滿足要求。對于大于8kΩ的源阻抗,建議把采集時鐘增加到2、3或4個時鐘
          ADCCON1.1 T2C 設置定時器2轉換位(T2C)
          可把定時器2的溢出位用作ADC轉換起始觸發(fā)脈沖輸入
          ADCCON1.0


          EXC


          設置外部觸發(fā)器使能位(EXC)
          允許把外部引腳23(CONVST)用作低電平有效的轉換起始輸入。此輸入信號應當具有所需采集速率的低電平效的脈沖(脈沖寬度最小100ns)

          2.1.2.2 ADCCON2——ADC控制SFR#2

          ADCCON2寄存器控制ADC通道選擇和轉換模式。

          詳述如下:

          SFR地址: D8H

          SFR上電缺省值:00H

          位可尋址: 是

          ADCI DMA CCONV SCONV CS3 CS2 CS1 CS0

          ADCCON2 SFR位說明如表3所示。

          表3 ADCCON2 SFR位的說明

          位地址 位助記符 說 明
          ADCCON2.7 ADCI ADC中斷位。ADCI在單個ADC轉換周期結束時或在DMA塊轉換結束時由硬件設置;ADCI在PC轉至ADC中斷服務子程序時由硬件清除
          ADCCON2.6 DMA DMA模式使能位。DMA由用戶設置以啟動預置的ADC DMA模式工作
          ADCCON2.5 CCONV 連續(xù)轉換位。CCONV由用戶設置以使ADC開始進入連續(xù)轉換模式。在該模式下,ADC根據(jù)時序以及已在ADCCON SFR中設置的通道配置開始轉換,一旦前一個轉換周期結束,ADC自動開始另一次轉換
          ADCCON2.4 SCONV 單次轉換位。SCONV由用戶設置以便開始單個轉換周期,當單個轉換周期完成時,SCONV自動復位至0
          ADCCON2.3
          ADCCON2.2
          ADCCON2.1
          ADCCON2.0











          CS3
          CS2
          CS1
          CS0











          通道選擇位(CS3-0)
          允許用戶在軟件控制下對ADC通道選擇編程。一旦轉換開始,所轉換的通道將是些通道選擇位所指向的通道。在DMA模式下,通道選擇來自寫至外部存儲器的通道ID具體選擇如下:
          CS3 CS2 CS1 CS0 CH#
          0 0 0 0 0
          0 0 0 1 1
          0 0 1 0 2
          0 0 1 1 3
          0 1 0 0 4
          0 1 0 1 5
          0 1 1 0 6
          0 1 1 1 7
          1 0 0 0 溫度傳感器
          1 × × × 其它組合
          1 1 1 1 DMA STOP

          2.1.2.3 ADCCON3——ADC控制SFR#3

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

          SFR地址: F5H

          SFR上電缺省值: 00H

          位可尋址: 無

          BUSY RSVD RSVD RSVD RSVD RSVD RSVD RSVD

          ADCCON3 SFR位的說明如表4所示。

          表4 ADCCON3 SFR位的說明

          位地址 位助記符 說 明
          ADCCON3.7

          BUSY

          ADC忙狀態(tài)位。BUSY是只讀狀態(tài)位,它在有效的ADC轉換或校準周期內(nèi)設置。在轉換或校準結束時,內(nèi)核自動把忙狀態(tài)位(BUSY)清除
          ADCCON3.6
          ADCCON3.5
          ADCCON3.4
          ADCCON3.3
          ADCCON3.2
          ADCCON3.1
          ADCCON3.0
          RSVD
          RSVD
          RSVD
          RSVD
          RSVD
          RSVD
          RSVD
          ADCCON3.03.6被保留,RSVD供內(nèi)部潮濕。這些位將讀出零,用戶軟件應當只對它們寫入零




          2.1.3 ADC工作模式

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

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

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

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

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

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

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

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

          $MOD812

          CSEG

          ORG 00H

          LJMP MAIN

          ;— — — — — —

          ORG 000BH

          DT0:MOV TL0,#3CH ;定時器送初值

          MOV TH0,#0F6H

          PUSH PSW ;現(xiàn)場保護

          PUSH ACC

          SETB SCONV ;ADC開始單個轉換周期

          MOV R0,#10H ;轉換延時

          DJNZ R0,$

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

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

          POP ACC ;彈出保護現(xiàn)場信息

          POP PSW

          SETB 00H ;置標志位00H,代表采樣結束

          RETI ;中斷返回

          ;— — — — — —

          MAIN:MOV SP,#60H ;設置堆棧

          INIAL:MOV TL0,#3CH ;第一次定時器0的定時值

          MOV TH0,#0F6H

          SETB EA ;開中斷使能

          SETB ET0 ;開定時器0中斷允許

          SETB TR0 ;開定時器0

          MOV ADCCON1,#50H ;送ADCCON1

          ·

          ·

          ·

          2.2 按鍵控制

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

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

          MOV A,P1 ;讀P1口值到A

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

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

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

          KEY 5:LCALL T100M ;調100ms延時(防抖)

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

          MOV A,P1

          ANL A,#0F8H

          JNZ KEY5 ;不為0說明按鍵結束

          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ù)器的數(shù)字輸入

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

          在定時器功能中,每個機器周期TLx寄存器增量。因此可以把作為機器周期計數(shù)。 在計數(shù)器功能中,TLx寄存器根據(jù)其對應的外部輸入引腳T0、T1或T0上的1至0的跳變增量。

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

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

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

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

          (1)定時器2的寄存器TH2和TL2溢出時,若CP/RL2=0,則打開重裝載的三態(tài)緩沖器,把RCAP2H和RCAP2L的數(shù)據(jù)自動轉入TH2和TL2中,同時溢出標志位置1,申請中斷。

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

          通過下面程序的運行,定時器2的TL2、TH2定時值就是周期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接口、I 2C兼容的串行接口和串行外設接口(SPI)。其中,SPI接口是工業(yè)標準的同步串行接口,是一種全雙工、三線通訊的接口,它允許MCU與各種外圍設備以串行方式(8位數(shù)據(jù)同時同步地被發(fā)送和接收)進行通信。主時鐘可以編程為不同的狀態(tài),既可編程為四種不同主波特率中的任一種,又可對時鐘的極性和相位進行編程。SPI也可用于那些需要比微控制器上的并行I/O端口更多輸入端或輸出端的場合,因而提供了一種只需使用最少的微控制器引腳的擴展I/O功能的最簡單辦法。

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

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

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

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

          linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)
          蜂鳴器相關文章:蜂鳴器原理


          評論


          相關推薦

          技術專區(qū)

          關閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();