基于 C8051F020 的示波器監(jiān)控程序設(shè)計
發(fā)布時間:2016-03-16 責(zé)任編輯:wenwei
【導(dǎo)讀】設(shè)計采用高性能單片機(jī)C8051F020為控制芯片,監(jiān)控示波器面板上40個按鍵、3個編碼開關(guān)及4個電位器的狀態(tài)。分別介紹了鍵盤、編碼開關(guān)和電位器的工作原理,以及其與單片機(jī)連接的硬件電路及軟件編程的實(shí)現(xiàn)。按鍵部分采用一鍵多義的鍵盤程序設(shè)計方法,給出了鍵碼匹配子程序流程圖。
監(jiān)控程序負(fù)責(zé)系統(tǒng)中全部硬件和軟件資源的分配、調(diào)度工作,它提供用戶接口,使用戶獲得友好的工作環(huán)境,是系統(tǒng)設(shè)計中一個重要組成部分。
1 C8051F020單片機(jī)概述
伴隨著電子技術(shù)快速的發(fā)展,越來越多的人加入電子開發(fā)的大軍。在學(xué)習(xí)電子技術(shù)和研發(fā)項(xiàng)目的過程中,避免不了要使用一些儀器,例如萬用表、示波器等等,然而對于一些非專業(yè)的愛好者,擁有一臺數(shù)字示波器是比較“奢侈”的。本設(shè)計C8051F020單片機(jī),因其具有成本低、制作簡單、測量精度高等優(yōu)勢,恰恰滿足了這一部分人的需求。
C8051F020單片機(jī)是高度集成的片上系統(tǒng)。在芯片內(nèi)集成了2個多通道ADC子系統(tǒng)(每個子系統(tǒng)包括1個可編程增益放大器和1個模擬多路選擇器)、2 個電壓輸出DAC、2個電壓比較器、電壓基準(zhǔn)、SMBus/I2C總線接口、UART、SPI總線接口、5個通用的16位定時器、1個具有5個捕捉/比較模塊的可編程計數(shù)器/定時器陣列(PCA)、內(nèi)部振蕩器、8個8位通用數(shù)字I/0端口和64 KBFLASH程序存儲器,以及8051兼容的高速微控制器內(nèi)核。
C8051F020單片機(jī)是所有模擬和數(shù)字外設(shè)均可由用戶固件使能/禁止和配置。Flash 存儲器還具有在系統(tǒng)重新編程能力,可用于非易失性數(shù)據(jù)存儲,并允許現(xiàn)場更新8051 固件。片內(nèi)JTAG 調(diào)試電路允許使用安裝在最終應(yīng)用系統(tǒng)上的產(chǎn)品MCU 進(jìn)行非侵入式(不占用片內(nèi)資源)、全速、在系統(tǒng)調(diào)試。該調(diào)試系統(tǒng)支持觀察和修改存儲器和寄存器,支持?jǐn)帱c(diǎn)、觀察點(diǎn)、單步及運(yùn)行和停機(jī)命令。在使用JTAG 調(diào)試時,所有的模擬和數(shù)字外設(shè)都可全功能運(yùn)行。
Cygnal出的一種混合信號系統(tǒng)級單片機(jī)。片內(nèi)含CIP-51的CPU內(nèi)核,它的指令系統(tǒng)與MCS-51完全兼容。其中的C8051F020單片機(jī)含有64kB片內(nèi)Flash程序存儲器,4352B的RAM、8個I/O端口共64根I/O口線、一個12位A/D轉(zhuǎn)換器和一個8位A/D轉(zhuǎn)換器以及一個雙12位D/A轉(zhuǎn)換器、2個比較器、5個16位通用定時器、5個捕捉/比較模塊的可編程計數(shù)/定時器陣列、看門狗定時器、VDD監(jiān)視器和溫度傳感器等部分。C8051F020單片機(jī)支持雙時鐘,其工作電壓范圍為2.7~3.6V(端口I/O,RST和JTAG引腳的耐壓為5V)。與以前的51系列單片機(jī)相比,C8051F020增添了許多功能,同時其可靠性和速度也有了很大提高。
2 一鍵多義鍵盤工作原理
一臺完善的智能儀表功能往往很多,設(shè)定的量程、參數(shù)也很多。如果還是用一鍵一個功能,勢必要有一個很大的鍵盤,面板相應(yīng)擴(kuò)大,不美觀,而且成本增加。因此在這類儀表中,鍵盤設(shè)計成一鍵多義,一個鍵有多種功能。
在一鍵多義的情況下,一個命令不是由一次按鍵組成,而是由一個按鍵序列組成。也就是說,對一個按鍵含義的解釋,不僅取決于本次按鍵,還取決于以前按了些什么鍵。因此,對于一鍵多義的監(jiān)控程序,首先要判斷一個按鍵序列(而不是一次按鍵)是否已構(gòu)成一個合法命令。若已構(gòu)成合法命令,則執(zhí)行命令,否則等待新按鍵輸入。一鍵多義鍵盤管理程序,主要解決鍵盤按鍵序列的識別和如何根據(jù)鍵盤的按鍵序列去找相應(yīng)的操作程序這兩個問題。
上述問題可用“一圖三表”的方法來解決。即,建立一張鍵圖,依靠分析程序狀態(tài)表,分析程序入口表和動作例行子程序表來完成。其中分析程序狀態(tài)表總共分為4欄,分別為現(xiàn)狀態(tài)PSTi、鍵碼、下一狀態(tài)、動作例行子程序編號。
3 編碼開關(guān)工作原理
編碼開關(guān)有3個引腳和5個引腳的,其中2個引腳是按下功能,另外3個引腳控制編碼開關(guān)的左旋和右旋功能,與引腳1、2相連的是兩個長短不一的金屬靜片,與引腳3相連的是一周有12或24個齒的金屬動片。當(dāng)脈沖電位器旋轉(zhuǎn)時可出現(xiàn)4種狀態(tài):引腳3與引腳1相連,引腳3與引腳2及引腳1全相連,引腳3與引腳2 相連,引腳3與引腳2及引腳1全斷開。
在實(shí)際使用中,一般將引腳3接地作為數(shù)據(jù)輸入端。而引腳1、2作為數(shù)據(jù)輸出端與單片機(jī)I/0口相連。本設(shè)計中用到3個編碼開關(guān),其中一個將引腳1與單片機(jī)的P4.0相連,引腳2與單片機(jī)的P4.1相連。當(dāng)脈沖電位器左旋或右旋時,P4.0和P4.1就會周期性地產(chǎn)生圖1所示的波形。如果是12點(diǎn)的脈沖電位器旋轉(zhuǎn)一圈就會產(chǎn)生12組這樣的波形,24點(diǎn)的脈沖電位器就會產(chǎn)生24組這樣的波形。一組波形(或一個周期)包含了4個工作狀態(tài)。因此只要檢測出P4.O 和P4.1的波形,就能識別脈沖電位器是否旋轉(zhuǎn),是左旋還是右旋。
4 C8051F020單片機(jī)ADC0
C8051F020的ADC0子系統(tǒng)包括:一個9通道的可配置模擬多路開關(guān)(AMUX0)、一個可編程增益放大器(PGA0)和一個100 ksps的12位分辨率的逐次逼近寄存器型ADC。ADC中集成了跟蹤保持電路和可編程窗口檢測器。AMUX0、PGA0、數(shù)據(jù)轉(zhuǎn)換方式及窗口檢測器都可用軟件通過特殊功能寄存器來配置。只有當(dāng)ADC0控制寄存器(ADCOCN)中的ADOEN位被置1時,ADC子系統(tǒng)才被允許工作。當(dāng)ADOEN位為0 時,ADC子系統(tǒng)處于低功耗關(guān)斷方式。
ADC0端口的每一對均可用編程設(shè)置成為單端輸入或差分輸入。差分輸入時的端口配對為(0,1)、(2,3)、(4,5)、(6,7),此設(shè)置由通道選擇寄存器AMUXOSL的低4位和通道配置寄存器AMUXOCF的低4位確定。在AMXOCF中,位3~O各對應(yīng)2個引腳通道。位值=0,表示是獨(dú)立的單端輸入(復(fù)位值均為單端輸入);位值=1,表示是差分輸入對。
C8051F系列單片機(jī)中ADC的速率都是可編程設(shè)置的,但最少要用16個系統(tǒng)時鐘。一般在轉(zhuǎn)換之前還自動加上3個系統(tǒng)時鐘的跟蹤/保持捕獲時間 (>1.5μs)。設(shè)置F020內(nèi)ADC速率的方法是通過配置寄存器ADCOCF的位7~3來進(jìn)行的,其復(fù)位值為11111(位 7~3=SYSCLK/CLK(SAR)-1)。
一般在啟動ADC之前都要處于跟蹤方式,控制寄存器ADCOCN的位6如果為“O”,則一直處于跟蹤方式(此時啟動4種啟動方式都可比跟蹤啟動快3個系統(tǒng)時鐘);如為“1”,則有4種跟蹤啟動方式可選擇,即對ADCOCN中的位3~2賦值:00為向ADBUSY寫1時跟蹤(軟件命令),01為定時器3溢出跟蹤,1O為CNVSTR上升沿跟蹤(外部信號),11為定時器2溢出跟蹤。
5 系統(tǒng)硬件電路設(shè)計
鍵盤部分采用6×6矩陣鍵盤,P7.O~P7.5為行線,P3.0~P3.5為列線。P3.0與P7.O交叉處為一鍵,P7口接10 kΩ的上拉電阻至3.3 V。3個編碼開關(guān)的1、2腳直接與單片機(jī)的I/0引腳相連,這里選擇P4.O~P4.5,3腳接地,4、5腳用作按鍵使用。僅以接P4.O和P4.1引腳的編碼開關(guān)為例,電路圖如圖2所示。模數(shù)轉(zhuǎn)換部分使用內(nèi)部電壓基準(zhǔn),故將VREF引腳與VREF0引腳相連即可。采用電位器調(diào)節(jié)模擬量的輸入,單端輸入,電位器阻值為10 kΩ,基準(zhǔn)電壓典型值為2.43 V,電源電壓采用3.3 V供電。為使基準(zhǔn)電壓達(dá)到最大,需要一個阻值約為3.58 kΩ的電阻與電位器串聯(lián)接到模擬端口,硬件電路如圖3所示,電位器的4、5腳也用作按鍵使用。
6 系統(tǒng)軟件設(shè)計
6.1 一鍵多義鍵盤程序設(shè)計
在鍵盤分析中,運(yùn)用一個工作狀態(tài)寄存器保存鍵盤的現(xiàn)狀態(tài),當(dāng)鍵盤掃描到一個按鍵時,根據(jù)現(xiàn)狀態(tài)的值從分析程序入口表中找到分析程序狀態(tài)表地址,從該地址處進(jìn)入分析程序狀態(tài)表,找到相匹配的值,把下一狀態(tài)送到現(xiàn)狀態(tài)單元里,取出動作號,根據(jù)動作號計算出動作子程序入口地址,再執(zhí)行相應(yīng)子程序。圖4為鍵碼匹配子程序的流程圖。
6. 2 編碼開關(guān)程序設(shè)計
由圖1可以看出,引腳1和引腳2有同時為高電平的情況,之后如果引腳2比引腳1先到達(dá)高電平則表示左旋,如果引腳1比引腳2先到達(dá)高電平則表示右旋。編程的時候依據(jù)這個特點(diǎn)來判斷引腳1、引腳2的狀態(tài)即可。以1引腳接P4.0,2引腳接P4.1為例:
6.3 模數(shù)轉(zhuǎn)換軟件設(shè)計
通過設(shè)置ADCO控制寄存器ADCOCN位3~2(ADOCM1~O)A/D轉(zhuǎn)換啟動方式選擇位,來啟動A/D轉(zhuǎn)換:位3~2為00時,向ADOBUSY(ADCOCN位4)寫1啟動A/D轉(zhuǎn)換;位3~2為01時,定時器3溢出啟動A/D轉(zhuǎn)換;位3~2為10時,CNVSTR上升沿啟動 A/D轉(zhuǎn)換;位3~2為11時,定時器2溢出啟動A/D轉(zhuǎn)換。本設(shè)計采用第一種啟動方式。
由于單片機(jī)的工作量并不大,所以軟件設(shè)計時采用查詢的方式。單片機(jī)不斷地查詢鍵盤、編碼開關(guān)以及電位器的狀態(tài),如果有變化時,單片機(jī)將動作信息傳遞給 ARM主MCU,等待主MCU的處理。由于單片機(jī)模數(shù)轉(zhuǎn)換的速度非常快,因此在程序中加延時,以便觀察到模數(shù)轉(zhuǎn)換的變化量。另外,硬件設(shè)計時沒有考慮濾波,故用軟件實(shí)現(xiàn)濾波。一般的濾波的方法有限幅濾波法、中位置濾波法、算術(shù)平均濾波法等,現(xiàn)在提出一種新的濾波方法。由于使用12位A/D,但只要8位就可以達(dá)到所要的精度,所以可以采用去掉低4位的方法來實(shí)現(xiàn)濾波的目的。由于篇幅有限,下面只給出程序的一部分,以AIN0為例:
結(jié)語
本文介紹的一鍵多義的按鍵管理程序,對多按鍵的智能儀表可以通用。編碼開關(guān)的編程方法簡單易懂。在A/D轉(zhuǎn)換部分,提出的去掉低4位的軟件濾波方法可靠可行,對精度要求不高的場合非常適用。這3部分構(gòu)成了一個完整的監(jiān)控程序,當(dāng)單片機(jī)監(jiān)控到某一部分有變化時,就將其動作信息傳遞給ARM主CPU,主CPU 進(jìn)行相應(yīng)的處理。
推薦閱讀:
特別推薦
- 音頻放大器的 LLC 設(shè)計注意事項(xiàng)
- 服務(wù)器電源設(shè)計中的五大趨勢
- 電子技術(shù)如何助力高鐵節(jié)能?
- 利用創(chuàng)新FPGA技術(shù):實(shí)現(xiàn)USB解決方案的低功耗、模塊化與小尺寸
- 加速度傳感器不好選型?看這6個重要參數(shù)!
- 功率器件熱設(shè)計基礎(chǔ)(十三)——使用熱系數(shù)Ψth(j-top)獲取結(jié)溫信息
- IGBT并聯(lián)設(shè)計指南,拿下!
技術(shù)文章更多>>
- 解鎖AI設(shè)計潛能,ASO.ai如何革新模擬IC設(shè)計
- 汽車拋負(fù)載Load Dump
- 50%的年長者可能會聽障?!救贖的辦法在這里
- ADI 多協(xié)議工業(yè)以太網(wǎng)交換機(jī)
- 攻略:7種傾斜傳感器的設(shè)計選擇
技術(shù)白皮書下載更多>>
- 車規(guī)與基于V2X的車輛協(xié)同主動避撞技術(shù)展望
- 數(shù)字隔離助力新能源汽車安全隔離的新挑戰(zhàn)
- 汽車模塊拋負(fù)載的解決方案
- 車用連接器的安全創(chuàng)新應(yīng)用
- Melexis Actuators Business Unit
- Position / Current Sensors - Triaxis Hall
熱門搜索
功率電阻
功率放大器
功率管
功率繼電器
功率器件
共模電感
固態(tài)盤
固體繼電器
光傳感器
光電池
光電傳感器
光電二極管
光電開關(guān)
光電模塊
光電耦合器
光電器件
光電顯示
光繼電器
光控可控硅
光敏電阻
光敏器件
光敏三極管
光收發(fā)器
光通訊器件
光纖連接器
軌道交通
國防航空
過流保護(hù)器
過熱保護(hù)
過壓保護(hù)