武芳+蔣汝根+朱璇
摘 要 在單片機(jī)學(xué)習(xí)過(guò)程中,初學(xué)者經(jīng)常會(huì)遇到各種問(wèn)題,結(jié)合實(shí)例介紹用Keil和Proteus進(jìn)行聯(lián)調(diào)來(lái)解決問(wèn)題的過(guò)程。
關(guān)鍵詞 Keil;Proteus;單片機(jī)學(xué)習(xí)
中圖分類(lèi)號(hào):G712 文獻(xiàn)標(biāo)識(shí)碼:B
文章編號(hào):1671-489X(2015)20-0047-02
An Application Example of Combining Keil with Proteus in Tea-
ching of Single Chip Microcomputer//WU Fang, JIANG Rugen, ZHU Xuan
Abstract In the learning process of single chip microcomputer, beginners often encounter all sorts of problems, the paper introduces an examples combining Keil with Proteus to solve the problems.
Key words Keil; Proteus; single chip microcomputer study
1 前言
單片機(jī)是一種功能強(qiáng)大的芯片,在日常生活中,隨處可見(jiàn)由單片機(jī)作為核心器件的電子產(chǎn)品。因此,學(xué)習(xí)單片機(jī)也成為一項(xiàng)技能。如何學(xué)好單片機(jī)?有兩款軟件是單片機(jī)學(xué)習(xí)者的“必備武器”:Keil和Proteus。
Keil是美國(guó)Keil Software公司出品的51系列兼容單片機(jī)C語(yǔ)言軟件開(kāi)發(fā)系統(tǒng),它的源文件既可以是C語(yǔ)言,也可以是匯編語(yǔ)言,但與匯編相比,C語(yǔ)言在功能、結(jié)構(gòu)性、可讀性、可維護(hù)性等方面有明顯的優(yōu)勢(shì),更適合初學(xué)者和高職類(lèi)院校使用。
Proteus軟件是英國(guó)Lab Center Electronics公司出版的EDA工具軟件,它不僅具有其他EDA工具軟件的仿真功能,還滿(mǎn)足從原理圖布圖、代碼調(diào)試到單片機(jī)與外圍電路的協(xié)同仿真。Proteus簡(jiǎn)單易學(xué),對(duì)單片機(jī)初學(xué)者來(lái)說(shuō)是一款極好的仿真軟件,也適用于高校的單片機(jī)教學(xué)。
2 Keil和Proteus聯(lián)調(diào)實(shí)例
如何將兩者的功能發(fā)揮到極致呢?本文以在教學(xué)中遇到的一個(gè)實(shí)例來(lái)介紹Keil和Proteus聯(lián)調(diào)給單片機(jī)學(xué)習(xí)帶來(lái)的便捷。
實(shí)驗(yàn)內(nèi)容 利用AT89C51單片機(jī)和DAC0832完成一個(gè)正弦波發(fā)生器,通過(guò)虛擬示波器來(lái)檢測(cè)產(chǎn)生的正弦波信號(hào)。一初學(xué)者的部分實(shí)例源程序:
#include “reg51.h”
void delay();
unsigned char code tab[128]=
{64,67,70,73,76,79,82,85,88,91,94,96,99,102,104,106,
109,111,113,115,117,118,120,121,123,124,125,126,126,
127,127,127,127,127,127,127,126,126,125,124,123,121,
120,118,117,115,113,111,109,106,104,102,99,96,94,91,
88,85,82,79,76,73,70,67,64,60,57,54,51,48,45,42,39,
36,33,31,28,25,23,21,18,16,14,12,10,9,7,6,4,3,2,1,
1,0,0,0,0,0,0,0,1,1,2,3,4,6,7,9,10,12,14,16,18,21,23,
25,28,31,33,36,39,42,45,48,51,54,57,60};[1]
void main()
{
char i;
P1 = 0xff;
while(1)
{
for(i=0;i<128;i++)
{
P1 = tab[i];
delay();
}
}
}
仿真結(jié)果 希望得到一個(gè)連續(xù)的正弦波形如圖1(a)所示,而仿真運(yùn)行后虛擬示波器顯示如圖1(b)所示。
處理方法:Keil和Proteus聯(lián)調(diào) 對(duì)于C語(yǔ)言基礎(chǔ)不太好的初學(xué)者來(lái)說(shuō),很難找出問(wèn)題的根源所在,這時(shí)候就可以通過(guò)Keil和Proteus的聯(lián)調(diào)來(lái)解決。兩種軟件的安裝方法和兩軟件動(dòng)態(tài)鏈接庫(kù)的關(guān)聯(lián)在這里就不再贅述,具體的處理方法如下。
1)設(shè)置:在Keil工程中點(diǎn)擊“Project”,打開(kāi)“Options for target‘Target 1”對(duì)話(huà)框,選中“Debug”,設(shè)置如圖2所示。
點(diǎn)擊后面的settings,本機(jī)聯(lián)調(diào):host為172.0.0.1,
port為8000。
Proteus的設(shè)置:運(yùn)行Proteus的ISIS,點(diǎn)擊菜單“DEBUG”,使“use remote debugger monitor”選中。
2)Keil和Proteus聯(lián)調(diào)。如圖3所示,點(diǎn)擊Keil中的調(diào)試按鈕1;分別按2~5設(shè)置,打開(kāi)觀(guān)察窗口和端口,設(shè)置好要監(jiān)測(cè)的變量;根據(jù)需要點(diǎn)擊按鈕6中的調(diào)試圖標(biāo)。開(kāi)始Proteus和Keil的聯(lián)調(diào)。
觀(guān)察watch中的i值,發(fā)現(xiàn)i變化到127后,再加1并沒(méi)有變化為128,而是變化到了-128!找到問(wèn)題癥結(jié)!將i的類(lèi)型修改變unsigned char之后,仿真結(jié)果正確,如圖1(a)所示。
問(wèn)題解析 在C中,默認(rèn)的基礎(chǔ)數(shù)據(jù)類(lèi)型均為signed[2]。
在內(nèi)存中,char與unsigned char存儲(chǔ)空間相同,為一個(gè)字節(jié);兩者的區(qū)別是:char的最高位為符號(hào)位,表示范圍為-128~127;unsigned char無(wú)符號(hào)位,表示范圍為0~255[3]。在實(shí)際使用過(guò)程中,在普通的賦值、讀寫(xiě)文件和網(wǎng)絡(luò)字節(jié)流沒(méi)有區(qū)別,但顯示會(huì)出現(xiàn)不一樣的情況。在表示字節(jié)時(shí),建議使用unsigned char類(lèi)型。
3 結(jié)語(yǔ)
在單片機(jī)學(xué)習(xí)過(guò)程中,往往會(huì)出現(xiàn)程序運(yùn)行的結(jié)果與期望的不同,而一時(shí)又找不到問(wèn)題癥結(jié)所在,在出現(xiàn)問(wèn)題的關(guān)鍵時(shí)刻,運(yùn)用Proteus和Keil的聯(lián)調(diào)可以輕松找到答案。本文實(shí)例不僅讓初學(xué)者了解了程序的運(yùn)行過(guò)程,也用一種更直觀(guān)的方式向初學(xué)者展示了不同數(shù)據(jù)類(lèi)型的取值范圍和對(duì)程序的影響,加深了初學(xué)者對(duì)數(shù)據(jù)類(lèi)型的認(rèn)識(shí),提高了對(duì)單片機(jī)的學(xué)習(xí)興趣。這種方式的學(xué)習(xí)比單純的理論講解更有效,相信初學(xué)者在今后不會(huì)再犯同樣的錯(cuò)誤。
參考文獻(xiàn)
[1]陳貴銀.單片機(jī)原理及接口技術(shù)[M].北京:電子工業(yè)出版社,2011:234.
[2]劉建清.從零開(kāi)始學(xué)單片機(jī)C語(yǔ)言[M].北京:國(guó)防工業(yè)出版社,2006:79.
[3]周立功.Keil C51使用幫助[EB/OL].[2003-08-17].
www.eTuni.com.endprint