本文主要是關(guān)于51單片機的相關(guān)介紹,并著重對51單片機的原理及其模塊化編程進行了詳盡的闡述。
51單片機
51單片機是對所有兼容Intel 8031指令系統(tǒng)的單片機的統(tǒng)稱。該系列單片機的始祖是Intel的8004單片機,后來隨著Flash rom技術(shù)的發(fā)展,8004單片機取得了長足的進展,成為應用最廣泛的8位單片機之一,其代表型號是ATMEL公司的AT89系列,它廣泛應用于工業(yè)測控系統(tǒng)之中。很多公司都有51系列的兼容機型推出,今后很長的一段時間內(nèi)將占有大量市場。51單片機是基礎入門的一個單片機,還是應用最廣泛的一種。需要注意的是51系列的單片機一般不具備自編程能力。
功能
·8位CPU·4kbytes程序存儲器(ROM) (52為8K)
·128bytes的數(shù)據(jù)存儲器(RAM) (52有256bytes的RAM)
·32條I/O口線·111條指令,大部分為單字節(jié)指令
·21個專用寄存器
·2個可編程定時/計數(shù)器·5個中斷源,2個優(yōu)先級(52有6個)
·一個全雙工串行通信口
·外部數(shù)據(jù)存儲器尋址空間為64kB
·外部程序存儲器尋址空間為64kB
·邏輯操作位尋址功能·雙列直插40PinDIP封裝
CPU:由運算和控制邏輯組成,同時還包括中斷系統(tǒng)和部分外部特殊功能寄存器;
RAM:用以存放可以讀寫的數(shù)據(jù),如運算的中間結(jié)果、最終結(jié)果以及欲顯示的數(shù)據(jù);
ROM:用以存放程序、一些原始數(shù)據(jù)和表格;
I/O口:四個8位并行I/O口,既可用作輸入,也可用作輸出
T/C:兩個定時/記數(shù)器,既可以工作在定時模式,也可以工作在記數(shù)模式;
五個中斷源的中斷控制系統(tǒng);
一個全雙工UART(通用異步接收發(fā)送器)的串行I/O口,用于實現(xiàn)單片機之間或單片機與微機之間的串行通信;
片內(nèi)振蕩器和時鐘產(chǎn)生電路,石英晶體和微調(diào)電容需要外接。最佳振蕩頻率為6M—12M。
功能
·8位CPU·4kbytes程序存儲器(ROM) (52為8K)
·128bytes的數(shù)據(jù)存儲器(RAM) (52有256bytes的RAM)
·32條I/O口線·111條指令,大部分為單字節(jié)指令
·21個專用寄存器
·2個可編程定時/計數(shù)器·5個中斷源,2個優(yōu)先級(52有6個)
·一個全雙工串行通信口區(qū)別
同樣的一段程序,在各個單片機廠家的硬件上運行的結(jié)果都是一樣的,如ATMEL的89C51(已經(jīng)停產(chǎn))、89S51, PHILIPS,和WINBOND等,我們常說的已經(jīng)停產(chǎn)的89C51指的是ATMEL公司的 AT89C51單片機,同時是在原基礎上增強了許多特性,如時鐘,更優(yōu)秀的是由Flash(程序存儲器的內(nèi)容至少可以改寫1000次)存儲器取代了原來的ROM(一次性寫入),AT89C51的性能相對于8051已經(jīng)算是非常優(yōu)越的了。
不過在市場化方面,89C51受到了PIC單片機陣營的挑戰(zhàn),89C51最致命的缺陷在于不支持ISP(在線更新程序)功能,必須加上ISP功能等新功能才能更好延續(xù)MCS-51的傳奇。89S51就是在這樣的背景下取代89C51的,89S51已經(jīng)成為了實際應用市場上新的寵兒,作為市場占有率第一的Atmel公司已經(jīng)停產(chǎn)AT89C51,將用AT89S51代替。89S51在工藝上進行了改進,89S51采用0.35新工藝,成本降低,而且將功能提升,增加了競爭力。89SXX可以向下兼容89CXX等51系列芯片。同時,Atmel不再接受89CXX的定單,大家在市場上見到的89C51實際都是Atmel前期生產(chǎn)的巨量庫存而以。如果市場需要,Atmel當然也可以再恢復生產(chǎn)AT89C51。
89S51相對于89C51增加的新功能包括:
-- 新增加很多功能,性能有了較大提升,價格基本不變,甚至比89C51更低!
-- ISP在線編程功能,這個功能的優(yōu)勢在于改寫單片機存儲器內(nèi)的程序不需要把芯片從工作環(huán)境中剝離。是一個強大易用的功能。
-- 最高工作頻率為33MHz,大家都知道89C51的極限工作頻率是24M,就是說S51具有更高工作頻率,從而具有了更快的計算速度。
-- 具有雙工UART串行通道。
-- 內(nèi)部集成看門狗計時器,不再需要像89C51那樣外接看門狗計時器單元電路。
-- 雙數(shù)據(jù)指示器。
-- 電源關(guān)閉標識。
-- 全新的加密算法,這使得對于89S51的盜版變?yōu)椴豢赡埽绦虻谋C苄源蟠蠹訌姡@樣就可以有效的保護知識產(chǎn)權(quán)不被侵犯。
-- 兼容性方面:向下完全兼容51全部字系列產(chǎn)品。比如8051、89C51等等早期MCS-51兼容產(chǎn)品。也就是說所有教科書、網(wǎng)絡教程上的程序(不論教科書上采用的單片機是8051還是89C51還是MCS-51等等),在89S51上一樣可以照常運行,這就是所謂的向下兼容。
比較結(jié)果:就如同INTEL的P3向P4升級一樣,雖然都可以跑Windows98,不過速度是不同的。從AT89C51升級到AT89S51 ,也是同理。和S51比起來,C51就要遜色一些,實際應用市場方面技術(shù)的進步是永遠向前的。
·外部數(shù)據(jù)存儲器尋址空間為64kB
·外部程序存儲器尋址空間為64kB
·邏輯操作位尋址功能·雙列直插40PinDIP封裝
·單一+5V電源供電
CPU:由運算和控制邏輯組成,同時還包括中斷系統(tǒng)和部分外部特殊功能寄存器;
RAM:用以存放可以讀寫的數(shù)據(jù),如運算的中間結(jié)果、最終結(jié)果以及欲顯示的數(shù)據(jù);
ROM:用以存放程序、一些原始數(shù)據(jù)和表格;
I/O口:四個8位并行I/O口,既可用作輸入,也可用作輸出
T/C:兩個定時/記數(shù)器,既可以工作在定時模式,也可以工作在記數(shù)模式;
五個中斷源的中斷控制系統(tǒng);
一個全雙工UART(通用異步接收發(fā)送器)的串行I/O口,用于實現(xiàn)單片機之間或單片機與微機之間的串行通信;
片內(nèi)振蕩器和時鐘產(chǎn)生電路,石英晶體和微調(diào)電容需要外接。最佳振蕩頻率為6M—12M。
51單片機如何進行模塊化編程
分模塊的好處
首先,這是我在寫萬年歷和溫度傳感器的時候,顯然這是我經(jīng)過收縮函數(shù)之后的程序
由上圖可以看出,當我收縮函數(shù)的時候,代碼已經(jīng)到達了451行,而當我打開之后,函數(shù)就達到了上千行,你們想想,當你看著這一千多行的代碼時,你能夠方便的從中找出僅僅是一行的錯誤嗎?這顯然是不可能的。既然對于自己這個打代碼的人都很難看得懂,更別說別人了!
而讓我們來看看下面這個同樣的程序
怎么樣,是不是看得容易了許多。對于學過51單片機的人來說,他能知道:
第一個模塊是主函數(shù)模塊,第二個模塊是液晶顯示和數(shù)碼管顯示模塊,第三個是時間延時模塊,第四個是溫度傳感器模塊。
而對于沒學過的人來說呢,看我的模塊名稱他也能知道第一個是主函數(shù)模塊,第二個是和顯示有關(guān)的模塊,而第三個是和時間有關(guān)的模塊,最后一個雖然他不知道,但他可以百度對吧,就可以知道這是和溫度傳感器有關(guān)的模塊。
這樣一看,整個程序就非常的清晰,每個人都能看懂你的程序在哪定義了些什么。而這對于每個人日后的工作來說是至關(guān)重要的。想要讓別人能看懂你的代碼,就要好好的規(guī)劃自己程序的模塊怎么劃分,才能讓別人看的簡單。對于所有想要從事有關(guān)于計算機的職業(yè)的人,只要你不是那種萬中無一IT大佬,你都不可能獨自完成整個軟件的程序設計,公司里都會把整個程序分成許多的模塊,讓每個人完成各自的模塊,最后再由專門的人員整合起來。對于現(xiàn)在的我們來說,養(yǎng)成寫程序分模塊的習慣尤為重要。
接下來講講干貨
首先你得有主函數(shù)的模塊,(這個最后整合了之后再講)然后是其他的模塊。
先來講講分模塊。開始你要建立一個工程,對于單片機來說,只要在工程文件下建立就
在自己的工程文件下建立 .c 的文件就可以(名字用小寫)。
(對于c語言來說主模塊和其它模塊是不建到一起的,這個本人用的是VS2017而且學的時間不長,所以就是在這隨口提一下。)
(以delay模塊為例)
創(chuàng)建好了 .c 文件后,我們把.c文件添加進工程中,之后還需要在創(chuàng)建一個 .h 的文件(假如你的.c文件是delay.c那么你的.h文件必須為delay.h的文件,且這個文件要與.c的文件放在同一個文件夾中)類似以下這樣
接下來就先講講.c的文件
首先要寫的就是 #include“delay.h” 記住這個函數(shù)必須要有,它所添加的就是我們剛剛建立的那個.h的文件,通過這個函數(shù)我們把它們關(guān)聯(lián)起來(其他的學過c語言的應該都知道,添加需要的庫,恒定義,創(chuàng)建一些需要使用的函數(shù))
接下來就是重點的.h文件
基本的寫法就是
#ifndef __(你所定義的.h文件的大寫)_H__
#define __(你所定義的.h文件的大寫)_H__
這里的東西是你之前在.c文件中定義過的函數(shù)(記住不要全部復制,只需復制開頭的函數(shù))
#endif
大體上就是這樣的,只需要復制開頭的函數(shù),不過切記,函數(shù)后面的分號千萬千萬千萬別忘了
好了這就是一個時間的模塊了,其它的模塊也一樣,接下來就到最重要的一步---整合
在main函數(shù)也就是主函數(shù)當中,當我們需要使用我們之前定義的函數(shù)的時候,我們就需要在開頭把函數(shù)所在的文件添加進去,正如我所寫的
#include“display.h” #include“delay.h” #include“de18b20.h”
其余的就是與你的主函數(shù)寫的程序相關(guān)的東西
其它模塊的互相關(guān)聯(lián)
其它的模塊也可以像主模塊那樣關(guān)聯(lián)起來的
就拿我上面這個ds18b20的.c文件來講,在它的函數(shù)里是需要用到延時的函數(shù)的,而延時函數(shù)是定義在delay模塊里的,因此我們需要添加delay的模塊才能使用我們定義延時函數(shù),所以就有了 #include “delay.h”
結(jié)語
關(guān)于51單片機的相關(guān)介紹就到這了,如有不足之處歡迎指正。
-
單片機
+關(guān)注
關(guān)注
6043文章
44621瀏覽量
638560 -
模塊化編程
+關(guān)注
關(guān)注
4文章
17瀏覽量
7736
發(fā)布評論請先 登錄
相關(guān)推薦
什么是模塊化編程?模塊化編程的注意事項
單片機教程之如何進行單片機內(nèi)部資源的C51編程
![<b class='flag-5'>單片機</b>教程之如<b class='flag-5'>何進行</b><b class='flag-5'>單片機</b>內(nèi)部資源的C<b class='flag-5'>51</b><b class='flag-5'>編程</b>](https://file.elecfans.com/web1/M00/7B/66/pIYBAFwBCuWAePtkAAA1aE99ZQU673.png)
如何進行單片機的模塊化編程詳細資料說明
![如<b class='flag-5'>何進行</b><b class='flag-5'>單片機</b>的<b class='flag-5'>模塊化</b><b class='flag-5'>編程</b>詳細資料說明](https://file.elecfans.com/web1/M00/A1/D6/o4YBAF1JItOAep_uAAKiLz4xEVs201.png)
如何進行51單片機的AD和DA轉(zhuǎn)換
![如<b class='flag-5'>何進行</b><b class='flag-5'>51</b><b class='flag-5'>單片機</b>的AD和DA轉(zhuǎn)換](https://file.elecfans.com/web1/M00/96/82/o4YBAF0HLdWAAJbPAAD4YnlJ88c126.png)
【單片機】Keil+Proteus流水燈(模塊化編程)
![【<b class='flag-5'>單片機</b>】Keil+Proteus流水燈(<b class='flag-5'>模塊化</b><b class='flag-5'>編程</b>)](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
51單片機-矩陣鍵盤模塊-長短按鍵&數(shù)碼管顯示-模塊化編程模板
![<b class='flag-5'>51</b><b class='flag-5'>單片機</b>-矩陣鍵盤<b class='flag-5'>模塊</b>-長短按鍵&數(shù)碼管顯示-<b class='flag-5'>模塊化</b><b class='flag-5'>編程</b>模板](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
單片機零基礎入門(8-5)模塊化編程
![<b class='flag-5'>單片機</b>零基礎入門(8-5)<b class='flag-5'>模塊化</b><b class='flag-5'>編程</b>](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
評論