唐 靜,趙常昊,翟麗杰
(1.重慶交通大學機電與車輛工程學院,重慶 400074;2.重慶金山科技集團有限公司,重慶 401120;3.渭南師范學院物理與電氣工程學院,陜西 渭南 714000)
“單片機C語言程序設(shè)計”課程教學改革
唐 靜1,趙常昊2,翟麗杰3
(1.重慶交通大學機電與車輛工程學院,重慶 400074;2.重慶金山科技集團有限公司,重慶 401120;3.渭南師范學院物理與電氣工程學院,陜西 渭南 714000)
單片機C語言程序設(shè)計是一門實踐性很強的課程,大多用Keil軟件編程。該文將理論教學和實踐教學有機結(jié)合,并通過實踐教學驗證理論教學的正確性。在教學中,把Keil軟件串口調(diào)試技術(shù)引入到單片機C語言程序設(shè)計課堂教學中,在單片機C語言程序中加入串口通信程序和printf語句,使用Keil軟件串口調(diào)試窗口顯示結(jié)果。此教學改革使理論知識更有說服力,同時也驗證了程序的正確性,使教學過程更加嚴謹。
單片機理論教學;單片機實踐教學;Keil軟件;串口調(diào)試技術(shù)
單片機C語言程序設(shè)計課程是一門實踐性很強的課程,在理論教學中引入實踐知識非常必要。具體有以下5種方法。1)引入proteus仿真軟件。由于proteus只能編寫匯編語言[1-4],僅能引入單片機匯編教學中,不適用于單片機C語言教學。2)引入proteus和Keil聯(lián)合仿真[5-8]。此方法為Keil軟件編譯程序,Proteus軟件顯示仿真結(jié)果。兩個軟件同時使用,較為復雜。3)學生參加應用競賽和應用網(wǎng)絡資源[9-10]。此方法是課外輔助教學,不是教師在課堂上使用的方法。4)單片機電路板制作或配合Keil軟件講解[11]。此方法是課外輔助教學,不是教師在課堂上使用的方法。同時,在論文中并沒有詳細寫到Keil怎么使用。5)將Keil和其調(diào)試技術(shù)引入教學中[12]。此方法僅大致講解了Keil軟件的編寫、編譯、調(diào)試,而沒有提及Keil的串口調(diào)試、串口顯示程序結(jié)果功能。
文中采用在單片機C語言程序設(shè)計教學中利用Keil軟件編寫、編譯程序,在Keil軟件的串口調(diào)試模式下驗證教材理論知識的方法。本方法實現(xiàn)的關(guān)鍵是在單片機C語言程序中加入printf語句、串口通信程序。其優(yōu)點是使用printf語句驗證單片機理論知識,使理論知識更有說服力。同時,在理論教學中使學生學會Keil軟件基本使用和調(diào)試方法。
1.1 Keil串口調(diào)試方法
在單片機C語言程序設(shè)計教學中使用Keil軟件的編譯、調(diào)試、串口功能。方法的實現(xiàn)包括:單片機的C語言主要功能實現(xiàn)、增加printf語句、增加串口通信程序、Keil串口調(diào)試功能的使用。
1.2 printf語法
1)printf的格式
printf()函數(shù)的調(diào)用格式為:printf("<格式化字符串>",<參量表>)。
printf詳細用法可從Keil軟件的幫助文件里查看。方法是打開Keil軟件,在Keil窗口點擊HelpuVision Help,打開help界面,然后在help界面”鍵入關(guān)鍵字進行查找“中輸入printf,即可顯示printf語法。
2)printf的C51編程方法注意事項
①加入函數(shù)庫stdio.h頭文件;②當單片機C程序使用printf語句時,要增加串口通信程序。這與標準VC直接使用printf在顯示器輸出結(jié)果不同;③單片機C語言程序要加“while(1);”語句。
2.1 C51的程序組成部分
C51的程序包括頭文件、全局變量聲明、宏定義、程序主函數(shù)、變量定義、函數(shù)聲明、子函數(shù)等。
2.2 Keil串口調(diào)試的程序編寫
以下面Cx51運算規(guī)則的關(guān)系表達式為例:
a=4,b=3,c=1;
d=((a>b)==c);
d結(jié)果為1。
程序如下,其命名為test1.c:
/*假定波特率9 600 bit/s,單片機晶振11.059 2 MHz*/
/*頭文件*/
#include
#include
/*宏定義*/
#define T1_INIT_VALUE 0xFD
/*定時器1初始值設(shè)定0xFD*/
/*程序主函數(shù)*/
void main(void)
{
/*變量定義*/
unsigned char a=4,b=3,c=1;
unsigned int d;
/*定時器和串口初始化并配置相關(guān)寄存器*/
SCON=0x50;//8位數(shù)據(jù),可變波特率
TMOD&=0x0f;//清除定時器1模式位
TMOD|=0x20; //設(shè)定定時器1為8位自動重裝方式
TL1=T1_INIT_VALUE;//設(shè)定定時初值
TH1=T1_INIT_VALUE;//設(shè)定定時器重裝值
ET1=0;//禁止定時器1中斷
TR1=1;//啟動定時器1
TI=1; //必須置高TI
d=((a>b)==c);
/*死循環(huán)*/
while(1);
}
Keil串口調(diào)試使用方法如下所述。
1)安裝Keil 4.0軟件。打開Keil 4.0軟件,新建一個工程。命令為project_New uVision Project,此時出現(xiàn)Create New Project窗口。在Create New Project窗口中定義工程保存地址和工程名。這里工程名取為test。點擊窗口保存按鍵。
2)彈出如圖1所示的窗口,選擇Atmel公司的AT89C51,點擊OK。
圖1 選擇單片機型號窗口
3)彈出如圖2所示的窗口,選擇否。
4)工程配置。選擇命令:工具欄 Project_Options for Target‘Target1’。彈出工程參數(shù)設(shè)置窗口。在窗口中,晶振改為11.059 2 MHz。由于使用Keil調(diào)試,不用生成hex,其他參數(shù)不用修改。
5)建立程序。命令File-New,出現(xiàn)Text1文檔。將程序test1.c拷貝進Text1文檔。程序保存,命名為test1.c。單片機C語言的后綴名.c。
圖2 加載8051啟動代碼選擇窗口
6)程序裝載進工程里。選擇Keil軟件窗口左側(cè)Source Group 1,點擊鼠標右鍵Add Files to Group‘Source Group 1,彈出如圖3所示的窗口,選擇剛編寫的程序test1.c,再點擊Add。
圖3 單片機C語言程序加載窗口
7)選擇編譯。選擇命令project—Build target。Build Output窗口顯示0 Error(s),0 Warning(s)。編譯成功。
8)進入調(diào)試模式。選擇Keil軟件工具欄Debug-Start/Stop Debug Session,選擇工具欄UART#1串口,如圖4所示。
圖4 Keil調(diào)試串口打開
9)在調(diào)試窗口左下側(cè),出現(xiàn)URAT#1窗口。10)點擊Debug-Run,得到程序test1.c的結(jié)果。如圖5所示。
圖5 程序運行串口1結(jié)果顯示
程序驗證結(jié)果:
當a=4,b=3,c=1;d=((a>b)==c);計算結(jié)果為1。程序驗證與計算結(jié)果一致。
當a=3,b=4,c=1;d=((a>b)==c);用程序驗證結(jié)果為0。程序驗證與計算結(jié)果一致。
本文對Keil串口調(diào)試技術(shù),得出以下兩點結(jié)論。
1)變量定義變化的情況。
test1.c的程序語句unsigned char a=4,b=3,c=1;改為unsigned int a=4,b=3,c=1;結(jié)果一致。
test1.c的程序語句unsigned int d;改為 unsigned char d;程序輸出結(jié)果錯誤,說明算數(shù)輸出格式要為整型。其他算數(shù)例子也可以用此例來做參考。
2)單片機C51編程和標準VC的用法不同。
當程序使用printf語句時,單片機的程序要加串口通信程序,才能實現(xiàn)顯示器輸出結(jié)果。而標準VC的輸出僅僅用printf就可以實現(xiàn)顯示器輸出結(jié)果。單片機的程序要加 “while(1);”而標準VC不用。
綜上分析,可以得出,在單片機C語言程序設(shè)計教學中使用Keil軟件串口調(diào)試技術(shù),使理論教學更有說服力,并使得學生在學習中接觸實際調(diào)試程序的方法。
[1]陳麒.Proteus仿真軟件在單片機教學中的應用[J].長沙鐵道學院學報(社會科學版),2013,14(3): 85-86.
[2]李志京.淺談pROTEUS仿真軟件在單片機教學中的應用[J].中國校外教育(中旬),2010(8):142.
[3]肖燕.單片機實踐課程教改策略[J].湖南農(nóng)機(學術(shù)版),2009,36(6):99-100.
[4]趙延明,周少武,謝道文.面向創(chuàng)新型人才培養(yǎng)的《單片機原理及應用》的教改研究[J].當代教育理論與實踐,2012,4(5):116-117.
[5]董建懷.談“單片機技術(shù)”課程教改[J].重慶科技學院學報(社會科學版),2008(11):202-203.
[6]翟紅云,藝春.Proteus和Keil聯(lián)合仿真在單片機教改實踐中的應用[J].廣西教育,2012(11):124-125.
[7]鄭小梅,擺銀龍,趙方.Proteus和Keil軟件在單片機教改中的應用[J].裝備制造技術(shù),2011(4): 224-226.
[8]吳湘蓮,樓平,張征宇.基于電子競賽的高職單片機課程教學改革與實踐[J].科技信息,2010(20):170.
[9]陳亮.單片機課程的教學改革[J].實驗室研究與探索,2008,27(9):121-123.
[10]彭治國,劉海浪,陳輝金.基于“卓越計劃”C語言程序設(shè)計實驗教改研究[J].裝備制造技術(shù),2012(7):225-227.
[11]許月琳,王勇.《單片機》課程教改的探討[J].機械職業(yè)教育,2006(3):39-40.
[12]侯殿有.單片機C語言程序設(shè)計[M].北京:人民郵電出版社,2010: 3-10.
Teaching Reform of C Language Programming of SCM
TANG Jing1,ZHAO Changhao2,ZHAI Lijie3
(1.School of Mechanical Electronic and Automobile Engineering,Chongqing Jiaotong University,Chongqing 400074,China;2.Jinshan Science and Technology,Chongqing 401120,China;3.Department of Physics and Electrical Engineering,Weinan Normal University,Weinan 714000,China)
C language programming of SCM is a course with strong practice,which is mainly programmed by Keil software.In teaching,theoretical teaching and practical teaching should be put together.And the practical teaching should verify the correctness of theoretical teaching.The C language of SCM mostly uses Keil software to program.Keil software is currently popular with microcontroller compiler software.When having a class of microcontroller C programming language design,Keil software serial debugging technique is to introduce into the teaching,and add serial communication program and the sentence of printf in SCM C programming.Then one can use the serial debug window of Keil software to display the results of theoretical knowledge in textbooks with C language of SCM.This reform strengthens persuasion of theoretical knowledge,verifies the correctness of the program and makes the teaching process more rigorous.
SCM theoretical teaching;SCM practical teaching;Keil software;serial debugging technology
G642.0
A
10.3969/j.issn.1672-4550.2016.05.047
2015-02-23;修改日期:2015-03-18
重慶交通大學實驗教學改革與研究基金資助項目(SYJ201315)。
唐 靜(1981-),女,碩士,實驗師,主要從事單片機,計算機語言的教學工作。