單片機初學


單片機學習編程

問:什麼是單片機?
答:可編程電子設計的產物,也就是一個小芯片。能夠用來編程,實現不一樣的功能。
把具備數據處理能力的中央處理器(CPU)、隨機存儲器(RAM)、只讀存儲器(ROM)、多種I/O口和中斷系統、定時器/計數器等功能(可能還包括顯示驅動電路、脈寬調製電路、模擬多路轉換器、A/D轉換器等電路)集成到一塊硅片上。
單片機的種類繁多,通常按單片機數據總線的位數進行分類,主要分爲4位、8位、16位、32位;
那什麼是數據總線?:總線的概念提出是由於在計算機電路連線中,各微型處理器和各器件間單獨連線的話數量太多,因此引入總線概念。各個器件共同享用連線,全部器件的8根數據線所有連接到8根公用的線上,即至關於各個器件並聯起來。可是,這樣會存在問題:若是兩個器件同時發送數據,一個爲1,一個爲0.那接收方收到的是什麼呢?因此,控制線就是爲了這種狀況出現的。它使器件分時工做,任什麼時候候只能有一個器件發送數據。故:器件的數據線也就被稱爲數據總線,器件全部的控制線被稱爲控制總線。順便一記:單片機的內部或者外部存儲器及其它器件中有存儲單元,這些存儲單元要被分配地址,才能使用,分配地址是以電信號的形式給出,因爲存儲單元比較多,因此,用於地址分配的線比較多,這些線稱爲地址總線。
1)4位單片機 適合用於控制單一的小型電子類產品,如:PC機的輸入裝置(鼠標、遊戲杆)電池充電器
2)8位單片機 目前品種最多,應用最廣。主要分爲51系及非51系。
3)16位單片機 操做速度及數據吞吐能力比8位有所提升;
4)32位單片機 通常均指ARM單片機
簡言之:可編程、可處理數據、可實現不一樣功能的一塊芯片;而且種類繁多,8位(51系)跟32位(ARM)單片機佔主市場
問:單片機最小系統基本擁有什麼?
答: 簡言之:單片機(核心)、電源(提供能量)、晶振(提供節奏)、復位電路;

51單片機最小系統:由一系列模塊組成;
復位系統:當引腳9出現2個機器週期以上高電平時,單片機復位,程序從頭開始運行;
時鐘系統:由振盪器電路產生頻率等於晶振頻率,這時用的是外界晶振。也能夠由外部單獨輸入,此時XTAL2腳接地,時鐘信號由XTAL1輸入;
電源系統:VCC和GND引腳,供電電壓4—5.5V。緩存

問:RAM與ROM的區別?
答:單片機一個做用就是數據信息的處理,而在處理數據的過程當中,須要一些「存儲器」來存放這些數據。
存儲器物理實質就是一組或者多組具有數據輸入/輸出和數據存儲功能的集成電路,用於進行設備緩存或保存同定的程序及數據。存儲器按存儲信息的功能不一樣,分爲了只讀存儲器(ROM)和隨機存儲器(RAM);
ROM:它的信息一次寫入後只能被讀出,而不能被操做者修改或者刪除。通常用於存放固定的程序或數據表格。可是,」只讀「這個概念有時候能夠被一些新特性的器件顛覆。
ROM分類:通常分爲三類
1) 固定內容ROM;採用掩模工藝製做,其內容在出產前就按要求固定,用戶沒法修改。經常使用來存儲固定的程序和數據。如:在計算機中用來存放監控、管理等專用程序。
2) PROM:可一次編程ROM。這種存儲器在出廠時未存入數據信息。單元可視爲全0或者全1,用戶可按要求將所需存入的數碼一次性的寫入,一旦寫入就不能在改變了。PROM在每個存儲單元中都有快速熔斷絲,在用戶寫入數據前,各存儲單元至關於存入1,寫入數據時,將應該存0的單元,通以足夠大的電流脈衝將熔斷絲燒掉便可。
3) EPROM:是爲了克服PROM只能一次寫入的缺點,出現了可屢次擦除和編程的存儲器。這種存儲器在擦除方式上有兩種:
① EPROM(電寫入紫外線擦除的存儲器)
它與ROM不一樣點在於,它能夠用特殊的裝置擦除或重寫其中的內容。
什麼是特殊裝置?所謂特殊的裝置就是必須把芯片從電路板上拔下,將存儲器上面的一塊石英玻璃窗口對準紫外燈光照射數分鐘,使存儲的數據消失。擦除時間大約爲10min-30min,視型號不一樣而異。爲方便擦除操做,在器件外殼上裝有透明的石英蓋板,便於紫外線經過。在寫好數據之後應使用不透明的紙將石英蓋板遮蔽,以防止數據丟失。數據的寫入可用軟件編程,生成電脈衝來實現。
② 閃存FLASH(電寫入電擦除的存儲器)
閃速存儲器,又稱E2PROM。它是徹底非易失的,能夠在線寫入,而且能夠按頁連續字節寫入,讀出速度快。擦除時不須要紫外線,只要加入10ms、20V左右的電脈衝便可完成擦除操做。擦除操做其實是對E2PROM進行寫1操做,所有存儲單元的均寫爲1狀態,編程時只要對相應部分寫爲0便可。
RAM:它就是咱們平時說的內存,主要用來存放各類現場的輸入/輸出數據、中間計算結果,以及與外部存儲器交換信息,或者做堆棧(特色:先進後出,後進先出)用。它的存儲單元根據具體須要能夠讀出或者改寫。
二者區別:RAM只能用於暫時存放程序與數據。一旦電源關閉或發生斷電,RAM中的數據就會丟失。而ROM中的數據在電源關閉或者斷電後仍然會保留下來。
簡而言之:相同點它們都是用來存儲數據的
不一樣點存儲數據的方式與數據能不能在二次加工不一樣
問:爲何RAM一旦電源關閉或發生斷電,數據就會丟失?而ROM不會?
答:RAM使用寄生電容充放電來表示0和1,斷電後電容放電,數據就消失了。而ROM用MOS管中間的一個絕緣體來儲備電子,能夠長期保存數據。
問:單片機I/O口的功能和做用?
答:I/O是input/output的縮寫,即輸入輸出端口。是單片機對外部實現控制和信息交換的必經之路,是一個過渡的大規模集成電路,用於信息傳遞過程當中的速度匹配和加強單片機的負載能力。I/O端口能夠實現和不一樣外設的速度匹配,以提升CPU的工做效率,能夠改變數據的傳送方式。如:內部並行總線與外部設備串行數據傳送的轉換。
一、I/O端口分爲串行口與並行口:
1) 串行I/O端口一次只能傳送一位二進制信息
2) 並行I/O端口一次可傳送一個字節的數據。(1字節等於8位)
訪問並行I/O端口的方法:字節地址訪問、按位尋址;
二、MSC-51單片機有四個並行端口:P0/P1/P2/P3;每一個端口都有八條端口線,用於傳送數據或地址信息。因爲每一個端口的結構各不相同,所以它們的功能和用途上差異頗大。
三、每一個端口都由一個八位數據鎖存器和一個八位數據緩衝器組成。其中八位數據鎖存器的端口與P0、P一、P二、P3同名,屬於21個特殊功能寄存器中的4個,對應內部RAM地址分別爲80H、90H、A0H、B0H。進行數據輸出時,8個數據鎖存器對端口引腳上輸入數據進行鎖存。輸入數據時,8個數據緩衝器用於對端口引腳上輸入數據進行緩衝。
端口 訪問地址 位地址範圍 是否雙向I/O 負載能力
P0(P0.7-P0.0) 80H 80H-87H 是 8個TTL
P1 90H 90H-97H 準雙向 4個LSTTL
P2 A0H A0H-A7H 準雙向 4個LSTTL
P3 B0H B0H-B7H 準雙向 4個LSTTL
P0的功能:
組成:一個輸出鎖存器(D型觸發器)、兩個三態門緩衝22(控制讀引腳或讀鎖存器)與門和多路開關MUX組成的輸出控制電路。
用於傳遞I/O(輸入/輸出)數據
P0口的多路開關的輸入有兩個:地址/數據輸出和鎖存器輸出/Q,多路開關的切換由內部控制信號控制。
P1的功能:
僅用於傳遞I/O(輸入/輸出)數據。
P2功能:
一、做爲通用I/O使用
二、地址總線用於輸出片外存儲器的高8位地址
P3功能:
一、 做爲通用I/O使用
二、 做控制用
a) P3.0-RXD 串行數據接收口
b) P3.1-TXD串行數據發送口
c) P3.2INTO外中斷0輸入
d) P3.3-INT1外中斷1輸入
e) P3.4-T0 計數器0計數輸入
f) P3.5-T1 計數器1計數輸入
g) P3.6-WR 外部RAM寫選通訊號
h) P3.7-RD 外部RAM讀選通訊號數據結構

簡言之:能夠看出I/O口最主要的功能用來與外部器件實現數據信息的交互、速度匹配、數據傳送方式和加強單片機的負載能力。它在二者之間扮演橋樑的做用,單片機擁有着串行與並行接口。每一個種類的單片機的不一樣並行口也有着各自不一樣的功能。
問:常見的時鐘電路有哪些?
答:先了解一下什麼是時鐘電路?
時鐘電路就是產生像時鐘同樣準確運動的振盪電路,任何工做都按時間順序。用於產生這個時間的電路就是時鐘電路。
組成:晶體振盪器、晶震控制芯片和電容組成。
如今流行的串行時鐘電路有:DS130二、DS130七、PCF8485等
它們的特色:接口簡單、價格低廉、使用方便。
DS1302:具備涓細電流充電能力的電路,主要特色:採用串行數據傳輸,可爲掉電保護電源提供可編程的充電功能,而且能夠關閉充電功能。採用普通32.768KHz晶振。
問:爲何要使用PLL?
答:PLL(Phase Locked Loop):鎖相環電路。用來統一整合時脈訊號,使高頻器件正常工做。如:內存的存取資料等。PLL用於振盪器中的反饋技術。許多電子設備要正常工做,一般須要外部的輸入信號與內部的振盪信號同步。通常的晶振因爲工藝與成本緣由,作不到很高的頻率,而在須要高頻應用時,有相應的器件VCO,實現轉成高頻,但不穩定,故利用鎖相環路就能夠實現穩定且高頻的時脈衝訊號。
什麼是時脈:指同步電路中時鐘的基礎頻率,它以(若千次週期每秒)來度量,單位是(Hz)
總之:PLL能夠同步頻率,相位正交。倍頻、變頻。
問:怎樣去選擇合適的晶振頻率?
答:一、根據使用須要肯定。好比:若是要產生標準的串口波特率,應使用11.0592MHz。若是要讓51單片機產生整數的時鐘頻率可以使用12MHz或者24MHz單片機。
二、還有就是根據單片機自己的參數,不要選擇太高的頻率,不然會工做不穩定。好比:At mega8L-8PU,這個單片機後面一個8的意思就是建議最大工做頻率不要超過8MHz,若是超過8MHz不大於16MHz,能夠選用Atmega8L-16PU。固然,非要讓At mega8L-8PU使用大於8MHz的頻率,也能夠,屬於超頻使用,至關於咱們電腦的CPU超頻,會工做不穩定。oop

問:有源晶振和無源晶振哪一個更好?
答:無源晶振就是一個晶體,必需要結合外圍電路構成一個振盪器才能輸出特定頻率的信號,而這個振盪器是須要提供電源的。像MCU能夠用無源晶振是由於其內部集成有構成振盪器的電路,晶體很差集成就只好外加了。
有源晶振纔是真正意義上的一個振盪器,它裏面包含了晶體和外圍電路,只要外部提供一個電壓源,就能夠直接輸出信號。
因此,有源晶體明顯比無源晶體更好。學習

問:什麼是時鐘週期?機器週期?指令週期?它們之間的關係?
答:一、時鐘週期又叫作振盪週期;單片機內部時鐘電路產生(或外部時鐘電路送入)的信號週期,單片機的時序信號是以時鐘週期信號爲基礎而造成的,在它的基礎上造成了機器週期、指令週期和各類時序信號。定義爲時鐘脈衝的倒數(能夠這樣理解:時鐘週期就是單片機外接晶振的倒數,例如:12M的晶振,它的時鐘週期就是1/12us),是計算機中最基本的、最小的時間單位。在一個時鐘週期內,CPU僅完成一個最基本的動做。
二、計算機中,爲了便於管理,常把一條指令的執行過程劃分爲若干個階段,每個階段完成一項工做。例如:取指令、存儲器讀、存儲器寫等,這每一項工做稱爲一個基本操做。完成一項基本操做所須要的時間成爲機器週期。通常狀況,一個機器週期由若干個S週期(狀態週期)組成。機器週期是單片機的基本操做週期,每一個機器週期包含S一、S二、……S6這6個狀態,每一個狀態包含兩拍P1和P2,每一個拍爲一個時鐘週期(振盪週期)。所以,一個機器週期包含12個時鐘週期。依次可表示爲S1P一、S1P二、S2P一、S2P2……、S6P一、S6P2。
三、指令週期:計算機從取一條指令開始,到執行完該指令所須要的時間稱爲指令週期。不一樣的指令,指令長度不一樣,指令週期也不同。但指令週期以機器週期爲單位,指令不一樣,所需的機器指令也不一樣。
51單片機指令根據指令長度與執行週期分爲:
1) 單字節單週期指令
2) 單字節雙週期指令
3) 雙字節單週期指令
4) 雙字節雙週期指令
5) 三字節雙週期指令
6) 一字節四周期指令
總結:時鐘週期是最小單位,機器週期須要1個或者多個時鐘週期,指令週期須要1個或者多個機器週期;機器週期是指完成一個基本操做的時間。指令週期是CPU的關鍵指標,指取出並執行一條指令的時間。通常以機器週期爲單位,分單指令執行週期、雙指令執行週期等。機器週期是完成一個基本操做的時間單元。時鐘週期是CPU的晶振的工做頻率的倒數。操作系統


看門狗相關問題設計


問:看門狗是什麼東西?有什麼做用?
答:看門狗(WDT)watchdog timer是一個定時器電路(通常有一個輸入和一個輸出),開啓看門狗定時器以後(好比定時200ms),在單片機程序中每隔必定時間(小於200ms)要「喂狗(輸入)」一次,即:將看門狗定時器清零。這樣作的用處是,一旦單片機程序跑飛(發生死循環),沒有在定時的時間以內去「喂狗」,那麼定時達到200ms時,看門狗自動將單片機復位(輸出)。
目的:對一些程序潛在錯誤和惡劣環境干擾等因素致使系統死機而在無人干擾狀況下自動恢復系統正常工做狀態。
問:什麼是復位?復位的方式有哪些?
答:復位是使中央處理器(CPU)和內部其餘部件處於一個肯定的初始狀態,從這個狀態開始工做。
方式:上電覆位和按鈕復位
問:看門狗的原理?
答:工做原理:在系統運行之後就啓動看門狗計數器,此時看門狗就開始自動計時,若是達到必定的時間還不去給它進行清零,看門狗計數器就會溢出從而引發看門狗中斷,形成系統的復位。
爲何會溢出呢?
由於看門狗是一個計數器,而計數器位數有限。可以裝的數值也就有限(好比8位的最多裝256個數,16位的最多裝65536個數),從開啓看門狗那刻起,它就開始不停的數機器週期,數一個機器週期就計數器加1,加到計數器盛不下了(這就是溢出)就產生一個復位信號,重啓系統。
指針


問:什麼是硬件看門狗?什麼是軟件看門狗?
答:硬件看門狗是利用一個定時器電路,其定時輸出鏈接到電路的復位端,程序在必定時間範圍內對定時器清零,所以程序正常工做時,定時器總不能溢出,也就不能產生復位信號。若是程序出現故障,不在定時週期內復位看門狗,就使得看門狗定時器溢出產生復位信號並重啓系統。
軟件看門狗原理上同樣,只是將硬件電路上的定時器用處理器的內部定時器代替,這樣能夠簡化硬件電路設計,可是在可靠性方面不如硬件定時器。
問:在什麼狀況下軟件看門狗失效?
答:一、系統內部定時器自身發生故障看門狗就會失效(固然能夠經過雙定時器相互監視,成本高);
二、中斷系統故障致使定時器中斷失效。
三、整個程序死機。主程序出現異常。
四、陷入死循環。
問:什麼是中斷?
答:計算機中,因爲計算機內外部的緣由或軟硬件的緣由,使CPU從當前正在執行的程序中暫停下來,而自動轉去執行預先安排好的爲處理該緣由而編寫的服務程序。執行完服務程序後,再返回被暫停的位置,繼續執行原來的程序,這個程序稱爲中斷。

問:何時使用硬件看門狗?
答:對系統穩定性有較高要求的關鍵場合。接口

問:爲何要使用硬件看門狗?
答:硬件看門狗是一個簡單的程序,不會出現異常。當程序異常,軟件看門狗沒法喚醒時,硬件看門狗就會斷電重啓,將整個設備的程序復位。確保了系統在嚴重錯誤時的恢復能力。遊戲


問:怎麼喂狗?喂狗的注意事項?
答:估算程序運行時間(採用定時器),而後根據看門狗設置的超時時間喂狗。不能頻繁喂狗,最好在設置的1/2時間內喂狗;

問:看門狗通常應用到程序的那些位置?
答:主程序中,容易發生死循環的地方。例:For、while這種循環語句的開始。多任務系統中只要一個任務出現故障系統就重啓。


復位相關問題


問:復位時單片機有什麼動做?
答:主要作的就是初始化每一個寄存器,包括最重要的PC指針,不包括RAM,而後單片機從復位地址開始執行程序。
必須使RST引腳(9)加上持續兩個機器週期(即24個振盪週期)的高電平。單片機就執行復位操做。若是RST持續爲高電平,單片機就處於循環復位狀態。

問:復位的兩種啓動方式?
答:一、上電覆位:要求接通電源後,自動實現復位操做。
二、按鈕復位:要求接通電源後,單片機自動復位,而且在單片機運行期間,使用開關也能夠實現復位。

問:復位存在哪些問題?
答:
採用上電覆位:復位信號上電過程當中有掉電現象,可能會形成邏輯方面的錯誤致使相關芯片復位時間不夠、二次復位等、從而不可以正常工做起來。緣由:產生的復位信號給了幾個芯片用,致使這個復位信號的負載壓力比較大,驅動能力不夠從而往下調電,此現象經常出如今RC復位上。
復位信號上電前有毛刺與復位信號上電時有毛刺,可能會形成邏輯方面的錯誤致使相關芯片復位時間不夠。方案:加大上拉電阻的阻值。

問:復位電路有哪些?那種比較好?
答:微分學復位電路、積分學復位電路、比較型復位電路、看門狗型復位電路。四種方法都各有利弊,要根據自身需求來進行選擇。


中斷相關問題
問: 中斷的響應過程?
答:1)根據響應的中斷源的中斷優先級,使相應的優先級狀態觸發器置1;
2) 執行硬件中斷服務子程序調用,並把當前程序計數器PC的內容壓入堆棧,保護斷點,尋找中斷源。
3) 清除相應的中斷請求標誌位(串行口中斷請求標誌RI和TI除外);
4) 把被響應的中斷源所對應的中斷服務程序的入口地址(中斷矢量)送入PC,從而轉入相應的中斷服務程序。
5) 中斷返回,程序返回斷點處進行執行。
問:中斷優先級?
答:1)CPU同時接收到幾個中斷,先響應優先級別最高的中斷請求;
2) 正在進行的中斷,不能被新的同級或低級中斷請求所打斷;
3) 正在進行的低優先級中斷服務,能被高級中斷請求所中斷。
問:優先級由什麼決定?
答:中斷的優先級有兩個:查詢優先級與執行優先級
查詢優先級:查詢優先級是不能夠更改和設置的
一、 系統默認的優先級(邏輯上):
外部中斷0 > 定時器中斷0 > 外部中斷1 > 定時器中斷1 > 串行中斷
二、 由IP寄存器來決定優先級。當IP對應位置爲1時,該中斷級別提升。同爲1是按默認級別
問:中斷嵌套的好處與壞處?
答:中斷嵌套:CPU在處理級別較低的中斷過程當中,出現了級別較高的中斷請求。CPU中止執行低級別中斷,執行高級別的中斷處理程序後,再接着執行低級別的未被處理完的中斷程序。
使用中斷嵌套可使高優先級別的中斷獲得及時的響應和處理。
1) CPU與外部設備並行工做
2) 可以處理例外事件
3) 實現實時處理
4) 實現人機聯繫
5) 實現用戶程序與操做系統的聯繫
6) 實現多道程序並行執行
7) 在多處理機系統中,實現處理機之間的聯繫
壞處:高級別的中斷一直持續的話會影響低級別中斷的處理。
問:中斷在單片機中起到什麼做用?
答:中斷能實現快速的CPU與慢速的外設同步工做,實現數據傳送、故障檢測與處理、人機聯繫、多機系統、多道程序分時操做、實時信息處理等。

 

堆棧相關問題

問:堆棧的原理?
答:單片機RAM中,經常會指定一個專門的區域來存放某些特別的數據,它遵循先進後出、後進先出的原則。這個RAM區就是堆棧。堆棧是一種數據結構(數據項按序排列:堆,順序隨意。棧,後進先出)。使用一個稱做堆棧指針的專用寄存器指示前的操做位置,堆棧指針老是指向棧頂。
問:過程怎麼操做?
答:
1) 堆棧的創建(初始化)
2) 參數入棧(push)
3) 參數出棧(pop)(後進先出)

問:堆棧在單片機中有什麼做用?答:1)子程序調用和中斷服務時CPU自動將當前PC值壓入棧中保存,返回時自動將PC值彈棧。2) 保護現場/恢復現場3) 數據傳輸問:堆棧應用在什麼地方?答:子程序調用及中斷處理。問:存在什麼問題?怎麼解決?答:當須要大量地調用子程序或者保護數據,或者頻繁地調用中斷服務程序,這些都要佔用單片機內存。一旦堆棧空間超出了原先分配給它的內存空間,那就可能致使程序運行混亂以至崩潰。通常單片機上電時默認的堆棧區只有24個字節,假如用的堆棧大於24字節,就會出現兩種狀況:1) 堆棧數據破壞了用戶數據2) 不只可能致使運算結果出錯,更嚴重的是,它會致使程序跑飛甚至死機。解決方案:堆棧指令訪問內存的方式是間接尋址訪問,所以咱們能夠將單片機的堆棧區設定到單片機內存的後128字節(堆棧深度遠大於24字節)的內存空間內,這樣就能夠知足咱們的需求了。

相關文章
相關標籤/搜索