前言:想要寫出一篇令人眼前一亮的文章嗎?我們特意為您整理了5篇單片機應用范文,相信會為您的寫作帶來幫助,發(fā)現(xiàn)更多的寫作思路和靈感。
1、單片機原理是指一種在線式實時控制計算機的原理方式。在線式就是現(xiàn)場控制,需要的是有較強的抗干擾能力,較低的成本,這也是和離線式計算機(比如家用PC)的主要區(qū)別。
2、應用:單片機普遍設(shè)置有并行地址總線、 數(shù)據(jù)總線、控制總線,這些引腳用以擴展并行外圍器件都可通過串行口與單片機連接,另外,許多單片機已把所需要的外圍器件及外設(shè)接口集成一片內(nèi),因此在許多情況下可以不要并行擴展總線,大大減省封裝成本和芯片體積,這類單片機稱為非總線型單片機。
(來源:文章屋網(wǎng) )
Abstract: Combining 8051, the paper introduces the advantages of C-language and the programming design of C-language's relization of MCU digital blink. Though 8051 could embed assembly code at C-language programming, the complicity is obviously improved. The practice proves that if we use C-language resonablely, the equal precision with assembler language could be got at practice.
關(guān)鍵詞:單片機;C語言;應用
Key words: MCU; C-language; application
中圖分類號:TP31 文獻標識碼:A文章編號:1006-4311(2010)36-0146-01
1問題的提出
將C向MCU(俗稱單片機)8051上的移植始于20世紀80年代的中后期??陀^上講,C向8051 MCU移植的難點不少。經(jīng)過Keil/Franklin、Archmeades、IAR、BSO/Tasking等公司艱若不懈的努力,終于于20世紀90年代開始而趨成熟,成為專業(yè)化的MCU高級語言了。過去長期困擾人們的所謂“高級語言產(chǎn)生代碼太長,運行速度太慢,因此不適合單片機使用”的致使缺點已被大幅度地克服。
2單片機C語言的優(yōu)越性
2.1 不懂得單片機的指令集,也能夠編寫完美的單片機程序;
2.2 無須懂得單片機的具體硬件,也能夠編出符合硬件實際的專業(yè)水平的程序;
2.3 不同函數(shù)的數(shù)據(jù)實行覆蓋,有效利用片上有限的RAM空間;
2.4 程序具有堅固性:數(shù)據(jù)被破壞是導致程序運行異常的重要因素。C語言對數(shù)據(jù)進行了許多專業(yè)性的處理,避免了運行中間非異步的破壞;
2.5 C語言提供復雜的數(shù)據(jù)類型(數(shù)組、結(jié)構(gòu)、聯(lián)合、枚舉、指針等),極大地增強了程序處理能力和靈活性;
2.6 提供auto、static、const等存儲類型和專門針對8051單片機的data、idata、pdata、xdata、code等存儲類型,自動為變量合理地分配地址;
2.7 提供small、compact、large等編譯模式,以適應片上存儲器的大?。?/p>
2.8 中斷服務程序的現(xiàn)場保護和恢復,中斷向量表的填寫,是直接與單片機相關(guān)的,都由C編譯器代辦;
2.9 提供常用的標準函數(shù)庫,以供用戶直接使用;
2.10 頭文件中定義宏、說明復雜數(shù)據(jù)類型和函數(shù)原型,有利于程序的移植和支持單片機的系列化產(chǎn)品的開發(fā);
2.11 有嚴格的句法檢查,錯誤很少,可容易地在高級語言的水平上迅速地被排掉;
2.12 可方便地接受多種實用程序的服務:如片上資源的初始化有專門的實用程序自動生成。
3應用案例:C語言實現(xiàn)單片機數(shù)碼管閃爍
本應用案例中(/*此函數(shù)主要是C語言實現(xiàn)單片機數(shù)碼管閃爍功能。效果:1――數(shù)碼管顯示0123;2――停頓;3――數(shù)碼管顯示4567;4――無窮循環(huán)1,2,3步。*/),程序為:
#include
#include
unsigned char code dis_code[11]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90, 0xff}; //定義數(shù)組
int delay(int x)//聲明延遲函數(shù)
{
int j=0;
for(j;j
}
main() //主函數(shù)
{
int i,j;//定義i,j
unsigned char seg;//定義seg,用于數(shù)碼管的初始化
seg= 0xfe ;//定義seg為0xfe,即11111110;使數(shù)碼管為第一個顯示
while (1)//無窮循環(huán)
{
{ for(j=0;j
{
for(i=0;i
{
P2=seg;//初始化P2
P0=dis_code[i]; //顯示數(shù)字
delay(200);//延遲約1ms
seg=_crol_(seg,1);//數(shù)碼管右移一位
if (seg==0xef) seg=0xfe; //輸出四個數(shù)字之后停止
}
}
P2=0xff;//數(shù)碼管全不接通,把0,1,2,3消去
delay(2000000); //延遲
for(j=0;j
{
for(i=4;i
{
P2=seg; //初始化P2
P0=dis_code[i]; //顯示數(shù)字
delay(200);//延遲約1ms
seg=_crol_(seg,1);//數(shù)碼管右移一位
if (seg==0xef) seg=0xfe;//輸出四個數(shù)字之后停止
}
}
}
}
}//函數(shù)結(jié)束
本設(shè)計采用MicrochipPIC16C54單片機,選用南通光電器件廠GR40101紅外發(fā)射二極管和GD1611硅PIN型光敏二極管作為紅外發(fā)射和接收器件,舟山海山電器有限公司生產(chǎn)的微型電機QDB-30-3.0作為泵液晶驅(qū)動。系統(tǒng)采用單鍵模式完成暫停、設(shè)定泵液量等功能。電路采用節(jié)電方式設(shè)計,待機電流小于100μA,并可提供微型電機所需的500mA負載電流,可監(jiān)測電池電壓,欠壓報警。系統(tǒng)原理如圖1所示。
圖中TX(紅外發(fā)射管)、R1、R5、Q4組成紅外發(fā)射電路,單片機RA1口輸出一定頻率的脈沖控制三極管Q4的通斷,從而控制紅外發(fā)射管TX的發(fā)射頻率。由單片機RA3口為發(fā)射電路提供電源,是為了節(jié)能。當RA1口將要發(fā)射脈沖時,RA3口置高,發(fā)射電路加電。RX(紅外接收管)、R2、R11、R12、R13、R16、Q6、C3組成紅外接收電路,RX接收紅外脈沖,整形后由Q6放大。接收電路必須嚴格控制放大倍數(shù),確保紅外反射接收距離在10cm左右。接收電路電源由單片機RB1口提供,在發(fā)射脈沖后,將RB1口置高。R6、R7、R8、Q3組成電池電壓監(jiān)測電路,當電源電壓降到一定值時,Q3截止,單片機RB3口為高電平,欠壓報警。D2、D3、R9、R10、Q1、Q5組成電機供電電路,提供微型電機所需的3V電壓、500mA負載電流,當需驅(qū)動電機泵液時,由單片機RB2口輸出低電平,Q發(fā)射極為電機供電。D1、C4、Q2、R3組成電機控制電路,泵液時先為電機供電,然后單片機RA2口輸出高電平驅(qū)動電機運轉(zhuǎn)。LED為工作狀態(tài)指示燈,單一按鍵SW為多功能鍵,可完成設(shè)定泵液量、暫停、手動泵液等功能。
2軟件設(shè)計
本電路硬件設(shè)計通過控制各單元電路供電達到節(jié)能的目的,軟件上利用PIC單片機的休眼、看門狗溢出喚醒特性以及對發(fā)射脈沖個數(shù)的控制進一步降低能耗,使其待機電流小于100μA,4節(jié)4號堿性電池可提供15000次以上的使用次數(shù)或200天以上的使用時間。程序流程如圖2所示。
程序開始先對單片機各端口初始化,并設(shè)置好看門狗溢出時間,程序工作一個周期后,自動進入休眠模式,由看門狗溢出喚醒單片機進入下一周期。進入一個工作周期前,首先判斷是電池上電第1次工作,還是看門狗溢出喚醒單片機。如果是電池上電第1次工作,指示燈應給出指示,并對泵液量進行設(shè)定。進入工作周期后要判斷按鍵是否按下,若按下按鍵,則判斷是手動泵液還是暫停泵液器工作,這兩者靠按鍵時間長短決定。
紅外收發(fā)程序?qū)μ岣弑靡浩骺垢蓴_能力、降低泵液器能耗起著關(guān)鍵作用。經(jīng)過實驗選定一個發(fā)射脈沖頻率使其對外界光干擾不敏感。為了最大限度地降低能耗,程序?qū)Πl(fā)射脈沖的個數(shù)和方法進行設(shè)計,先發(fā)2個試探脈沖,若接收到,則按選定頻率連續(xù)發(fā)60個脈沖,然后判斷接收方收到的脈沖數(shù)是否在允許的范圍內(nèi),是則泵液,否則進入休眠模式;若接收方未收到試探脈沖,則直接進入休眠模式。每次泵液器工作后,都檢查電池電壓,若發(fā)現(xiàn)電壓低,立即由指示燈給出報警,提示更換電池。
【關(guān)鍵詞】單片機開發(fā)技巧;系統(tǒng)測試;減少bug數(shù)目;提高運行效率;優(yōu)化運行性能
1、概述
隨著微電子通信技術(shù)不斷提高以及超大規(guī)模集成電路制作工藝的不斷完善,單片機作為微處理器已經(jīng)滲透到社會中軍用民用等各個領(lǐng)域中,推動著社會現(xiàn)代化不斷向前發(fā)展。由于單片機的集成度高,體積小,可靠性良好,控制功能強,功耗低,在導彈導航、各種交通工具的儀表控制,以及互聯(lián)網(wǎng)絡(luò)設(shè)備中的數(shù)據(jù)通訊與傳輸、門禁卡智能卡識別等方面無處不在,因此對于單片機的學習、開發(fā)和應用對于通信工程和自動化工程專業(yè)的學生和專業(yè)人士是必不可少的,然而在單片機開發(fā)與應用過程中,有很多技巧性的東西,需要我們在對于單片機的學習、開發(fā)和應用過程中去掌握和了解,從而縮短學習周期,加快對單片機深入理解的步伐,能夠為以后在單片機的開發(fā)和應用培養(yǎng)良好的習慣,減少失誤和錯誤發(fā)生的概率,最大優(yōu)化單片機的開發(fā)和應用的過程。
2、單片機的應用中的注意事項
單片機已經(jīng)在各個領(lǐng)域中被廣泛應用,但是在產(chǎn)品中選擇和使用單片機的時候需要注意一些事項,來提高單片機在應用中的可靠性和穩(wěn)定性。在選擇單片機初期,滿足使用要求和經(jīng)濟預算的情況下,盡量選擇使用壽命長的單片機型號,避免由于單片機的老化而引起產(chǎn)品或項目工程質(zhì)量的下降,同時盡量選擇運算速度快、抗干擾能力強以及功耗低的單片機,使其能夠充分滿足產(chǎn)品和項目工程的需要。當一個單片機系統(tǒng)設(shè)計完成后,要對整個產(chǎn)品或者系統(tǒng)進行系統(tǒng)測試,其中包括對單片機軟件的單元測試、系統(tǒng)測試以及性能測試,還有對整個系統(tǒng)的上電、掉電測試,ESD和EFT測試以及使用壽命測試,從而對單片機整個系統(tǒng)或產(chǎn)品進行可靠性的了解,避免由于單片機選擇不合適而使產(chǎn)品質(zhì)量低下。
3、單片機的開發(fā)的基本技巧
單片機在開發(fā)的過程中,主要使用C語言作為開發(fā)語言來驅(qū)動單片機工作,所以對于單片機的開發(fā)的基本技巧,主要涉及到C語言代碼優(yōu)化,包括減少C代碼中的bug數(shù)目、程序代碼使用率以及代碼性能優(yōu)化的問題。只有在開發(fā)過程中盡量避免這些問題,開發(fā)的程序才能在單片機內(nèi)良好地運行。
3.1、減少C語言代碼的bug數(shù)目
人們在做任何事情的時候都會犯錯誤,單片機C語言開發(fā)也不例外。如果由于人為的失誤或者錯誤將缺陷帶入到代碼中,那么單片機在運行過程中就有可能出現(xiàn)錯誤,所以在C語言代碼編寫過程中要盡量在人們經(jīng)常出錯的地方謹慎處理,盡量避免引入缺陷到單片機運行程序中去。常見的缺陷類型有參數(shù)類型和范圍問題,一般對單片機系統(tǒng)整體的物理參數(shù)、資源參數(shù)、應用參數(shù)以及過程參數(shù)的類型和取值范圍設(shè)定的問題上出現(xiàn)錯誤,開發(fā)人員由于忽略了各個參數(shù)在不同參數(shù)類型的計算以及賦值或者函數(shù)返回的過程中參數(shù)類型的轉(zhuǎn)變以及取值范圍或取值精度的變化而想當然依舊沒有改變對參數(shù)的處理使得程序在運行過程中出現(xiàn)了缺陷問題;另一種常見的bug問題出在各中運算符的優(yōu)先級計算或者比較的部分,開發(fā)人員忽略運算符的優(yōu)先級選用而使程序存在缺陷;還有常見的bug問題涉及到一維或者多維數(shù)組角標的確定或者指針自動變化的問題,此類問題常用循環(huán)模塊來計算,由于多層級計算可能會誤導開發(fā)人員而為程序引入缺陷。
3.2、提高運行效率,優(yōu)化運行性能
對于單片機開發(fā)來說,實現(xiàn)同樣功能的兩個程序片段運行時間和運行可靠性是非常重要的,所以在單片機開發(fā)過程中,在實現(xiàn)基本功能的前提下,盡量減少運行代碼的行數(shù),保證運行質(zhì)量,使得單片機高效快速響應和穩(wěn)定有效地長期運行。對于提高單片機的運行效率,必須從單片機CPU型號入手,詳細了解CPU內(nèi)部的加法器、除法器、各種存儲單元、總線的分布以及中斷程序入口等,從而深入了解單片機的物理結(jié)構(gòu)以及各個模塊的工作機理,在單片機開發(fā)的過程中要根據(jù)各個模塊的工作機理來開發(fā)程序代碼,同時,對于代碼之間的邏輯關(guān)系也要有深入考究,盡量減少單片機遍歷同樣代碼的次數(shù),提高運行效率。對于單片機程序代碼運行性能的優(yōu)化,主要是去除運行干擾源、精簡資源開銷以及提高程序容錯率。當有錯誤發(fā)生時,使用軟件陷阱和看門狗機制將單片機拉回復位狀態(tài),從而避免由于程序出錯而導致事故發(fā)生,提高程序容錯率是開發(fā)人員的一項基本素質(zhì),需要在開發(fā)過程中去鍛煉和培養(yǎng),在反復訓練和提高中去熟悉單片機的習性,從而避免常見的錯誤而導致單片機運行失敗。
4、總結(jié)
單片機的開發(fā)和應用技巧,需要在真正的實施過程中去總結(jié)、去體會,當然,還有很多的應用和開發(fā)的技巧需要我們不斷努力,在以后的工作、學習和應用中去尋找和總結(jié),使得單片機的學習、開發(fā)和應用過程更簡單、更有效,為單片機的開發(fā)和應用鋪平前進的道路。
參考文獻:
[1]韓麗娟,鄧玉鳳.單片機的開發(fā)技巧及其應用研究[J].科技信息,2009(34)
[2]刁世倫,潘文良.一種高效的鍵盤掃描分析算法[J].科技信息,2010(09)
[3]蔡亞洲.單片機的應用與開發(fā)技巧[J].科技風,2009(19)
關(guān)鍵詞 單片機;接口技術(shù);PS/2
中圖分類號TP39 文獻標識碼A 文章編號 1674-6708(2011)44-0208-02
接口是指各種不同特性部件的相互交接部分。對于單片機,CPU與其它電路和部件相互交接的部分就是接口。接口又分為和軟件部分硬件部分。接口軟件則是指為實現(xiàn)信息交換而設(shè)計的程序;硬件接口是指兩個部件實體之間的連線和邏輯電路。在現(xiàn)在所掌握的技術(shù)條件下,硬件接口都必須得到相應的接口軟件的支持。
1 單片機接口技術(shù)的特點
單片機本身已經(jīng)具備了一些常用的功能部件,而且我們知道單片機的應用主要是面向測控系統(tǒng),因此,與通用計算機的接口技術(shù)相比較,單片機的接口技術(shù)有以下特點。
1)單片機的接口往往更側(cè)重于人機接口和控制接口。通用微機的人機界面是標準鍵盤和顯示器,較之單片機的人機接口要復雜,同時功能也強得多。PC機的鍵盤本身就是一個單片機系統(tǒng),可以對100多個鍵進行掃描,并具有消除抖動和重鍵處理等功能。另外,通用計算機不是面向測控應用的,因此通常不具備測控接口。如果需要,也必須使用擴展板;
2)單片機的接口往往都是由用戶自行設(shè)計的,而且不會有統(tǒng)一的標準和規(guī)格。而且同一種功能也可以采用不同的接口設(shè)計方案。而對于通用微型計算機的接口部件一般是已經(jīng)設(shè)計好的,用戶也只能使用它所提供的功能,卻不能更改其原有的設(shè)計。因此,單片機的接口設(shè)計往往需要更多的技巧和經(jīng)驗;
3)單片機應用系統(tǒng)的規(guī)模通常都比較小,存儲器的容量也不大。因此,很少采用大容量的存儲器,而且通常只采用靜態(tài)存儲器,很少采用動態(tài)存儲器。另外,也很少采用外部存儲器(軟盤、硬盤等)。而在通用微型計算機中,通常都采用大容量的動態(tài)存儲器,軟盤和硬盤更是必不可少的大容量的外部存儲器。
2 單片機接口技術(shù)的應用――PS/2接口技術(shù)
作為一個出現(xiàn)較早的輸入接口,基于PS/2的開發(fā)技術(shù)已經(jīng)相當成熟,但是這些成熟的技術(shù)主要掌握在部分主板開發(fā)商和鼠標鍵盤開發(fā)商手上。而且PS/2協(xié)議的官方參考資料已經(jīng)很難找到,所以本課題將以監(jiān)控并分析PS/2鼠標在實際工作中的數(shù)據(jù)流并結(jié)合前人開發(fā)經(jīng)驗心得為主要開發(fā)依據(jù),通過不斷調(diào)試改進來完成PS/2鼠標接口的開發(fā)。
PS/2 鼠標和鍵盤履行一種雙向同步串行協(xié)議。換句話說每次數(shù)據(jù)線上發(fā)送一位數(shù)據(jù)并且每在時鐘線上發(fā)一個脈沖就被讀入。鍵盤/鼠標可以發(fā)送數(shù)據(jù)到主機而主機也可以發(fā)送數(shù)據(jù)到設(shè)備,但主機總是在總線上有優(yōu)先權(quán),它可以在任何時候抑制來自于鍵盤/鼠標的通訊,只要把時鐘拉低即可。數(shù)據(jù)傳輸過程中的時鐘始終都由設(shè)備提供,如果主機要想設(shè)備發(fā)送數(shù)據(jù)就必需先告訴設(shè)備產(chǎn)生一個時鐘信號。
2.1硬件結(jié)構(gòu)基本設(shè)計
PS/2接口與單片機可以直接連接,將單片機的VCC和GND分別與PS/2接口的4號和3號針腳連接,實現(xiàn)對設(shè)備的供電。將P2.0和P2.1分別和PS/2接口的1號和5號針腳連接,作為數(shù)據(jù)線和時鐘線實現(xiàn)單片機到PS/2接口的信號傳輸。
在單片機的P2.2-P2.7引腳上連接六個按鍵,分別用來模擬鼠標的上下左右移動以及鼠標的左右鍵。該模塊用來測試PS/2接口設(shè)備的基本功能。P1口接8個發(fā)光二極管,在調(diào)試和測試中顯示相關(guān)內(nèi)容。P3.0-P3.1接串口模塊,實現(xiàn)單片機和PC的通信,該模塊用于擴展和測試。
下面介紹PS/2接口設(shè)備與PC通過串口的連接:
這個模塊是一個擴展和測試模塊,用來實現(xiàn)串口轉(zhuǎn)PS/2接口,并且可以測試PS/2接口的功能和性能。
通過串口將PC機同PS/2接口設(shè)備連接,在PC機上編寫測試軟件,測試軟件通過串口向單片機發(fā)送一定的鼠標數(shù)據(jù)報,設(shè)備將這些數(shù)據(jù)報轉(zhuǎn)發(fā)到PS/2接口,這樣使得調(diào)試更加方便靈活,同時也實現(xiàn)了本課題的PS/2接口設(shè)備的一個擴展應用。
51單片機有一個全雙工的串行通訊口,所以單片機和電腦之間可以進行串口通訊。但是電腦的串口是RS232電平的,而單片機的串口是TTL電平的,兩者之間必須有一個電平轉(zhuǎn)換電路,我們采用了三線制連接串口,也就是說和電腦的9針串口只連接其中的3根線:第5腳的GND、第2腳的RXD、第3腳的TXD。這是最簡單的連接方法。
2.2 軟件結(jié)構(gòu)設(shè)計
PS/2接口設(shè)備的軟件主要包括六個部分:PS/2接口驅(qū)動模塊,Reset模式處理模塊,stream模式處理模塊,顯示處理模塊,按鍵處理模塊,主程序模塊。
各模塊的功能如下:
1)PS/2接口驅(qū)動模塊:實現(xiàn)對PS/2接口的基本操作,包括向PS/2口發(fā)送一個字節(jié)數(shù)據(jù),從PS/2口接收一個字節(jié)數(shù)據(jù)等操作的實現(xiàn);
2)Reset模式處理模塊:完成Reset模式操作;
3)Stream模式處理模塊:完成Stream模式操作,提供發(fā)送一個完整鼠標數(shù)據(jù)報的函數(shù);
4)顯示處理模塊:提供用于調(diào)試和測試的顯示函數(shù);
5)按鍵處理模塊:用六個按鍵分別模擬鼠標的上下左右移動和左右鍵,當按下某個按鍵時產(chǎn)生相應的鼠標數(shù)據(jù)報,并調(diào)用Stream模式處理模塊中的發(fā)送鼠標數(shù)據(jù)報函數(shù),數(shù)據(jù)包發(fā)送到主機;
6)主程序模塊:協(xié)調(diào)各模塊穩(wěn)定運行。
2.3 PS/2鼠標接口設(shè)備狀態(tài)轉(zhuǎn)換
通過分析PS/2鼠標在實際使用過程中的信號了解到,在鼠標上電一定時間后主機會向鼠標發(fā)送多次復位信號,鼠標上電機進入Reset模式。Reset模式下主機會對鼠標進行檢測和配置,這個過程也被叫做鼠標的初始化。主機在重新啟動和休眠喚醒時也會讓鼠標進入Reset模式并初始化鼠標。Stream模式下設(shè)備可以向主機發(fā)送鼠標數(shù)據(jù)報,當然主機在這個時期也可能短暫的抑制鼠標數(shù)據(jù)報的發(fā)送。
參考文獻