了解单片机及单片机的控制原理和 DX516 的用法,控制一个 LED 灯的亮
學習內容
單片機基本原理,
如何使用 DX516 仿真器,
如何編程點亮和滅掉一個 LED 燈,
如何進入 KEILC51uV,
調試環境,
如何使用單步,斷點,全速,停止的調試方法。
——————————————————————————————————————————
單片機現在是越來越普及了,學習單片機的熱潮也一陣陣趕來,許多人因為工作需要或者個人興趣需要學習單片機。
可以說,掌握了單片機開發,就多了一個飯碗。
51 單片機已經有 30 多年的歷史了,在中國,高校的單片機課程大多數都是 51,而 51 經過這么多年的發展,也增長了許多的系列,功能上有了許多改進,也擴展出了不少分支。
而國內書店的單片機專架上,也大多數都是 51 系列。
可以預見,51 單片機在市場上只會越來越多,功能只會越來越豐富,在可以預見的數十年內是不可能會消失的。
作為一個初學者,如何單片機入門?需要那些知識和設備呢?知識上,其實不需要多少東西,會簡單的 C 語言,知道 51 單片機的基本結構就可以了。
一般的大學畢業生都可以快速入門,自學過這 2 門課程的高中生也夠條件。
就算你沒有學過單片機課程,只掌握了 C 語言的皮毛,通過本系列的教程,您也會逐漸的進入單片機的大門。
當然在學習的過程中,您還是必須多去研讀單片機書籍,了解他們的基本結構及工作方式。
——————————————————————————————————————————
下面以 51 為例來了解一下單片機是什么東西,控制原理又是什么?
在數字電路中,電壓信號只有兩種情況,高電平和低電平,用數字來記錄就是 1 和 0。
單片機內部的CPU,寄存器,總線等等結構都是通過 1 和 0 兩種信號來運作的,數據也是以 1 或者 0 來保存的。
單片機的輸入輸出管腳,也就是 IO 口,也是只輸出或識別 1 和 0 兩種信號,也就是高電平和低電平。
當單片機輸出一個或一組電平信號到 IO 口后,外部的設備就可以讀到這些信號,并進行相應操作,這就是單片機對外部的控制。
當外部一個或一組電平信號送到單片機的 IO 口時,單片機也可以讀到這些信號,并進行分析操
作,這就是單片機對外部設備信號的讀取。
當然實際的操作中,這些信號可能十分復雜,必須嚴格地按照規定的時間順序(時序)輸入輸出。
每種設備也都規定了自己的時序,只要都嚴格遵守,就可以控制任何設備,做出只要你想象得出的任何事情。
您可能會再問,我如何讓單片機去控制和分析外部設備呢?
答案是程序,您可以編寫相關的程序,并且把他們燒寫到單片機內部的程序空間,單片機在上電時,就會一步一步按照您寫的程序去執行指令,做您想做的事情。
在 51 標準芯片中,有 32 個輸入輸出 IO,分為 4 組,每組 8 個,分別為 P0 口,P1 口,P2 口,P3 口。
P1 口的 8 條腳就用 P1.0 至 P1.7 表示,其余類似。
51 就是用這 32 個口來完成所有外部操作的。
對于 51 的內部結構,如果您已經了解,那是最好;如果不懂,也可以先放下,在完成了本教程開始的幾個章節之后,您就會大有興趣,自己去尋找資料閱讀了。
當然,如果您希望成為一個優秀的單片機開發程序員,還是必須熟悉單片機的內部結構及工作原理,切不可偷懶!
在這一章,您將用程序去控制一個 LED 發光管的亮和滅。
你應該知道,LED 發光管在通過一定電流時亮,不通電就滅。
為了不讓 LED 通過太大的電流把它燒壞,我們還要串上限流電阻。
51 的 IO 是弱上拉的方式,在輸出高電平時,只能輸出幾十微安的電流到地,而在輸出低電平時,VCC 電源可以輸入幾十毫安
的電流到 IO。
一般 LED 需要 10 毫安左右電流點亮,我們就將 LED 接在電源 VCC 和 IO 口之間,中間串上電阻,當 IO 輸出低電平時,燈就亮了,反之,燈就滅了。
我們在這個程序里要控制的是 P1.0。
請參考一下我們將要使用的試驗板的電路圖,這個試驗板是在購買 dx516 仿真器是贈送的。
圖 1,試驗電路圖
圖 2:試驗板外觀圖
————————————————————————————————————————
下面介紹一下仿真器和仿真環境。
在實際的單片機學習和開發中,你可以用仿真器模擬一個 CPU 芯片,讓它按照您編寫的程序工作,并且進行調試,一步步排除程序的 bug,使程序正常工作。
程序工作正常后,您就可以用燒寫器將您編寫的程序燒入購買來的單片機芯片中,讓它自己去運行了。
要使用仿真器,還得有一個編譯調試的環境,這個環境是在計算機上運行的,我們就在計算機上編寫和調試程序,計算機和仿真器有連接,仿真器中的各種數據和程序,都可以從計算機上觀察到,并可以觀察變量,寫入變量的值,單步調試程序,在程序中設置斷點調試,全速運行,停止程序運行,等等操作。
我們使用世界上目前最先進的 keil C51 編譯調試環境,仿真器使用大蝦電子網(http://www.daxia.com )設計的 DX516 專業版仿真器,這個仿真器功能齊全,性價比最佳,是學習開發的好工具!
您可以在此頁 http://www.daxia.com/product/dx58/ 的資料下載欄目里下載到 keilc51 相關的中文說明資料,這些資料詳細地說明了如何使用 C51 編程和如何使用 keil uV2 環境調試,請在本章試驗完成或者試驗過程中,如果遇到不懂的地方,一定要抽時間閱讀!
您應該也可以在上面的網頁中找到下載破解版本的 keilc51 的辦法。
中國法律規定,在學習和研究工作中使用有版權的軟件是可以的,但是,如果您開發產品時,建議您還是去購買一個正版的軟件。
——————————————————————————————————————————
下面是 DX516 仿真器的使用介紹:
1、安裝
將仿真器和試驗板按圖 3 組裝好,串口線按照正確方向插入仿真器,另一端和電腦串口連接,請盡量使用計算機的硬串口。
仿真器底座左邊的跳線,請放在 EMB 這邊,以進入仿真狀態。
如果放在 RUN 這邊,將會進入脫機運行狀態。
晶振選擇跳線請放在 IN 這邊,以使用仿真器內部晶振,內部晶振更加可靠。
如果放在 OUT 這邊,則會使用外部的用戶板晶振。
圖 3 仿真器插在試驗板上
2、電源
因為用戶板使用電流不大,可以使用 usb 取電,usb 最大電流可以提供 500mA,將 usb 取電板插入電腦的 usb 口中。(實際應用中,如果用戶板使用電流超過 100mA,我們就建議使用外部電源)
3、啟動
在仿真器上電,或者按一下仿真器上面的按鈕時,仿真器會發出“嘀-”,表示仿真器正常啟動。
同時仿真器上面的燈閃爍一次,表示進入正常仿真狀態。
4、仿真設置
第一個設置:
C51 用戶請在您的代碼的 main()函數前面,加上一句:
char code dx516[3] _at_ 0x003b;如果以上設置你沒有做,在裝載過程中,仿真器會發出“嘀嘀嘀” 的三聲短聲報警,這時的仿真結果將可能不正確。
在我們的例程中,這句話已經加入了。
這句話并不會影響程序的工作,可以一直保留。
第二個設置:
請在硬件仿真設置選項中,選擇 serial interrupt,在前面打勾如果以上設置你沒有做,在裝載過程中,仿真器會發出“嘀-” 的一聲長聲報警,這時的仿真結果將可能不正確。
其余設置:
請選擇 use keil Monitor-51 Driver ,這樣才會使用硬件仿真
請選擇 load Application at start ,在啟動時直接裝載程序
請選擇 Go till main ,裝載后直接運行到 main 函數
請在硬件仿真設置選項中,選擇 115200bps 波特率,所有 cache 都可以不選,或者只選 cache code。
同時請選擇正確的串口號。
圖 4 仿真設置
好了,現在可以開始做試驗了,我們打開已經建立好的工程和編寫好的程序試驗。
順便還會學習一下程序調試的技巧。
至于如何建立一個新工程,請參考 C51 的幫助文件,或者自己摸索一下,WWW.DAXIA.COM 的 DX516專欄里也有“一步步教你如何第一次做…”的文章可以學習。
請雙擊 lessoncode01 目錄下的 lesson1.uv2,打開后界面如下:
圖 6:程序界面
這個界面是 uV3 的,和 uV2 是一樣用的。
點一下上圖第三排第 2 或者第 3 個按鈕(您的編譯器按鈕位置不一定在那個位置,自己找找),就可以看到編譯結果了。
上面顯示是 0errrs,0warnings,這是最佳的編譯結果,如果有 error,則無法進行下一步仿真,如果有 warning,一定要盡量消除,確實無法消除的,也要確認不會對程序造成影響,才進行下一步的仿真。
在編譯結果中,我們還可以看到有 data,xdata,code 等用了多少字節的報告,要注意您的單片機中是否有這么多的資源,如果不夠,將來燒片運行時就可能出現問題。
比如 AT89C51 的程序空間是 4K,xdata 如果沒有外擴就是 0 個,data 是 128 個。
超出這些范圍,程序就不能在 AT89c51 中運行。
不同的芯片有不同的容量,如SST89E516RD 就有 64K 程序,內部 768 字節 XDATA,還有 256 個字節的 data。
我們的例程中肯定都考慮了這些了,肯定不會超出,因為 DX516 仿真器是和 SST89E516RD 有同樣的容量的,將來自己開發時就要注意了。
下面我們故意把第 9 行的 P10 寫成 P11,點編譯,因為沒有預先定義 P11,所以就報告錯誤了,如下圖:
雙擊一下錯誤報告的那一行,窗口就也會跳到這一行,方便您進行修改。
好了,現在請把錯誤改回去,再編譯一次,出現報告正確了以后,下面開始仿真了。
點一下第二行第 5 個一個放大鏡里面一個 d 字母的按鈕,就可以進入仿真了,仿真器要事先連接好喲。
進入仿真后要退出仿真環境也是點這個按鈕。
注意,等會如果程序在正在全速運行時,仿真環境是不能直接退出的,得先點停止運行后,再點仿真按鈕才可以退出。
點進入仿真按鈕,程序開始裝載,PC 自動運行到了 main()停下,并指向了 main()函數的第一行。
下面是進入了仿真環境的截圖:
再順便把調試界面上的按鈕介紹一下:
圖 5:按鈕說明
進入仿真窗口后,如果出現的不是前面的源代碼窗口,而是夾有反匯編代碼的窗口,直接關掉這個窗口就會恢復到代碼窗口。
下次進入也會直接進入到源代碼窗口。
現在先試驗單步,點單步(兩個單步都可以,一般點單步跨過)。
可以看到燈亮了。
PC 指針也指向了下一個程序行。
圖:照片,燈亮
再點一下單步,PC 又走下一步,燈滅了。
再點一次,PC 走到掛起的程序行了,繼續點仍然在這一行。
這句指令其實就是使程序不斷地跳到自己這一行,別的什么也不做。
一般稱作程序掛起。
一般的實際應用中的程序是不會掛起的,一般是在 main 函數里做一個大循環,程序如下:
void main(void) // 主程序 { while(1) { P11=0;//亮燈P10=1;//滅燈} }請將 main 函數程序改為上面的代碼,我們下一步將試驗斷點的操作。
編譯后結果如下:
進入仿真后:
可以看到下面的提示窗口中顯示:“connected to Monitor-51 V.DX”,后面的 V.DX 就是已經連接到大蝦仿真器的提示了。
V.DX 是大蝦仿真器特有的標識。
在第 15 行雙擊一下,可以看到程序行左邊出現了一個紅方塊,這就是設置斷點,再雙擊一次,斷點就取消了。
如果程序在全速運行的過程中遇到斷點,就會自動停下來給你分析。
注意在進入仿真后,并且程序是停止狀態時,才可以設置或者取消斷點。
圖:設置了斷點
現在點全速運行,可以看到程序在斷點處停了下來,并且由于前一句指令剛剛執行了點燈,所以這時燈是亮著的。
現在在第 14 行設置斷點,并且取消上一個斷點。
圖:設置了另一個斷點
現在點全速運行,可以看到程序在斷點處停了下來,并且由于剛剛執行了滅燈,燈是滅著的。
好,現在試驗全速運行和停止。
把斷點取消,再點全速運行,可以看到燈是亮著的,但是不是很亮,這是由于程序是循環的,亮滅交替進行,亮的時間并不是全部的時間。
現在點停止,可以看到程序停止了,重復幾次進行全速和停止,可以發現每次停止的地方不一定是同一位置。
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的了解单片机及单片机的控制原理和 DX516 的用法,控制一个 LED 灯的亮的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 电子设计基础——电源的各项指标及测量方法
- 下一篇: 2017 年全国大学生电子设计竞赛试题—