微控制器原理及應用學習筆記(一)
*在學習51之前,最先接接觸到的是Arduino,這個東西上手確實十分的簡單,可以做出來一些小玩意,但是它的效能終究是不夠強大,對於一些比較厲害的作品,用Arduino就顯得心有餘而力不足了,所以現在開始學習51和stm32。51的學習在大學本科階段,在學校課堂上學到的基本上是一些理論知識,這些東西也確實有一定的必要,畢竟掌握了都是自己的。所以說我準備對這些理論的知識進行一個整理。好,廢話不多說,現在切入正題。
對於一般的大學教材,前面兩章基本上都是對微控制器的一些基本的介紹,主要就是一些對微控制器硬體結構認識過程,這個主要是讓我們有個總體的認識,開始適應微控制器的學習。這些東西就忽略了吧。就從51系列微控制器的指令系統開始吧。這裡使用匯編語言編寫程式的。(以上都是廢話,自動忽略)*
51系列微控制器的指令系統
一:微控制器指令系統的概述
(1)總共111條指令
(單位元組指令49條,雙位元組指令45條,三位元組指令17條)
(一個機器週期、12個時鐘震盪週期指令64條,兩個機器週期、24個時鐘震盪週期指令45條、乘除兩條指令位4個機器週期)
(12MHZ晶振:機器週期位1us)
(2)51指令不區分大小寫
(3)指令格式:操作碼+運算元
二:微控制器的定址方式
(1)暫存器定址方式:MOV A,Rn
(2)直接定址方式:MOV A,40H
(定址範圍:第一:內部RAM的128個單元、第二:特殊功能暫存器SFR,除了以單元形式外還能用暫存器符號形式:即MOV A,80H==MOV A,P0)
(3)暫存器間接定址:(暫存器中放的是運算元地址、暫存器前面加標誌符@)例如:MOV R1,#40H MOV A ,@R1
(定址範圍:第一:訪問內部RAM、第二:片外資料儲存器的64k位元組的間接定址、第三:片外的資料儲存器的低256位元組、第四:堆疊區)
(4)立即定址方式:(運算元在指令中直接給出,需在運算元前面加上#,如果首位是A-F,前面還加0)例如:MOV A,#40H MOV A,#0FFH
(5)基址暫存器加變址暫存器間址定址方式:(以DPTR\PC作為基址暫存器,以累加器A作為變址暫存器)
(6)位定址方式:例如:MOV A,40H 把40H的值送到進位位C
(定址範圍:第一:內部RAM位定址區、第二:特殊功能暫存器中的可定址位)
(7)相對定址方式:(目的地址=轉移指令所在地址+轉移指令位元組數+rel(帶符號的8位二進位制數的補碼數))
三:51系列微控制器的指令系統及一般說明
(1)分類介紹:
資料傳送類(28條)
算數操作類(24條)
邏輯運算類(25條)
控制轉移類(17條)
位操作類 (17條)
(2)指令中符號的意義:
Rn
當前暫存器區8個工作暫存器
Ri
當前選中的暫存器區中可做間接定址暫存器的2個暫存器
Direct
直接地址,即8位內部資料儲存單元或者特殊功能暫存器地址
#data
包含指令中的8位立即數
#data
包含指令中的16位立即數
rel
相對轉移指令中的偏移量,8位帶符號的補碼數
DPTR
資料指標,可用作16位的資料地址暫存器
bit
內部RAM或者SFR中直接定址位
C(Cy)
addr11
11位目的地址 addr16
16位目的地址 @
間接定址暫存器 (x)x
中的內容 ((X))
由X定址的單元中的內容 ---->
箭頭右邊內容被箭頭左邊所替代
(持續更新中!!!)