单片机实验1(Kiel-软件的使用和C程序调试)电子版本.ppt
单片机原理与接口技术实验单片机原理与接口技术实验 实验一:实验一:Kiel 软件的使用和软件的使用和C程序调试程序调试一、实验目的:一、实验目的:1、通过实验学会用、通过实验学会用C语言进行程序的设计。语言进行程序的设计。2、学会应用、学会应用keil-uvision集成调试软件对集成调试软件对C语言语言程序进行调试。掌握程序进行调试。掌握C语言程序的编辑、编译、语言程序的编辑、编译、运行、单步调试的过程和通过寄存器、存储器检运行、单步调试的过程和通过寄存器、存储器检查程序运行结果查程序运行结果(ji gu)是否正确的方法。是否正确的方法。第一页,共18页。二、二、kerl-uvision集成调试集成调试(dio sh)软件的操作软件的操作 操作步骤:操作步骤:1、双击桌面上的、双击桌面上的UV2快捷图快捷图 ,启动软件。,启动软件。第二页,共18页。2 2、点击、点击P P工程工程(gngchng)N(gngchng)N新建工程新建工程(gngchng)(gngchng)输入文件名(如输入文件名(如A1A1)并点击保存。)并点击保存。第三页,共18页。3 3、出现、出现(chxin)CPU(chxin)CPU屏幕,选屏幕,选AtmelAtmel AT89C51 AT89C51 点点确定。屏幕左上方出现确定。屏幕左上方出现(chxin)(chxin)图标目标图标目标1 1。第四页,共18页。4 4、点击、点击(din j)(din j)文件文件 新建文件新建文件 出现程序输入出现程序输入区。区。第五页,共18页。输入输入(shr)C(shr)C语言程序:语言程序:#include#includevoid main(void)void main(void)int int x,y,sum,sub,mul,div;x,y,sum,sub,mul,div;x=5;x=5;y=8;y=8;sum=x+y;sum=x+y;sub=x-y;sub=x-y;mul=x*y;mul=x*y;div=y/x;div=y/x;while(1);while(1);输入后点击文件中的保存,输入输入后点击文件中的保存,输入程序名程序名(例如例如S1.C)并选择存入的盘并选择存入的盘(如如D:)点击保存。点击保存。程序名一般不超过程序名一般不超过(chogu)6个个字母数字字母数字,以字母打头,以字母打头,C语言要加语言要加尾缀:尾缀:.C。如果程序已经存在,可点击文件如果程序已经存在,可点击文件 打开文件,找到需要选择的文件。打开文件,找到需要选择的文件。第六页,共18页。5 5、点击(图标)目标、点击(图标)目标1 1前的前的“+”“+”号,出现(图标)源程序号,出现(图标)源程序组组1 1,选中并点右键,选,选中并点右键,选“文件增加文件增加(zngji)(zngji)到源程序组到源程序组1”1”,选择文件类型为,选择文件类型为C C,再选要输入的程序,再选要输入的程序 S1.C S1.C,点,点ADDADD(加入)(加入),点确定。,点确定。此时点击源程序组此时点击源程序组1 1可以看到要输入的程序可以看到要输入的程序S1.C S1.C。第七页,共18页。在对程序编译前要进行在对程序编译前要进行(jnxng)(jnxng)以下的设置:以下的设置:1 1、单击、单击“project”“project”(工程)菜单,在下拉菜单中单(工程)菜单,在下拉菜单中单击击“options for target 1”“options for target 1”(目标(目标 目标目标11属性),属性),再单击再单击“target”“target”(目标),将输入仿真器的晶振频率改(目标),将输入仿真器的晶振频率改为为12.0MHz12.0MHz。2 2、在目标、在目标 目标目标11属性属性 页面下选择页面下选择output(output(输出输出),点击,点击“Create HEX file”“Create HEX file”(产生(产生hexhex文件)的选项文件)的选项,以以便汇编后生成便汇编后生成HEXHEX代码代码,供编程器使用。供编程器使用。3 3、对于软件仿真,在目标、对于软件仿真,在目标 目标目标11属性属性 页面下点页面下点“Debug”“Debug”(调试),再选(调试),再选“S“S 使用软件仿真器使用软件仿真器”,”,同时选同时选中中“加载代码到仿真器加载代码到仿真器”和和“运行到运行到main0”,main0”,然后点击然后点击“确定确定”。第八页,共18页。6 6、程序的编译和链接、程序的编译和链接 依次点击屏幕上方左下角的编译和建造目标图标依次点击屏幕上方左下角的编译和建造目标图标 对文件进行编译和链接,观察左下角的调试对文件进行编译和链接,观察左下角的调试程序信息显示程序信息显示(xinsh)(xinsh),如有错可根据该栏提示的信息进,如有错可根据该栏提示的信息进行修改,修改后要重新保存和编译行修改,修改后要重新保存和编译,直到无错误提示。直到无错误提示。第九页,共18页。7 7、点击调试、点击调试(dio sh)(dio sh)图标图标 ,进入程序调试,进入程序调试(dio sh)(dio sh)画面,此时黄箭头所指是将要执行的指令。画面,此时黄箭头所指是将要执行的指令。第十页,共18页。(1 1)调试界面分为)调试界面分为4 4部分:部分:左上角为左上角为REGREG和系统显示区和系统显示区,可观察寄存器的变可观察寄存器的变化;化;左下角为调试程序时的信息左下角为调试程序时的信息(xnx)(xnx)显示;显示;右上角为程序编写和修改区;右上角为程序编写和修改区;右下角存储器的显示区。右下角存储器的显示区。第十一页,共18页。(2 2)存储区设置)存储区设置:如果未出现存储区,设置方式如下:点如果未出现存储区,设置方式如下:点击击:V:V视图视图 M M存储器窗口,右下角会出现存储器窗口,右下角会出现4 4个存储区:存储个存储区:存储器器#1-#4#1-#4。可以。可以(ky)(ky)根据需要设置。通常设置程序存储区、根据需要设置。通常设置程序存储区、内部数据存储区、外部数据存储区。内部数据存储区、外部数据存储区。点击存储器点击存储器1#1#,在上面地址栏中输入,在上面地址栏中输入C:0000HC:0000H,存储器,存储器1#1#被设计为程序存储器,地址从被设计为程序存储器,地址从0000H0000H开始。开始。点击存储器点击存储器2#2#,在上面地址栏中输入,在上面地址栏中输入D:0000HD:0000H,此时存储,此时存储器器2#2#被设计为内部数据存储器,地址从被设计为内部数据存储器,地址从0000H0000H开始。开始。点击存储器点击存储器3#3#,在上面地址栏中输入,在上面地址栏中输入X:0000HX:0000H,此时存储,此时存储器器3#3#被设计为外部数据存储器,地址从被设计为外部数据存储器,地址从0000H0000H开始。开始。第十二页,共18页。8、运行程序、运行程序 点击点击 (左图标)为全速运行或停止程(左图标)为全速运行或停止程序运行(右图标);如果希望单步执行(即一条一条的执行序运行(右图标);如果希望单步执行(即一条一条的执行指令,以便调试程序)可点击指令,以便调试程序)可点击 图标,每点击一次黄箭头会图标,每点击一次黄箭头会向下移动向下移动(ydng),指向下一条指令。,指向下一条指令。第十三页,共18页。9 9、对、对C C语言程序,调试时需打开语言程序,调试时需打开(d ki)(d ki)以下窗口:以下窗口:(1 1)变量的查询:)变量的查询:打开打开(d ki)V(d ki)V视图:视图:W W监视监视&调用堆栈窗,在局部栏调用堆栈窗,在局部栏中或监视中或监视#1#1、2 2中观察结果。中观察结果。(2 2)用)用scanfscanf输入,或用输入,或用printfprintf输出时:输出时:打开打开(d ki)V(d ki)V视图:串行口视图:串行口1#1#观察结果。观察结果。当单步运行时,在当单步运行时,在scanfscanf语句运行后,在串行口语句运行后,在串行口1#1#中中光标位置按输入格式要求输入数据后回车。光标位置按输入格式要求输入数据后回车。(3 3)修改或停止运行程序时再次点击)修改或停止运行程序时再次点击 ,退出运,退出运行状态,可以进行程序的修改。行状态,可以进行程序的修改。第十四页,共18页。三、实验内容三、实验内容 熟悉熟悉Kiel CKiel C软件界面软件界面,编辑、编译、运行程序。编辑、编译、运行程序。1 1、顺序程序:输入下面程序,调试、顺序程序:输入下面程序,调试(dio sh)(dio sh)并并观察运算结果。观察运算结果。#include#include#include#includevoid main(void)void main(void)int x,y;int x,y;SCON=0 x52;SCON=0 x52;TMOD=0 x20;TMOD=0 x20;TH1=0 xF3;TH1=0 xF3;TR1=1;TR1=1;printf(input x,y:n);printf(input x,y:n);scanf(%d%d,&x,&y);scanf(%d%d,&x,&y);printf(%X,x+y);printf(%X,x+y);printf(%d,x+y);printf(%d,x+y);while(1);while(1);第十五页,共18页。2 2、分支、分支(fnzh)(fnzh)程序程序#include#include#include#includemain()main()int x,y,max;int x,y,max;SCON=0 x52;SCON=0 x52;TMOD=0 x20;TMOD=0 x20;TH1=0 xf4;TH1=0 xf4;TR1=1;TR1=1;printf(input x,y:n);printf(input x,y:n);scanf(%d%d,&x,&y);scanf(%d%d,&x,&y);if(xy)max=x;if(xy)max=x;else max=y;else max=y;printf(%dn,max);printf(%dn,max);while(1);while(1);第十六页,共18页。2022/11/17 3 3、循环程序:输入下面程序、循环程序:输入下面程序(有错误有错误),调试并观察,调试并观察(gunch)(gunch)运算结果。运算结果。#include#include#include#includevoid main(void)void main(void)int i int i;s=0;s=0;i=1;i=1;SCON=0 x52;TMOD=0 x20;SCON=0 x52;TMOD=0 x20;TH1=0 xf3;TR1=1 TH1=0 xf3;TR1=1 while(i101)while(i101);s=s+i;s=s+i;i+i+printf(“%dn”,s);printf(“%dn”,s);while(1)while(1)第十七页,共18页。四、自编程序四、自编程序 编写编写C C程序,用程序,用forfor语句实现语句实现0-1000-100的求和的求和(qi(qi h)h)。要求:程序必须编译通过并运行正确。要求:程序必须编译通过并运行正确。五、实验报告五、实验报告 每次实验完毕后记录实验结果,在下次实验时每次实验完毕后记录实验结果,在下次实验时提交上次实验的实验报告。提交上次实验的实验报告。报告内容:报告内容:1 1、实验目的、实验目的 2 2、实验内容、实验内容 3 3、实验原理图与线路连接、实验原理图与线路连接 4 4、实验步骤、实验步骤 5 5、实验结果、实验结果 6 6、实验体会、实验体会第十八页,共18页。