單片機一些小總結
硬件篇
本文引用地址:http://m.butianyuan.cn/article/201612/324210.htmMCU:微控制器,就是指單片機這類,控制是mpu最根本的區(qū)別
MPU:微處理器,就是cpu這一類,用于處理數(shù)據(jù)和運算;當然單片機也有處理和運算能力,但是在能力上弱了很多,更大的區(qū)別是相比單片機體系不是那么完整,他更像是單片機的一個內核,缺少相應的ROM RAM之類,這些都要外擴
SOC:和mpu和接近 但是他在內核的基礎上集成了些外設,比如說S3C2440他在上面集成了USB接口TFT控制器等,ARM9等嵌入式芯片就是這類。
寄存器:這是初識單片機最常聽見的詞匯,其實他就是可以保持數(shù)據(jù)同時又能輸入新的狀態(tài)數(shù)據(jù),51的很多寄存器就是從RAM中劃分出來的一些單元,對他進行數(shù)值的設置可以得到不同的反應;單片機中通過對寄存器設置來得到所需要的功能。
RAM,ROM:ROM程序存儲器,RAM臨時數(shù)據(jù)存儲器,程序是下載到ROM內,再有cpu讀取到RAM,運算的過程當中的中間數(shù)據(jù)也是保存在RAM中,RAM的大小會對運算速度有很大的影響,類似于電腦內存,如果內存條過小的話cpu就必須在內存數(shù)據(jù)滿了的時候去讀取新的數(shù)據(jù)到里面,很大程度降低了速度。
API函數(shù):提供了對硬件或者是操作系統(tǒng)進行訪問的一些接口,其實就是一些對對象操作或反饋狀態(tài)對象當前工作狀態(tài)的函數(shù)和變量之類的東西。
晶振:類似于人類的心臟,他給單片機提供著一個有規(guī)律的周期,如同心臟間歇性的跳動推動血液的流動。他的頻率快慢決定了時鐘周期,和機械周期。
時鐘周期:一個時鐘脈沖所需要的時間。在計算機組成原理中又叫T周期或節(jié)拍脈沖。是CPU和其他單片機的基本時間單位。
機器周期:通常用從內存中讀取一個指令字的最短時間來規(guī)定CPU周期(機器周期),也即CPU完成一個基本操作所需的時間。
指令周期:指令周期是執(zhí)行一條指令所需要的時間,一般由若干個機器周期組成,是從取指令、分析指令到執(zhí)行完所需的全部時間。
推挽、開漏、強上拉、弱上拉、強下拉、弱下拉輸出:這些都是單片機IO口的工作模式,不同的外設對應不同的工作模式,比如不用驅動芯片驅動點陣的話就必須把io口設置成推挽模式,而對于無線芯片不加上拉電阻的話就要選擇上拉或者是推挽,一般模式的話無線芯片不能正常工作,而開漏好像是用與io口作為輸入口,因為去阻值會很大所以通過他的電流會很小,功率損失也可以很好地控制
串口:串行接口SerialInterface是指數(shù)據(jù)一位位地順序傳送,其特點是通信線路簡單,只要一對傳輸線就可以實現(xiàn)雙向通信
并口:并行接口中各位數(shù)據(jù)都是并行傳送的,它通常是以字節(jié)(8位)或(16位)為單位進行數(shù)據(jù)傳輸。
控制器和驅動器:驅動器顧名思義就是驅動硬件工作的電路,而控制器是控制其如何工作,就比如S3C2440內部集成了TFT控制器,但是光控制器無法讓TFT工作的,在TFT上有驅動他工作的電路,拆過舵機的就知道里面就是個普通的直流電機和塊電路板,那電路板就是驅動器,而讓舵機工作則需要單片機輸出PWM(相當于控制器)
字節(jié)(Byte):字節(jié)是指一小組相鄰的二進制數(shù)碼。通常是8位作為一個字節(jié)。字節(jié)是通過網(wǎng)絡傳輸信息(或在硬盤或內存中存儲信息)的單位。網(wǎng)絡上的所有信息都是以“位”(bit)為單位傳遞的,一個位就代表一個0或1,每8個位(bit)組成一個字節(jié)(Byte)。
算法:算法以我的理解就是完成某項工作或者是某項運算所采用的處理方式,比如搬運物品的話可以采用手搬,或者是小推車推運,同一問題算法多種多樣,效率也不敬相同;
驅動:驅動是在操作系統(tǒng)與硬件之間搭建橋梁,使硬件正常工作的一種軟件程序。如果廣泛的認為就是讓硬件發(fā)揮作用正常工作的程序的話,那單片機流水燈之類的也都是驅動程序。
時序電路:實施一連串邏輯操作,在任一給定瞬時的輸出值取決于其輸入值和在該瞬時的內部狀態(tài),且其內部狀態(tài)又取決于緊鄰著的前一個輸入值和前一個內部狀態(tài)的器件。
組合電路:組合邏輯電路由最基本的的邏輯門電路組合而成,輸出值只與當時的輸入值有關,即輸出惟一地由當時的輸入值決定。
軟件
于51開始學習單片機的人的話最早書寫的應該就是#include
#include就是文件包含命令,51用到的頭文件很少,而且很多都是系統(tǒng)定義的,當你學習ARM就會發(fā)現(xiàn)要有很多的頭文件,而且很多都是自己定義的,這個時候我們必須知道文件的路徑,把他添加到調用它的c文件當中,如果找不到這個文件就會報錯,添加的方法有兩種,一種是在編譯器中設置(不是所以編譯器有效),還有是在包含命令中加入路徑(詳解請看#include的使用)。而reg51.h這個文件里面把各個寄存器和可以位操作的寄存器的各位定義一下。所以單片機芯片要操作都要對寄存器進行定義,s3c2440也有自己的寄存器定義文件2440addr.h,不過S3c2440同51單片機不同的是要包含啟動代碼,初始化s3c2440。否則2440無法工作
++a與a++的區(qū)別在于前一個是自加1之后參與運算,而另一個是參與運算之后加1,也就是說a++的話,在那一行代碼中,a的值是不變的,下一行才發(fā)生變化,++a則是在那一行已經(jīng)發(fā)生了變化。
剛從8 bit單片機玩32 bit會很不不習慣,原因是操作方式變化了,之前的51單片機的話改變寄存器直接位操作或者是寄存器操作賦值就好了,但是32位處理器就不同了,因為位有32位那么多,不可能清楚每一位應該操作的數(shù)值,直接賦值務必造成誤操作。
X bit置1:(寄存器標示符)=(寄存器標示符)||(1< X bit置0:(寄存器標示符)=(寄存器標示符)&& ~(1< 指針在c中是個很重要的部分,其實也不要把它看得太難,他其實就是一個存取地址數(shù)據(jù)的一個量,可以通過*號讀寫他地址當中的內容,也可以通過&給他取新的地址,在沒有對指針取地址的情況下不要對地址里的內容進行操作,因為沒有取地址的情況下指針所指的地址是隨機的,在草率操作的情況下可能會破壞之前的數(shù)據(jù)導致出錯。指針最常見的就是對數(shù)組進行操作了,當指針指向的是一維數(shù)組的時候指針變量每次自加1之后就指向都是原來數(shù)的下一個(需要注意的是指針如果指向的是數(shù)組的最后一位的時候再加1的話他不會又跑到第一位,而是未知的數(shù)據(jù),這時候需要做的是重新取地址),對數(shù)組操作的方法除了不斷自加1的方法還有*(p+5),*p表示指向的數(shù)組的那位,*(p+5)表示在*P的基礎上移動5個數(shù)。二維也類似,可以通過自加操作,和*(*(p+x)+y)的方式操作,指針除了在數(shù)組上用還可以當函數(shù)的參數(shù)啊,指向函數(shù)啊,詳細還是看譚浩強的c經(jīng)典教程
評論