當前位置:首頁 » 編程語言 » 單片機原理及應用基於c語言
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

單片機原理及應用基於c語言

發布時間: 2023-01-13 04:40:59

1. 學51式單片機匯編語言重要嗎 陳海宴的51單片機原理及應用:基於Keil C與Proteus這本書怎麼樣

強烈建議不要學匯編,因為它雖然執行效率高但是太麻煩!c語言既方便,又易上手。Proteus是模擬軟體,學單片機是軟硬結合,所以模擬軟體只是模擬,與實際的電路板還是有一定差距

2. c51單片機原理及應用重點

1、單片機內部資源

STC89C52:8KFLASH、512位元組RAM、32個IO口、3個定時器、1個UART、8個中斷源

(1)Flash(硬碟)——程序存儲空間 —— 擦寫10萬次,斷電數據不丟失,讀寫速度慢

(2)RAM(內存)——數據存儲空間 —— 斷電數據丟失,讀寫速度快,無限次使用

(3)SFR —— 特殊功能寄存器

2、單片機最小系統

51單片機的內部組成及應用原理解析

最小系統:最少組件組成單片機可以工作的系統。

三要素:

(1)、 電源電路:5V

(2)、 晶振電路:11.0592MHZ、兩個30PF

(3)、 復位電路:

P0:開漏輸出,必須加上拉電阻

准雙向口:

強推挽輸出:電流驅動能力強

高阻態

上下拉電阻:上拉電路就是將不確定的信號通過一個電阻拉到高電平,同時限流作用。下拉電阻就是下拉到低電平。

上下拉電阻選取:從降低功耗方面考慮應該足夠大,因為電阻越大,電流越小;驅動能力來看,小電阻

3、硬體基礎知識

(1)、電磁干擾(EMI)——靜電放電(ESD)、快速瞬間脈沖群(EFT)、浪涌(Surge)

(2)、去耦電容的使用

低頻濾波電容,平常應用最多的事鉭電容,電解電容,陶瓷電容,起到去除電源低頻紋波,穩定電源的作用。

高頻濾波電容,電容附近,通常用104電容來進行去除高頻干擾。

(3)、三極體(PNP,NPN) b,c,e --- 電壓驅動

控制應用

驅動應用

4、LED發光二極體——電流驅動

51單片機的內部組成及應用原理解析

通常紅色貼片LED, 靠電流驅動,電壓1.8V~2.2V,電流1~20mA,在1~5mA亮度有所變化,5mA以上亮度基本不變。

VCC 電壓是 5V,發光二極體自

身壓降大概是 2V,那麼在右邊 R34 這個電阻上承受的電壓就是 3V。

R = U/I —— 1~20mA —— R:150~3K

5、C語言基礎

(1)、基本運算符

+ - * / % ++ -- = == != += -= 《《 》》

3. 單片機原理及應用

單片機原理及應用需要學習低級匯編語言和C語言。學習具有一定難度。但只要有恆心是一定能學好的。
1)編程語言:
a)匯編語言(assembly language)是一種用於電子計算機、微處理器、微控制器或其他可編程器件的低級語言,亦稱為符號語言。在匯編語言中,用助記符(Mnemonics)代替機器指令的操作碼,用地址符號(Symbol)或標號(Label)代替指令或操作數的地址。在不同的設備中,匯編語言對應著不同的機器語言指令集,通過匯編過程轉換成機器指令。
b)C語言是一門通用計算機編程語言,應用廣泛。C語言的設計目標是提供一種能以簡易的方式編譯、處理低級存儲器、產生少量的機器碼以及不需要任何運行環境支持便能運行的編程語言。
2)單片機(Microcontrollers)是一種集成電路晶元,是採用超大規模集成電路技術把具有數據處理能力的中央處理器CPU、隨機存儲器RAM、只讀存儲器ROM、多種I/O口和中斷系統、定時器/計數器等功能(可能還包括顯示驅動電路、脈寬調制電路、模擬多路轉換器、A/D轉換器等電路)集成到一塊矽片上構成的一個小而完善的微型計算機系統,在工業控制領域廣泛應用。從上世紀80年代,由當時的4位、8位單片機,發展到現在的300M的高速單片機。
3)由於單片機對成本是敏感的,所以目前占統治地位的軟體還是最低級匯編語言(近幾年,C語言也開始廣泛被應用),它是除了二進制機器碼以外最低級的語言了,既然這么低級為什麼還要用呢?很多高級的語言已經達到了可視化編程的水平為什麼不用呢?原因很簡單,就是單片機沒有家用計算機那樣的CPU,也沒有像硬碟那樣的海量存儲設備。一個可視化高級語言編寫的小程序裡面即使只有一個按鈕,也會達到幾十K的尺寸!對於家用PC的硬碟來講沒什麼,可是對於單片機來講是不能接受的。 單片機在硬體資源方面的利用率必須很高才行,所以匯編雖然原始卻還是在大量使用。一樣的道理,如果把巨型計算機上的操作系統和應用軟體拿到家用PC上來運行,家用PC也是承受不了的。

4. 單片機的原理及應用

單片機到底是什麼呢?就是一個電腦,只不過是微型的,麻雀雖小,五臟俱全:它內部也用和電腦功能類似的模塊,比如CPU,內存,並行匯流排,還有和硬碟作用相同的存儲器件,不同的是它的這些部件性能都相對我們的家用電腦弱很多,不過價錢也是低的,一般不超過10元即可......用它來做一些控制電器一類不是很復雜的工作足矣了。排煙罩VCD等等的家電裡面都可以看到它的身影!......它主要是作為控制部分的核心部件。x0dx0a單片機是靠程序工作的,並且可以修改。通過不同的程序實現不同的功能,尤其是特殊的獨特的一些功能,這是別的器件需要費很大力氣才能做到的,有些則是花大力氣也很難做到的。一個不是很復雜的功能要是用美國50年代開發的74系列,或者60年代的CD4000系列這些純硬體來搞定的話,電路一定是一塊大PCB板!但是如果要是用美國70年代成功投放市場的系列單片機,結果就會有天壤之別!只因為單片機的通過你編寫的程序可以實現高智能,高效率,以及高可靠性!x0dx0a由於單片機對成本是敏感的,所以目前占統治地位的軟體還是最低級匯編語言(近幾年,C語言也開始廣泛被應用),它是除了二進制機器碼以上最低級的語言了,既然這么低級為什麼還要用呢?很多高級的語言已經達到了可視化編程的水平為什麼不用呢?原因很簡單,就是單片機沒有家用計算機那樣的CPU,也沒有像硬碟那樣的海量存儲設備。一個可視化高級語言編寫的小程序裡面即使只有一個按鈕,也會達到幾十K的尺寸!對於家用PC的硬碟來講沒什麼,可是對於單片機來講是不能接受的。單片機在硬體資源方面的利用率必須很高才行,所以匯編雖然原始卻還是在大量使用。一樣的道理,如果把巨型計算機上的操作系統和應用軟體拿到家用PC上來運行,家用PC也是承受不了的。x0dx0a目前最常用的單片機為MCS-51,是由美國INTEL公司(生產CPU的英特爾)生產的,89C51是這幾年在我國非常流行的單片機,它是由美國ATMEL公司開發生產的,其內核兼容MCS-51單片機。x0dx0a單片微型計算機簡稱單片機,是典型的嵌入式微控制器(MicrocontrollerUnit),x0dx0a單片機晶元x0dx0a常用英文字母的縮寫MCU表示單片機,單片機又稱單片微控制器,它不是完成某一個邏輯功能的晶元,而是把一個計算機系統集成到一個晶元上。單片機由運算器,控制器,存儲器,輸入輸出設備構成,相當於一個微型的計算機(最小系統),和計算機相比,單片機只缺少了I/O設備。概括的講:一塊晶元就成了一台計算機。它的體積小、質量輕、價格便宜、為學習、應用和開發提供了便利條件。同時,學習使用單片機是了解計算機原理與結構的最佳選擇。它最早是被用在工業控制領域。x0dx0a由於單片機在工業控制領域的廣泛應用,單片機由晶元內僅有CPU的專用處理器發展而來。最早的設計理念是通過將大量外圍設備和CPU集成在一個晶元中,使計算機系統更小,更容易集成進復雜的而對體積要求嚴格的控制設備當中。x0dx0aINTEL的8080是最早按照這種思想設計出的處理器,當時的單片機都是8位或4位的。其中最成功的是INTEL的8031,此後在8031上發展出了MCS51系列單片機系統。因為簡單可靠而性能不錯獲得了很大的好評。盡管2000年以後ARM已經發展出了32位的主頻超過300M的高端單片機,直到目前基於8031的單片機還在廣泛的使用。在很多方面單片機比專用處理器更適合應用於嵌入式系統,因此它得到了廣泛的應用。事實上單片機是世界上數量最多處理器,隨著單片機家族的發展壯大,單片機和專用處理器的發展便分道揚鑣。x0dx0a現代人類生活中所用的幾乎每件電子和機械產品中都會集成有單片機。手機、電話、計算器、家用電器、電子玩具、掌上電腦以及滑鼠等電腦配件中都配有1-2部單片機。汽車上一般配備40多部單片機,復雜的工業控制系統上甚至可能有數百台單片機在同時工作!單片機的數量不僅遠超過PC機和其他計算的總和,甚至比人類的數量還要多。x0dx0a單片機是指晶元本身,而單片機系統是為實現某一個控制應用需要由用戶設計的,是一個圍繞單片機晶元而組建的計算機應用系統,這是單片機應用系統。單片機開發系統是指單片機開發調試的工具。單片機自問世以來,性能不斷提高和完善,其資源又能滿足很多應用場合的需要,加之單片機具有集成度高、功能強、速度快、體積小、功耗低、使用方便、價格低廉等特點,正在逐步取代現有的多片微機應用系統。單片機自動完成賦予它的任務的過程,也就是單片機執行程序的過程,即一條條執行的指令的過程,所謂指令就是把要求單片機執行的各種操作用的命令的形式寫下來,這是在設計人員賦予它的指令系統所決定的,一條指令對應著一種基本操作;單片機所能執行的全部指令,就是該單片機的指令系統,不同種類的單片機,其指令系統亦不同。為使單片機能自動完成某一特定任務,必須把要解決的問題編成一系列指令(這些指令必須是選定單片機能識別和執行的指令),這一系列指令的集合就成為程序,程序需要預先存放在具有存儲功能的部件——存儲器中。存儲器由許多存儲單元(最小的存儲單位)組成,就像大樓房有許多房間組成一樣,指令就存放在這些單元里,單元里的指令取出並執行就像大樓房的每個房間的被分配到了唯一房間號一樣,每一個存儲單元也必須被分配到唯一的地址號,該地址號稱為存儲單元的地址,這樣只要知道了存儲單元的地址,就可以找到這個存儲單元,其中存儲的指令就可以被取出,然後再被執行。x0dx0a2應用分類x0dx0a編輯x0dx0ax0dx0a單片機作為計算機發展的一個重要分支領域,根據目前發展情況,從不同角度單片機大致可以分為通用型/專用型、匯流排型/非匯流排型及工控型/家電型。x0dx0a通用型/專用型x0dx0ax0dx0a這是按單片機適用范圍來區分的。例如,80C51是通用型單片機,它不是為某種專用途設計的;專用型單片機是針對一類產品甚至某一個產品設計生產的,例如為了滿足電子體溫計的要求,在片內集成ADC介面等功能的溫度測量控制電路。x0dx0a匯流排/非匯流排型x0dx0ax0dx0a這是按單片機是否提供並行匯流排來區分的。匯流排型單片機單片機普遍設置有並行地址匯流排、數據匯流排、控制匯流排,這些引腳用以擴展並行外圍器件都可通過串列口與單片機連接,另外,許多單片機已把所需要的外圍器件及外設介面集成一片內,因此在許多情況下可以不要並行擴展匯流排,大大減省封裝成本和晶元體積,這類單片機稱為非匯流排型單片機。x0dx0a控制型/家電型x0dx0ax0dx0a這是按照單片機大致應用的領域進行區分的。一般而言,工控型定址范圍大,運算能力強;用於家電的單片機多為專用型,通常是小封裝、低價格,外圍器件和外設介面集成度高。顯然,上述分類並不是惟一的和嚴格的。例如,80C51類單片機既是通用型又是匯流排型,還可以作工控用。x0dx0a3發展歷史x0dx0a編輯x0dx0ax0dx0a單片機誕生於1971年,經歷了SCM、MCU、SoC三大階段,早期的SCM單片機都是8位或4位的。其中最成功的是INTEL的8031,此後在8031上發展出了MCS51系列MCU系統。基於這一系統的單片機系統直到現在還在廣泛使用。隨著工業控制領域要求的提高,開始出現了16位單片機,但因為性價比不理想並未得到很廣泛的應用。90年代後隨著消費電子產品大發展,單片機技術得到了巨大提高。隨著INTELi960系列特別是後來的ARM系列的廣泛應用,32位單片機迅速取代16位單片機的高端地位,並且進入主流市場。x0dx0a而傳統的8位單片機的性能也得到了飛速提高,處理能力比起80年代提高了數百倍。目前,高端的32位Soc單片機主頻已經超過300MHz,性能直追90年代中期的專用處理器,而普通的型號出廠價格跌落至1美元,最高端的型號也只有10美元。x0dx0a當代單片機系統已經不再只在裸機環境下開發和使用,大量專用的嵌入式操作系統被廣泛應用在全系列的單片機上。而在作為掌上電腦和手機核心處理的高端單片機甚至可以直接使用專用的Windows和Linux操作系統。x0dx0a主要階段x0dx0ax0dx0a早期階段x0dx0aSCM即單片微型計算機(SingleChipMicrocomputer)階段,主要是尋求最佳的單片形態嵌入式系統的最佳體系結構。「創新模式」獲得成功,奠定了SCM與通用計算機完全不同的發展道路。在開創嵌入式系統獨立發展道路上,Intel公司功不可沒。x0dx0a中期發展x0dx0aMCU即微控制器(MicroControllerUnit)階段,主要的技術發展方向是:不斷擴展滿足嵌入式應用時,對象系統要求的各種外圍電路與介面電路,突顯其對象的智能化控制能力。它所涉及的領域都與對象系統相關,因此,發展MCU的重任不可避免地落在電氣、電子技術廠家。從這一角度來看,Intel逐漸淡出MCU的發展也有其客觀因素。在發展MCU方面,最著名的廠家當數Philips公司。x0dx0aPhilips公司以其在嵌入式應用方面的巨大優勢,將MCS-51從單片微型計算機迅速發展到微控制器。因此,當我們回顧嵌入式系統發展道路時,不要忘記Intel和Philips的歷史功績。x0dx0a當前趨勢x0dx0aSoC嵌入式系統(SystemonChip)式的獨立發展之路,向MCU階段發展的重要因素,就是尋求應用系統在晶元上的最大化解決,因此,專用單片機的發展自然形成了SoC化趨勢。隨著微電子技術、IC設計、EDA工具的發展,基於SoC的單片機應用系統設計會有較大的發展。因此,對單片機的理解可以從單片微型計算機、單片微控制器延伸到單片應用系統。

5. 單片機原理及應用,用匯編教學好還是C語言教學好

匯編吧,因為匯編語言反映了數據是怎樣存取的,c語言只管輸入輸出,匯編對於教學是必須的,如果偏向於實際應用,c語言就差不多了。

6. 單片機原理及應用設計

單片機最小系統包括單片機晶元,晶振電路,復位電路。可以通過電腦軟體編寫C語言或匯編語言程序進行編譯後生成HEX(16進制)或BIN(2進制)文件,再通過下載軟體把程序下載到單片機裡面便可以運行。

7. 關於單片機原理及應用的程序

應該學習C語言,這是當今單片機開發的主流,我承認匯編有他自身的優勢,但C語言在項目中用的要遠比匯編廣泛。

8. 單片機原理及應用張岩

單片機(Microcontrollers)是一種集成電路晶元,是採用超大規模集成電路技術把具有數據處理能力的中央處理器CPU、隨機存儲器RAM、只讀存儲器ROM、多種I/O口和中斷系統、定時器/計數器等功能(可能還包括顯示驅動電路、脈寬調制電路、模擬多路轉換器、A/D轉換器等電路)集成到一塊矽片上構成的一個小而完善的微型計算機系統,在各個領域廣泛應用。
諸如手機、汽車電子、工業上的步進馬達、機器手臂的控制等,都可見到單片機的身影。單片機的特點是編程、維護相對復雜,編程方式常用C語言或者匯編語言,成本較低,I/O介面相對有限。
PLC與單片機的區別

PLC是應用單片機構成的比較成熟的控制系統,是已經調試成熟穩定的單片機應用系統的產品,有較強的通用性。
單片機可以構成各種各樣的應用系統,使用范圍更廣,但單就「單片機」而言,它只是一種集成電路,還必須與其它元器件及軟體構成系統才能應用。
從工程的使用來看,對單項工程或重復數極少的項目,採用PLC快捷方便,成功率高,可靠性好,但成本較高。
對於量大的配套項目,採用單片機系統具有成本低、效益高的優點,但這要有相當的研發力量和行業經驗才能使系統穩定。

從本質上說,PLC其實就是一套已經做好的單片機(單片機范圍很廣泛)系統。
PLC的特點

PLC廣泛使用梯形圖代替計算機語言,對編程有一定的優勢。你可以把梯形圖理解成是與匯編等計算器語言一樣,是一種編程語言,只是使用范圍不同。而且通常做法是由PLC軟體把你的梯形圖轉換成C或匯編語言(由PLC所使用的CPU決定),然後利用匯編或C編譯系統編譯成機器碼。PLC運行的只是機器碼而已,梯形圖只是讓使用者更加容易使用而已。

如所說,MCS-51單片機也可以用於PLC製作,只是8位CPU在一些高級應用如:大量運算(包括浮點運算)、嵌入式系統(現在UCOS也能移植到MCS-51)等,有些力不從心而已。不過加上DSP就已經能滿足一般要求了,而且同樣使用梯形圖編程,我們可把梯形圖轉化為C51再利用KEIL的C51進行編譯。不難發現不同型號的PLC會選用不同的CPU,其實也說明PLC就是一套已經做好的單片機系統。

這樣一看PLC其實並不神秘,不少PLC是很簡單的,其內部的CPU除了速度快之外,其他功能還不如普通的單片機。通常PLC採用16位或32位的CPU,帶1或2個的串列通道與外界通訊,內部有一個定時器即可,若要提高可靠性再加一個看家狗定時器問題就解決了。

另外,PLC的關鍵技術在於其內部固化了一個能解釋梯形圖語言的程序及輔助通訊程序,梯形圖語言的解釋程序的效率決定了PLC的性能,通訊程序決定了PLC與外界交換信息的難易。對於簡單的應用,通常以獨立控制器的方式運作,不需與外界交換信息,只需內部固化有能解釋梯形圖語言的程序即可。

實際上,設計PLC的主要工作就是開發解釋梯形圖語言的程序。現在的單片機完全可以取代PLC。以前的單片機由於穩定性和抗電磁干擾能力比較的弱和PLC是沒有辦法相比的,現在的單片機已經做到了高穩定性和很強的抗干擾能力在某些領域已經實現了替換。

單片機可以取代PLC嗎?

有人說這是個偽問題,單片機是元器件,PLC是由元器件以及龐大的軟體構成的系統,兩者在這一方面沒有可比性 —— 大多PLC的控制晶元實際上就是單片機,也就是說可以將PLC看成是單片機的二次開發。單論工業防護等級,單片機的穩定性和可靠性能根本比不了PLC這種IP67類的產品( IP為標記字母,第一標記數字表示接觸保護和外來物保護等級,第二標記數字表示防水保護等級)。而且就PLC這種能應對工業惡劣環境的產品還開發出一套冗餘系統。

9. 跪求同濟大學魏鴻磊單片機原理及應用(C語言編程)課後習題答案

#include<stdio.h>
#include<stdlib.h>

void swap(int*a,int*b)
{
int temp;
temp=*a;
*a=*b;
*b=temp;
}
void select_sort(int A[],int n)
{
register int i,j,min,m;
for(i=0;i<n-1;i++)
{
min=i;//查找最小值
for(j=i+1;j<n;j++)
{
if(A[min]>A[j])
{
min=j;
}
}
if(min!=i)
{
swap(&A[min],&A[i]);
printf("第%d趟排序結果為:\n",i+1);
for(m=0;m<n;m++)
{
if(m>0)
{
printf("");
}
printf("%d",A[m]);
}
printf("\n");
}
}
}
int main(void)
{
int n;
while(scanf("%d",&n)!=EOF) /* VS2013等版本中需使用scanf_s(),VC6.0中使用scanf() */
{
int i;
int*A=(int*)malloc(sizeof(int)*n);
for(i=0;i<n;i++)
{
scanf("%d",&A[i]);
}
select_sort(A,n);
printf("最終排序結果為:\n");
for(i=0;i<n;i++)
{
if(i>0){
printf("");
}
printf("%d",A[i]);
}
printf("\n");
}
return 0;
}