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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 單片機小白學步(14) 點亮第一個LED的程序分析

          單片機小白學步(14) 點亮第一個LED的程序分析

          作者: 時間:2016-11-19 來源:網(wǎng)絡 收藏
          本篇我們將分析上一篇所寫的程序代碼。未來學習單片機的大部分精力,我們也將放在程序代碼的編寫上。但是不用擔心,我會非常詳細的介紹每個程序的編寫思路和各種注意事項等。

          之前我們寫的程序如下:

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

          #include

          sbit LED = P1^0;

          void main()

          {

          LED = 0;

          while(1);

          }

          頭文件

          第一行包含頭文件,這個和C語言編寫HelloWorld時的#include 一樣。頭文件reg52.h中定義了單片機的一些寄存器,如P0~P3等。至于什么是寄存器,將在原理篇中具體介紹,現(xiàn)在我們只要把它想象成C語言中常說的內存就好了。有興趣的讀者可以右擊reg52.h打開頭文件看一看。

          C51的變量類型

          這里我們使用的語言是C51,和標準C語言相比,最主要的特點就是多出來兩種變量類型:sfr和sbit。sfr和char一樣是一個8位數(shù)據(jù)類型,表示一個8位的寄存器。例如頭文件reg52.h中就有一句sfr P1 = 0x90,它定義了寄存器P1。由于P1是IO口寄存器,所以對P1賦值,則相應的, IO口P1將輸出對應的高低電平。而sbit則是一個1位數(shù)據(jù)類型,只有0和1兩種值,它對應寄存器中的一個位。

          于是在第二行里,我們定義了sbit型變量LED,并設置LED對應P1的最低位bit0。此時變量LED就和IO口P1.0關聯(lián)起來。執(zhí)行賦值語句LED = 0,IO口P1.0就會輸出低電平,于是我們電路中的LED就會亮起來了。是不是非常神奇呢?在原理篇中,我會一步一步講解單片機是如何實現(xiàn)這種功能的。

          位尋址

          在其他的很多單片機中,我們只能讀寫整個P1寄存器,而不能直接定義類似sbit這種對應寄存器一位的數(shù)據(jù)類型,另外51單片機里面有些寄存器也只能整個8位一起讀寫。這種直接讀寫一個寄存器位的特性被叫做位尋址功能。

          又是一個很難理解的概念,同樣,還是需要了解原理篇才能很好的理解它,現(xiàn)在完全不用擔心,我提這個就是想讓初學者對此提前有個大體印象。畢竟很多知識都是慢慢積累的,如果把大量這樣的小知識全部放在原理篇中一并介紹,反而難以接受。

          主函數(shù)的特點:沒有參數(shù)和返回值

          讀者應該已經(jīng)看到了無參數(shù)且無返回值的void main()函數(shù),以及倒數(shù)第二行的while(1)語句,并可能疑惑不解。沒錯,主函數(shù)沒有參數(shù)也沒有返回值,倒數(shù)第二行的這句是一個死循環(huán),程序永遠也不會退出。這和計算機上的程序有很大的不同。下面簡單的說明一下這樣做的原因何在,更深入的原因,則需要讀者看完原理篇后才能理解透徹。

          在計算機中,我們開機時看到的啟動界面是操作系統(tǒng),如Windows、Linux等,我們編寫的程序則是在操作系統(tǒng)的環(huán)境下運行的。程序執(zhí)行時,相當于系統(tǒng)調用main函數(shù),所以系統(tǒng)可以向main函數(shù)傳遞參數(shù),也可以獲取main函數(shù)執(zhí)行結束時的返回值,程序執(zhí)行結束后,會重新回到操作系統(tǒng)環(huán)境下。而在這里,我們寫的程序是直接運行在單片機上的,不依賴操作系統(tǒng)。我們程序中的main函數(shù)不會被操作系統(tǒng)調用,因此通常它不需要參數(shù),也不需要返回值。事實上,main函數(shù)有些情況下是被啟動代碼調用的,而啟動代碼是匯編語言寫的,還記得上一篇中提到的啟動代碼么?

          主函數(shù)的特點:死循環(huán),不會執(zhí)行結束

          在計算機中,我們寫的程序執(zhí)行結束會回到操作系統(tǒng)環(huán)境下。而在單片機中,一旦單片機上電復位,就會執(zhí)行我們寫的main函數(shù),直到斷電。而如果main函數(shù)執(zhí)行結束,將發(fā)生不可預知的結果。

          實際實驗時,STC單片機會復位并重新開始執(zhí)行程序,或許只是個巧合,因為官方的芯片手冊中并沒有明確說明這一點。本著嚴謹?shù)目茖W態(tài)度,我們不利用這種未經(jīng)官方確認的特點來開發(fā)我們的程序。程序的可靠性是非常重要的,這一點要引起重視。

          試想如果你用單片機開發(fā)的是醫(yī)療相關的產(chǎn)品,或者是控制一些大型機器等,一旦發(fā)生意外,后果難以想象。即使你開發(fā)的是普通的產(chǎn)品,如果總是出現(xiàn)奇怪的故障,也足以讓用戶抓狂。因此這一點要引起讀者注意。所以,單片機的程序是不應該執(zhí)行結束的,因此最后必然是一個死循環(huán),這樣才能保證單片機系統(tǒng)的可靠性。

          總結

          于是我們總結出通常情況下51單片機程序的幾個特點:

          1、包含REG52.H,該文件中定義了P0-P3接口等信息(sfr型和sbit型)。

          2、單片機主函數(shù)沒有參數(shù),沒有返回值(當然寫成int型也不會報錯,但是沒必要)。

          3、單片機主函數(shù)末尾會有個死循環(huán),不會退出。

          =======================================================



          關鍵詞: 單片機LED程序分

          評論


          技術專區(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); })();