武芳+蔣汝根+朱璇


摘 要 在單片機(jī)學(xué)習(xí)過程中,初學(xué)者經(jīng)常會遇到各種問題,結(jié)合實(shí)例介紹用Keil和Proteus進(jìn)行聯(lián)調(diào)來解決問題的過程。
關(guān)鍵詞 Keil;Proteus;單片機(jī)學(xué)習(xí)
中圖分類號:G712 文獻(xiàn)標(biāo)識碼:B
文章編號: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)大的芯片,在日常生活中,隨處可見由單片機(jī)作為核心器件的電子產(chǎn)品。因此,學(xué)習(xí)單片機(jī)也成為一項(xiàng)技能。如何學(xué)好單片機(jī)?有兩款軟件是單片機(jī)學(xué)習(xí)者的“必備武器”:Keil和Proteus。
Keil是美國Keil Software公司出品的51系列兼容單片機(jī)C語言軟件開發(fā)系統(tǒng),它的源文件既可以是C語言,也可以是匯編語言,但與匯編相比,C語言在功能、結(jié)構(gòu)性、可讀性、可維護(hù)性等方面有明顯的優(yōu)勢,更適合初學(xué)者和高職類院校使用。
Proteus軟件是英國Lab Center Electronics公司出版的EDA工具軟件,它不僅具有其他EDA工具軟件的仿真功能,還滿足從原理圖布圖、代碼調(diào)試到單片機(jī)與外圍電路的協(xié)同仿真。Proteus簡單易學(xué),對單片機(jī)初學(xué)者來說是一款極好的仿真軟件,也適用于高校的單片機(jī)教學(xué)。
2 Keil和Proteus聯(lián)調(diào)實(shí)例
如何將兩者的功能發(fā)揮到極致呢?本文以在教學(xué)中遇到的一個(gè)實(shí)例來介紹Keil和Proteus聯(lián)調(diào)給單片機(jī)學(xué)習(xí)帶來的便捷。
實(shí)驗(yàn)內(nèi)容 利用AT89C51單片機(jī)和DAC0832完成一個(gè)正弦波發(fā)生器,通過虛擬示波器來檢測產(chǎn)生的正弦波信號。一初學(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) 對于C語言基礎(chǔ)不太好的初學(xué)者來說,很難找出問題的根源所在,這時(shí)候就可以通過Keil和Proteus的聯(lián)調(diào)來解決。兩種軟件的安裝方法和兩軟件動(dòng)態(tài)鏈接庫的關(guān)聯(lián)在這里就不再贅述,具體的處理方法如下。
1)設(shè)置:在Keil工程中點(diǎn)擊“Project”,打開“Options for target‘Target 1”對話框,選中“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è)置,打開觀察窗口和端口,設(shè)置好要監(jiān)測的變量;根據(jù)需要點(diǎn)擊按鈕6中的調(diào)試圖標(biāo)。開始Proteus和Keil的聯(lián)調(diào)。
觀察watch中的i值,發(fā)現(xiàn)i變化到127后,再加1并沒有變化為128,而是變化到了-128!找到問題癥結(jié)!將i的類型修改變unsigned char之后,仿真結(jié)果正確,如圖1(a)所示。
問題解析 在C中,默認(rèn)的基礎(chǔ)數(shù)據(jù)類型均為signed[2]。
在內(nèi)存中,char與unsigned char存儲空間相同,為一個(gè)字節(jié);兩者的區(qū)別是:char的最高位為符號位,表示范圍為-128~127;unsigned char無符號位,表示范圍為0~255[3]。在實(shí)際使用過程中,在普通的賦值、讀寫文件和網(wǎng)絡(luò)字節(jié)流沒有區(qū)別,但顯示會出現(xiàn)不一樣的情況。在表示字節(jié)時(shí),建議使用unsigned char類型。
3 結(jié)語
在單片機(jī)學(xué)習(xí)過程中,往往會出現(xiàn)程序運(yùn)行的結(jié)果與期望的不同,而一時(shí)又找不到問題癥結(jié)所在,在出現(xiàn)問題的關(guān)鍵時(shí)刻,運(yùn)用Proteus和Keil的聯(lián)調(diào)可以輕松找到答案。本文實(shí)例不僅讓初學(xué)者了解了程序的運(yùn)行過程,也用一種更直觀的方式向初學(xué)者展示了不同數(shù)據(jù)類型的取值范圍和對程序的影響,加深了初學(xué)者對數(shù)據(jù)類型的認(rèn)識,提高了對單片機(jī)的學(xué)習(xí)興趣。這種方式的學(xué)習(xí)比單純的理論講解更有效,相信初學(xué)者在今后不會再犯同樣的錯(cuò)誤。
參考文獻(xiàn)
[1]陳貴銀.單片機(jī)原理及接口技術(shù)[M].北京:電子工業(yè)出版社,2011:234.
[2]劉建清.從零開始學(xué)單片機(jī)C語言[M].北京:國防工業(yè)出版社,2006:79.
[3]周立功.Keil C51使用幫助[EB/OL].[2003-08-17].
www.eTuni.com.endprint