本文原創(chuàng)作者是陸雪 純老 師,一個寫得很好的教程分享給大家一起來學習,共同進步:
大家好,我是東華大學13屆,信息科學與技術學院自動化專業(yè)的陸雪 純,作為NUEDC實驗室的負責人之一,我制作這份關于簡易入門單片機msp430,和Altium Designer(配有庫)的視頻教程,希望對大家有所幫助!本視頻盡量針對剛接觸C語言的大一、大二的人,所以會講解較為底層詳細的東西。本教程中一些用【】符合框起來的名詞,請按照生活中常規(guī)的意思去理解,不要和微機里面的專業(yè)術語混淆。 本視屏教程分為兩個部分——MSP430入門部分和Altium Designer入門部分。在MSP430中,我將從寄存器和內部電路簡易原理開始教大家點亮流水燈、定時器中斷、端口中斷、ADC的使用,了解了寄存器和內部電路原理之后,所有單片機幾乎是如出一轍的,我個人認為,現(xiàn)在大多數(shù)人都直接選擇用庫函數(shù),但是新手直接用庫,他很難有一種入門感,甚至可能會一頭霧水、沒有概念,但如果你對于寄存器有了一定的了解,那么用其他芯片的一些函數(shù)庫就是手到擒來。我選擇MSP430G2553為我們教程中的開發(fā)板,因為我們學校信息系電子類的很多老師有這個開發(fā)板幾十套,我們NUEDC實驗室也有很多,所以我們東華大學的學生可以免費獲得,所以選擇它為教學板。我在百度云連接中提供所有的安裝包、教程中的例程、MSP430G2553的那個寶鏈接和授課稿以及其他相關有用的資料,并且用所教內容布置實訓任務來幫助你們學以致用。在Altium Designer中,我已經用它繪制了飛思卡爾杯-平衡攝像頭組的硬件電路板,已經打板并且投入使用,但教程中我只提供初代板(是我畫的第一塊板子,bug很多),進行修改,刪掉UART模塊作為你們的練習,并將原理圖、pcb的布線,用到的集成庫、安裝包和其他有用的教程等都放入百度云鏈接,并且教會大家如何用Message、board information、view configurations進行排查,避免弱智的錯誤發(fā)生。 ******************************************************************************* 首先把我資料包里的軟件安裝好,然后必須要搞到板子。 如果你沒有從老師和實驗室那里搞到開發(fā)板,那么我給你開發(fā)板淘寶鏈接,如果鏈接失效就直接搜索MSP430G2553,找那種有黑色方形紙盒子包裝的:見附件 打開文件后建立、保存工程的步驟,注意只要進行步驟一到四即可!!工程配置按照我給的工程的來!!!!! ******************************************************************************* 好,那廢話不多說!確保你手中有電腦,還有一塊MSP430G2553的開發(fā)板以及連接線,我們就開始吧!
在教你們控制單片機之前,我將先用五分鐘時間給你們講解一些相關的知識,這些知識我個人認為很重要,他能讓你們有個概念,避免一頭霧水的生搬硬套datasheet上的規(guī)則,這也是和網(wǎng)上千篇一律的教程不一樣的地方。
首先從小小二極管開始講起: 二極管,我們高中就接觸過,需要大于門坎電壓(如硅管門坎電壓為0.5v)之后,才會被導通,導通的時候,二極管的正向導通電壓是一個特定的值(硅管正向導通電壓為0.7v)。 假設3v及以上代表高電平,用“1”來表示,0.7及以下代表低電平,用“0”來表示。 而這小小的二極管,按照我們的設計,組合成邏輯電路,就可以進行各種計算,比如下圖的一個簡單電路,它由二極管和電阻組成: (這個電路具體工作原理,感興趣的同學可以點擊以下鏈接進一步了解 這個電路起到什么作用呢?如果A,B兩端都接入高電平“1”,那么Y端也會輸出一個高電平“1”,如果A,B兩端中至少有一端接入的是低電平“0”,那么Y端只會輸出一個低電平“0”。也就是說,這個電路已經能實現(xiàn)一個“與”計算功能了。 如果你忘了與運算是什么,沒關系,暫時不要去了解,并不影響我要講的東西。你只要記住,我講這個電路只想要指出以下五點: - 這個電路,它的功能,是實現(xiàn)與運算,也就是一種【計算】。我們用的電腦,手機,要學習的單片機,他們都是由數(shù)以百萬計的功能各異的電路,通過一定的規(guī)律組合、集成起來(所以為什么叫大規(guī)模集成電路,就是這個原理),來進行復雜的計算的(這就是為什么電腦也叫計算機),計算的過程,就是電腦運行的過程。
- 這個電路里,只有高電平“1”和低電平“0”的概念,所以說,大規(guī)模集成電路——電腦在運行的時候,里面只有高低電平的出現(xiàn),電腦只處理邏輯上的“0”和“1”,也就是我們學的二進制(一開始很多人都不知道學這個二進制干嘛,有何意義,01010的),也就是——機器語言,機器語言是用二進制代碼表示的,是計算機能直接識別和執(zhí)行的。
我們現(xiàn)在學的C語言,或者以后會學的C++,Java之類的各種語言,都必須要被翻譯成機器語言,計算機才能識別并執(zhí)行,那么什么東西才能把C語言之類的高級語言翻譯成機械語言呢?那就是我們很熟的軟件——編譯器了,也叫開發(fā)平臺、開發(fā)工具等。比如我們東華大學的學生學C語言的時候,用到的編譯器Microsoft Visual C++,圖標長這樣:界面長這樣: (后來我聽說現(xiàn)在大一大二的小朋友又換編譯器用DevC++了) 而我們控制的單片機MSP430也要用到相應的編譯器,我們的編譯器是 IAR for MSP430(安裝包百度云鏈接都有) - 在第2點中,我已經指出了高級語言、機器語言的概念,那么你們就應該明白一個道理:我們的C語言是高級語言,高級語言是高度封裝了的(舉個例子,你要裝修你的家,你設計房間里需要用到空調、煤氣灶等東西,你用高級語言寫明了你的思想“要用空調、煤氣灶”,然后你從商場購置來了空調和煤氣灶,可以直接使用,不需要你從元器件一點點自己做個空調、煤氣灶出來。類比到C語言里,高級語言就是C語言;空調、煤氣灶等就是你可以直接使用的printf()、scanf()函數(shù),而商場就是函數(shù)庫,所以你要包含這個庫函數(shù),也就是代碼里要寫上#include<stdio.h>),同樣的,我們操作單片機,我們的單片機型號是MSP430G2553,那我們就需要包含頭文件#include <MSP430G2553.h>
- I/0口(也叫I/0接口,或者輸入輸出管腳)的概念,I/O就是input、output的縮寫,輸入輸出的意思,I/O口就是輸入輸出的管腳(管腳英語:PIN)。用以控制外圍電路,什么是外圍電路?看看開發(fā)板上,左下角有兩個led燈,他們就是外圍電路,他們和相應的管腳相連(P1.0 P1.6)
- 仍然是在第二點中,我強調了:電腦在運行的時候,里面只有高低電平的出現(xiàn),電腦只處理邏輯上的“0”和“1”。也就是說,微觀上,在電腦的芯片里,程序、信息、指令的存儲方式,只能由高電平“1”,低電平“0”兩種量來表示,也就是二進制表示。
單片機采用的是TTL電平,標準TTL輸入高電平最小2V,輸出高電平最小2.4V,典型值3.4V,也就是說,在單片機當中,2v-5v就屬于高電平,常見高電平的典型值為3.4v;輸入低電平最大0.8V,輸出低電平最大0.4V,典型值0.2V。也就是說0v-0.8v屬于低電平,常見的典型低電平為0.2v。各個廠家生產的器件會有一些差異,高低電平的極限值會在標準值附近有一定的浮動。 這里,我引進一句話(不準確,但足夠幫你了解并使用單片機):控制單片機,就是配置寄存器,而寄存器,是寄存【指令】的器件。[錦囊1] 這句話具體含義是什么,就由接下來的“點亮LED燈”來具體說明吧!
點亮流水燈:可以直接打開百度云鏈接里配置好的工程文件,直接燒寫,熟練了之后,按照一開始給的教程鏈接,自己建立工程文件,自己配置函數(shù)。 我已經在之前說過,寄存器里面的指令以二進制存儲。 代碼中,等號左邊是寄存器,等號右邊是指令。 你要控制單片機去點亮外圍電路的一個LED燈(高電平可以點亮),在我們的MSP430開發(fā)板中,管腳P1.0連接的是LED1,我們就去試試點亮LED1,那么你具體要做的是使單片機的管腳P1.0去“輸出 高電平”,那么你需要做兩步: - 讓單片機連接著LED1的管腳P1.0的方向為輸出(P1DIR)
- 讓輸出的電平為高電平(P1OUT)
以上兩步,都有專門對應的寄存器。“控制單片機,就是配置寄存器,而寄存器,是寄存【指令】的器件。[錦囊1]” 那么這時候我們查閱MSP430G2553的user’s guide: 管腳的方向不是輸入就是輸出,管腳的狀態(tài)不是高電平就是低電平(AD,DA除外)[錦囊2] 接下來就是要配置工程,然后燒錄程序了!根據(jù)我上一次培訓的經驗來看,有很多學弟學妹想知道“我們?yōu)槭裁匆渲霉こ蹋俊边@里我就要稍微說一下單片機的工作的的一些原理了。 首先要指出的是,電腦和人腦不一樣,電腦里存儲的任何信息(比如你燒寫進去的程序、它自身計算的一些結果等)都是存放在存儲單元的,這些存儲單元都是有地址的,不同型號的單片機,內部的內存大小、存儲結構是不一樣的,所以你燒寫程序,程序按照不同單片機的不同要求,按照應該被存入的單元的地址存入。你使用C語言編寫或者C++編寫,它翻譯成機器語言的方式也不一樣(好比英語、法語書,肯定要對應的英語翻譯、法語翻譯來翻譯),所以【相應的規(guī)則】也不同,你必須要告訴你的編譯器你的芯片是什么型號,你用的什么語言寫的代碼,你的芯片和電腦是什么方式連接的(SWD還是JTAG還是JLINK還是別的什么)
下圖是工程配置 option中的選定單片機型號 選定你用的語言 我們開發(fā)板上是把仿真器也做進去了的,具體看圖靠上三分之一處,有個白色字體EMULATION,所以那一部分都是硬件仿真器部分,EMULATION是仿真器的意思,毫無疑問是硬件仿真,所以我們點選硬件仿真。而且我們的連接線也是USB連接線,所以連接選項connection按照圖勾選。 FET DEBUGGER中文翻譯就是硬件仿真 好了,配置完之后,點一下菜單欄中的綠色三角,就能燒錄了,你會發(fā)現(xiàn),LED0,亮了……亮了……這是成功的第一步,我在這個小例子里面和之前都把很多延伸的概念講了,這些概念,應用到其他各種型號的單片機,都應該可以觸類旁通。 **********************定時器********************** 那么,接下來就要講解定時器了。定時器是單片機中最重要的內容之一,你以后做的所有開發(fā),都不太可能脫離定時器。 那么,定時器是個什么東西呢?顧名思義,就是——“你定下來,過了200秒后,你要停下手頭的活,去做另一件事” 這句短短的話,包含了很多信息 1.“秒”,如同“時”、“分”一樣,是個計時單位,也是一個衡量的基準單位,你不能說,“你過了200之后,去做某事情,200什么?200秒還是200分鐘?”所以你要配置一個計時單位,要讓計數(shù)器“過了200個計時單位后,去做某事”,這里我們計時單位選的是1/12KHZ 秒 2.“200”是一個閾值,毫無疑問,我們程序里面寫的CCR0=12000就是說閾值是12000,當記到12000個計數(shù)單位后,就要進入中斷了 。也就是 1/12000 * 12000 =1秒 3.題目中的這句話還有一個隱藏條件,就是說,“你【知道】,你過了500秒后要去做某事”,如果你不知道你要去做某事,那就不會執(zhí)行中斷行為,所以要開啟中斷_EINT(); 計時,就是從使能中斷后開始的 4.手頭的活(main())、去做某事(中斷服務函數(shù)),這是兩個不同的行動,相當于你本來執(zhí)行的一個動作,現(xiàn)在要去執(zhí)行另一個動作(所以通過中斷向量表里記錄的中斷函數(shù)的首地址,跳倒中斷函數(shù)里,去執(zhí)行中斷服務函數(shù)) #pragma vector=TIMER0_A0_VECTOR//表示給這個向量表中的【定時器中斷】所對應的地址進行賦值,并賦值為函數(shù)void Timer_A (void)的首地址。 其中,關鍵字__interrupt則表示這個函數(shù)是【中斷服務函數(shù)】這種特殊函數(shù)。 5.你接完電話之后,回來繼續(xù)做你原來做的事情(中斷標志位清零,CPU一看,清零了,就認為中斷的任務已經完成,于是就退出了中斷) 這里講解一個時鐘的概念(真的是很基礎的知識點啊) 時鐘,顧名思義,是一種計時用具,我們可以用它來記錄時間。在單片機中,時鐘信號的表現(xiàn)形式為“頻率固定,只有高電平( )低電平( )的矩形波” 時鐘邊沿就是圖中的豎線,從低電平變成高電平的叫上跳沿,反之叫下跳沿。 單片機可以計算時鐘邊沿的個數(shù),比如時鐘的頻率為2Hz,那么時鐘的周期(圖中兩端紅線內的部分)就是0.5s,如果單片機記錄到了2個下跳沿,那么兩個下跳沿中的時間就是0.5s,如果記錄到了3個下跳沿,就是1s。這就是一種計時功能,所以叫做時鐘。 *********************端口中斷*********************** 1.你知道這個是電話鈴聲(init里的配置符合中斷的條件),且有電話鈴聲響的時候,“你要去”接電話(開啟中斷)(且中斷標志置1,一旦中斷標志位置1,CPU立刻去執(zhí)行中斷工作)
中斷標志說明的是“當前有中斷請求”,CPU如果要響應的話,還必須要使能這個中斷。也就是說工作的原理是:先判斷“中斷請求標志”再判斷這個中斷使能標志是否Enable了,或者講是否這兩個標志是否都有效了,系統(tǒng)才會響應這個中斷。 不開中斷使能,只是置位中斷標志的話,就像我們定義了一個用戶的bit標志,我們只是給它置1或者0,但我們從來不判斷它為1的時候做什么,為0的時候做什么是一樣的道理。
你的例子:如果允許T0中斷,你再人為的置T0中斷標志,CPU就會響應了。
2.手頭的活(main())、去接電話(中斷服務函數(shù)),這是兩個不同的行動,相當于你本來執(zhí)行的一個動作,現(xiàn)在要去執(zhí)行另一個動作(所以跳倒中斷函數(shù)里)
MSP430內部有一個中斷向量表,只要往里面對應向量(實際也是某地址)填相應函數(shù)的首地址,該中斷發(fā)生時,就能根據(jù)填入的函數(shù)首地址自動【跳轉到該函數(shù)】。
#pragma vector=這句話就是給這個中斷向量表進行賦值的。 #pragma vector=PORT1_VECTOR表示給這個向量表中的【外部端口中斷】所對應的地址進行賦值,并賦值為函數(shù)void Port_1(void)的首地址。 其中,關鍵字__interrupt則表示這個函數(shù)是【中斷服務函數(shù)】這種特殊函數(shù)。
3.你接完電話之后,回來繼續(xù)做你原來做的事情(中斷標志位清零,CPU一看,清零了,就認為中斷的任務已經完成,于是就退出了中斷) 按鍵消抖:百度百科 www點bubuko點com/infodetail-449501.html https://wenku.baidu.com/view/1623511552d380eb62946d55.html **********************ADC************************ 模擬量:表示某種待轉換量(可能是溫度、濕度)的程度的電壓值(可能是2.1v,也可能是1.3v)。 數(shù)字量:僅用0,1(高低電平)來表示的量。 采樣頻率: 《MSP430單片機基礎與實踐》 軟件部分告一段落,非常感謝大家看到這里,如果對你們有一些幫助,那我真的很高興。我個人(不謙虛的講),水平在實驗室里真的非常一般,而且我一開始邏輯性天賦都很差,硬咬牙才學會了這些,效率上和最終熟練度、掌握知識的深度廣度,與其他那些思維方式很好、邏輯性很強的人相比有很大差距,所以我水平的確有限,如果有錯誤,請直接彈幕,感謝大家不吝賜教!
視頻:https://www.bilibili.com/video/av13010650/
全部資料51hei下載地址:
一小時入門單片機軟件部分.zip
(5.31 MB, 下載次數(shù): 75)
2020-3-19 10:27 上傳
點擊文件名下載附件
|