收藏 分享(赏)

插播2 单片机的C语言程序设计及仿真调试.ppt

上传人:gnk289057 文档编号:6103418 上传时间:2019-03-27 格式:PPT 页数:64 大小:973KB
下载 相关 举报
插播2 单片机的C语言程序设计及仿真调试.ppt_第1页
第1页 / 共64页
插播2 单片机的C语言程序设计及仿真调试.ppt_第2页
第2页 / 共64页
插播2 单片机的C语言程序设计及仿真调试.ppt_第3页
第3页 / 共64页
插播2 单片机的C语言程序设计及仿真调试.ppt_第4页
第4页 / 共64页
插播2 单片机的C语言程序设计及仿真调试.ppt_第5页
第5页 / 共64页
点击查看更多>>
资源描述

1、第2章 单片机的C语言程序设计及仿真调试,本章节主要内容,2.1 C51程序设计中的常用功能及应注意的问题,2.2 Keil C 和 ANSI C,2.3 STC15F2K60S2单片机C语言程序调试,2.4 利用ISP工具将程序下载到单片机中验证程序,2.1 C51程序设计中的常用功能及应注意的 问题,2.1.1 C51程序设计中的常用典型功能2.1.2 C51程序编写中应注意的问题,2.1.1 C51程序设计中的常用典型功能C语言功能,1、逻辑运算和位运算 逻辑运算符 与运算符(&)表示两个条件同时满足时(即两个条件都为真时),返回结果才为真 或运算符(|)用于检查两个条件中是否有一个为真

2、的运算符,只要有一个条件为真,运算结果就为真 逻辑非运算符(!)表示对表达式的真值取反 关系运算符和逻辑运算符的优先级一般都低于算术运算符,C51程序设计中的常用典型功能 C语言功能,1、逻辑运算和位运算 位运算符 按位“与”运算(&):双目运算符。其功能是参与运算的两数各对应的二进位相与。只有对应的两个二进位均为1时,结果位才为1,否则为0 按位“或”运算(|):双目运算符。其功能是参与运算的两数各对应的二进位相或。只要对应的两个二进位有一个为1时,结果位就为1 按位“异或”运算():双目运算符。其功能是参与运算的两数各对应的二进位相异或。当两个对应的二进位相异时,结果为1 求反运算():单

3、目运算符,具有右结合性。其功能是对参与运算的数的各二进位按位求反 左移运算():双目运算符。其功能是把“”左边的运算数的各二进位全部右移若干位,“”右边的数指定移动的位数 对于有符号数,在右移时,符号位将随同移动。当为正数时,最高位补0,而为负数时,符号位为1,最高位是补0或是补1 取决于编译系统的规定,C51程序设计中的常用典型功能 C语言功能,2、预处理:以“#”号开头的命令是预处理命令 宏定义(define) :在语言源程序中允许用一个标识符来表示一个字符串,称为宏。被定义为宏的标识符称为宏名。在编译预处理时,对程序中所有出现的宏名,都用宏定义中的字符串去代换,这称为宏代换或宏展开。宏代

4、换是由预处理程序自动完成的。 无参宏定义 #define 标识符 字符串;标识符为所定义的宏名,字符串可以是常数、表达式、格式串等 带参宏定义 #define 宏名(形参表) 字符串; 例如:#define MAX(a,b) (ab)?a:b /取a和b的最大数,C51程序设计中的常用典型功能 C语言功能,2、预处理 文件包含(include):#include “文件名” 包含命令中的文件名可以用双引号括起来,也可以用尖括号括起来。例如: #include “stdio.h“ #include 二者的区别:使用尖括号表示在包含文件目录中去查找(包含目录由用户在开发环境中设置),而不在源文件目

5、录去查找;使用双引号则表示首先在当前的源文件目录中查找,若未找到才到包含目录中去查找。,C51程序设计中的常用典型功能 C语言功能,2、预处理 条件编译:条件编译就是按不同的条件去编译不同的程序部分,从而产生不同的目标代码文件。条件编译对于程序的移植和调试(可以分段调试)非常有用。特别是在操作系统的裁减中,经常使用条件编译 #ifdef 标识符程序段1#else 程序段2#endif,它的功能是,如果标识符已被#define命令定义过,则对程序段1进行编译;否则对程序段2进行编译。如果没有程序段2(它为空),本格式中的#else可以没有,C51程序设计中的常用典型功能 C语言功能,2、预处理

6、条件编译 #ifndef 标识符程序段1#else程序段2#endif#if 常量表达式程序段1#else程序段2#endif,与第一种形式的区别是将ifdef改为ifndef。它的功能是:如果标识符未被#define命令定义过则对程序段1进行编译,否则对程序段2进行编译。这与第一种形式的功能正相反,它的功能是,如果常量表达式的值为真(非0),则对程序段1 进行编译,否则对程序段2进行编译。因此可以使程序在不同条件下,完成不同的功能。,2.1 C51程序设计中的常用功能及应注意的 问题,2.1.1 C51程序设计中的常用典型功能2.1.2 C51程序编写中应注意的问题,2.1.2 C51程序编

7、写中应注意的问题,基本要求 程序结构清析,简单易懂 目标明确,直接了当,代码精简,避免垃圾程序 尽量使用标准库函数和公共函数 对于拿不准的运算顺序,应该根据实际编程需要使用括号来避免运算顺序的二义性 注意程序的书写格式 在各个层次的程序模块中,利用缩进(使用键盘的Tab键)来显示程序的逻辑结构 对于自增1和自减1运算符,当它们出在较复杂的表达式或语句中时,常常难于弄清,因此应仔细分析。由于它们在变量前后的含义不同(例如i+和+i的含义就不同),只使用自增1和自减1运算符在变量后面的情况,否则分析时容易搞混 在适当的地方做注释 每个函数,都有函数头说明 主要变量(结构、联合、类或对象)定义或引用

8、时,注释能反映其含义 常量定义(DEFINE)有相应说明 处理过程的每个阶段都有相关注释说明 在典型算法前都有注释,C51程序编写中应注意的问题,注意变量的命名规范 在循环结构的程序设计中,可以使用单字母变量作为循环变量。除此以外,尽可能避免单字母变量名,尽量采用有意义的英文单词或者拼音(或它们的缩写)做变量名 所有变量在使用前必须被初始化,否则可能会产生意想不到的结果 给函数命名时,也应该使用具有一定意义的名字 注意变量的作用域 不要随意定义全局变量,尽量使用局部变量 函数之间传递数据时,尽量使用参数传递,这不仅可以使得函数能够用在多种情况下,而且还能提高函数代码的可读性 对于结构化的程序设

9、计方面,有如下的要求: 禁止出现两条等价的支路 禁止goto语句 使用判断分支语句时,判断两个量是否相等,要使用测试相等运算符“=” 尽量用 case 实现多路分支,避免不必要的分支 C语言是一种结构化的编程语言,结构化编程语言的一个基本特点就是不允许流程出现交叉 尽量不使用条件赋值语句,2.2 Keil C 和 ANSI C,2.2.1 Keil C51扩展关键字 2.2.2 扩展I/O口的使用 2.2.3 Keil C51函数 2.2.4 STC15F2K60S2单片机C51程序框架,2.2.1 Keil C51扩展关键字,内存区域(Memory Areas) 程序存储器 code:程序存

10、储区。可以使用code定义表格常数 内部RAM data:直接寻址区,内部RAM的低128字节,地址范围为00H7FH idata:间接寻址区,包括整个内部RAM区256字节,地址范围为00H0FFH bdata:可位寻址区,地址范围为20H2FH 外部数据存储器 xdata:可指定多达64KB的外部直接寻址区,地址范围0000H0FFFFH pdata:能访问1页(256Bytes)的外部RAM(很少用) 变量或参数的存储类型可由存储模式指定缺省类型,也可由关键字code、data、idata、xdata、pdata直接声明指定。例如:data buffer;char code array

11、=“hello!”;unsigned char xdata arr1044;,Keil C51扩展关键字,_at_关键字:若要实现变量的绝对定位(称为绝对变量),可以直接在数据定义后加上“_at_ 常数地址”即可,注意: 绝对变量不能被初始化; bit型函数及变量不能用_at_指定。 例如: unsigned char idata ADCdata _at_ 0x40; /指定ADCdata变量在40H处 unsigned char xdata buffer20 _at_ 0x0010;/指定buffer数组从XRAM的0010H单元开始,Keil C51扩展关键字,存储模式:有Small、Co

12、mpact和Large三种模式;存储模式可在Keil C51编译器选项中选择,如下图所示:,指定存储模式,Small模式:在该模式中所有变量都默认位于单片机内部数据存储器,此模式访问变量的效率很高,缺点是空间有限,只适用于小程序; Compact模式:所有缺省变量均位于外部RAM区的一页内(256字节),这和使用pdata指定存储器类型一样,该模式空间比Small宽裕,速度比Small慢,比large快,是一种中间状态; Large模式:所有缺省变量可放在多达64KB的外部RAM区,这和使用xdata 指定存储器类型一样,使用数据指针DPTR 进行寻址。通过数据指针访问外部数据存储器的效率较低

13、,特别是当变量为2 个字节或更多字节时。该模式的数据访问比Small和Compact产生更多的代码。优点是空间大,可存变量多,缺点是速度较慢。,Keil C51扩展关键字,变量或数据类型,2.2 Keil C 和 ANSI C,2.2.1 Keil C51扩展关键字 2.2.2 扩展I/O口的使用 2.2.3 Keil C51函数 2.2.4 STC15F2K60S2单片机C51程序框架,2.2.2 扩展I/O口的使用,由于使用C语言访问外部I/O时用到指针的功能,因此,首先介绍Keil C51的指针。,1Keil C51指针 Keil C51支持一般指针(Generic Pointer)和存

14、储器指针(Memory Specific Pointer)。一般指针的声明和使用均与标准C相同,同时还可以说明指针的存储类型。例如,下面的语句都声明pt为指向保存在外部RAM中unsigned char数据的指针,但pt本身的保存位置却不同: unsigned char xdata *pt; /pt本身依存储模式存放 unsigned char xdata * data pt; /pt被保存在内部RAM中 unsigned char xdata * xdata pt; /pt被保存在外部RAM中,一般指针本身用3个字节存放,分别为存储器类型,高位偏移,低位偏移量。基于存储器的指针,说明时即指定

15、了存储类型,这种指针存放时,只需一个字节或2个字节就够了,因为只需存放偏移量。例如: char data * str; /str指向data区中char型数据 int xdata * pow; /pow指向外部RAM的int型整数。,关于堆栈指针SP的设定 一般情况下,用户不需要在C语言程序中修改堆栈指针SP,但要关心一下SP的位置 ; C51是在startup.A51中设置SP指针的,用CODE选项生成的汇编代码中是找不到这段代码的。startup.A51是C51的初始化代码,单片机复位后先执行这段代码,完成初始化后由它调用main( )函数。特殊需要时,可以修改这段代码,然后连接到用户的程

16、序中去。,扩展I/O口的使用,2外部扩展I/O口的访问 方法1:使用自定义指针。由于片外I/O端口与片外存储器统一编址,所以可以定义xdata类型的指针访问外部I/O端口。 例如,某单片机应用系统中,使用8255扩展I/O端口,采用线选法对8255进行地址译码,单片机的P2.7(A15)接8255的片选引脚,则8255的命令字地址为7FF3H,PA口地址为7FF0H,PB口地址为7FF1H,PC口地址为7FF2H,访问8255的C程序如下:,写端口程序:char xdata *com8255; /定义指向外部存储区的指针com8255=0x7FF3; /使指针指向8255的控制口口地址7FF3

17、H*com8255=0x81; /输出81H到端口 读端口程序:char xdata *com8255;/定义指针com8255=0x7FF0; /使指针指向8255的PA口口地址7FF0Hchar i;i=*com8255; /读PA端口到变量i,扩展I/O口的使用,2外部扩展I/O口的访问 方法2:使用C51预定义指针。为了方便地访问外部存储器及I/O端口,在C51中的absacc.h头文件做了如下定义,利用这些定义可以方便地访问外部I/O端口。 #define CBYTE (unsigned char volatile code *) 0) #define DBYTE (unsigned

18、 char volatile data *) 0) #define PBYTE (unsigned char volatile pdata *) 0) #define XBYTE (unsigned char volatile xdata *) 0) 例如:#include #define PORTA XBYTE 0x7FF0 /其中,PORTA为程序定义的I/O端口名称,内的内容7FF0H为PORTA的地址void main(void)char a;PORTA=0x81; /输出81H到端口7ff0Ha=PORTA; /读端口7ff0H到变量a,2.2 Keil C 和 ANSI C,2.2

19、.1 Keil C51扩展关键字 2.2.2 扩展I/O口的使用 2.2.3 Keil C51函数 2.2.4 STC15F2K60S2单片机C51程序框架,2.2.3 Keil C51函数,C51的程序结构: C51的程序也是从main()函数(主函数)开始执行的,主函数是程序的入口; 主程序中的main()主函数可以根据不同需求来调用不同的函数。被调用的函数可以是编译器提供的库函数,也可以是用户自己编制设计的函数; 当函数执行完毕的时候,就会发出返回指令,主程序中语句执行完毕,整个程序也完毕; 但在一般的设计中,主程序都是一直循环,不断的重复执行。因此,一般在主程序中使用while(1)语

20、句构成无限循环; 在构成C51语言程序的若干函数中,有并且只能有一个主函数。在C51中定义主函数时,要求主函数没有参数,并且没有返回值; 除此之外,C51的函数声明对ANSI C作了扩展。,Keil C51函数,C51的函数声明对ANSI C的扩展 中断函数声明 中断函数通过使用interrupt关键字和中断号来声明。中断号告诉编译器中断服务程序的入口地址。STC15F2K60S2单片机的中断号及中断服务程序入口地址如下表所示。 例如,串行口1的中断函数可以声明如下: void UART1_ISR (void) interrupt 4 using 1 /* 中断服务程序的代码 */ ,Keil

21、 C51函数,C51的函数声明对ANSI C的扩展 指定工作寄存器区 当需要指定函数中使用的工作寄存器区时,使用关键字using后跟一个0到3的数,对应着工作寄存器0到3区。例如,在下面的函数中使用了工作寄存器1区(相当于PSW.4=0,PSW.3=1):unsigned char GetKey(void) using 1/*用户程序代码*/,Keil C51函数,C51的函数声明对ANSI C的扩展 指定存储模式 用户可以使用small,compact 及large说明存储模式。例如:void fun1(void) small 提示:small说明的函数内部变量全部使用内部RAM。关键的、经

22、常性的、耗时的地方可以这样声明,以提高运行速度。,Keil C51函数,C51的函数声明对ANSI C的扩展 函数的参数传递规则 最多只能有3个参数通过寄存器传递,规律如下表所示:,Keil C51函数,C51的函数声明对ANSI C的扩展 函数返回值的规定 函数返回值一律放于寄存器中,规则如下表所示:,Keil C51函数,C51的库函数C51的本征库函数只有9个,数目虽少,但都非常有用,列如下: _crol_,_cror_:将char型变量循环向左(右)移动指定位数后返回 _iror_,_irol_:将int型变量循环向左(右)移动指定位数后返回 _lrol_,_lror_:将long型变

23、量循环向左(右)移动指定位数后返回 _nop_: 相当于插入NOP _testbit_: 相当于JBC bitvar测试该位变量并跳转同时清除。 _chkfloat_: 测试并返回源点数状态。 使用时,必须包含#inclucle “intrins.h”一行。,Keil C51函数,C51的库函数 例如, char a,b; a = 0xA5; b = _crol_(a,3); /执行完后,b变为0x2D 再如, bit test_flag; if (_testbit_ (test_flag)printf (“Bit was setn“); elseprintf (“Bit was clearn

24、“);,Keil C51函数,几类重要库函数 1)专用寄存器include文件 2)绝对地址include文件absacc.h 该文件中实际只定义了几个宏,以确定各存储空间的绝对地址。在程序中,用#include “absacc.h”即可使用其中定义的宏来访问绝对地址,包括: CBYTE、XBYTE、PWORD、DBYTE、CWORD、XWORD、PBYTE、DWORD 例如: rval=CBYTE0x0002; /指向程序存贮器的0002h地址 rval=XWORD 0x0002; /指向外RAM的0004h地址,WORD是一个字,两个字节,故为0004h #define COM8255 X

25、BYTE0X060FF,Keil C51函数,几类重要库函数 3)动态内存分配函数,位于stdlib.h中 4)缓冲区处理函数位于“string.h”中 其中包括拷贝比较移动等函数如: memccpy memchr memcmp memcpy memmove memset 这样很方便地对缓冲区进行处理。 5)输入输出流函数,位于“stdio.h”中 流函数通过8051的串口或用户定义的I/O口读写数据,缺省为串口。,2.2 Keil C 和 ANSI C,2.2.1 Keil C51扩展关键字 2.2.2 扩展I/O口的使用 2.2.3 Keil C51函数 2.2.4 STC15F2K60S

26、2单片机C51程序框架,2.2.4 STC15F2K60S2单片机C51程序框架,为了便于学习,下面给出一个通用的STC15F2K60S2单片机的C51程序框架。读者可以在适当的地方根据设计任务需要填入代码,便可构成较完整的C语言程序。,STC15F2K60S2单片机C51程序框架,【例2-1】编程实现通过延时函数,由P1.0输出方波信号,并通过示波器观察程序输出波形的周期。,2.3 STC15F2K60S2单片机C语言程序调试,2.3.1 使用Keil集成环境软件模拟调试C51程序2.3.2 使用Keil集成环境在线调试C51程序,2.3.1 使用Keil集成环境软件模拟调试C51程序,1、

27、Keil的安装与启动 Keil是一个标准Windows应用程序。安装过程与一般Windows应用程序的安装过程类似。安装的最后一个窗口如下图所示。去掉所有选项的“”,单击“Finish”按钮便可完成安装。,使用Keil集成环境软件模拟调试C51程序,1、Keil的安装与启动 从“程序”组中选择“Keil uVision4”程序项或者直接双击桌面上的Keil uVision4程序图标,就可以启动Keil。此时,还没有安装授权,使用的是评估版,与正式版唯一的区别是编译代码有2KB字节的限制。每次进入调试前会出现如下图所示的提示对话框。安装授权的方法是,在“File”菜单中选择“License Ma

28、nagement.”菜单项,弹出“License Management”对话框,如下图所示。可以根据右上方的Computer ID号,向软件经销商索取“New License ID Code”并填入该单行编辑框中。然后,单击单行编辑框右边的“Add LIC”按钮,即可完成授权的安装。单击“Close”按钮关闭“License Management”对话框。,使用Keil集成环境软件模拟调试C51程序,2、新建一个项目文件并从器件库中选择一个器件 要新建一个项目文件,可以从Keil的“Project”菜单中选择“New Project”菜单项,将打开“Create New Project”对话框

29、。如下图所示。,假如需要修改启动文件来迎合目标硬件,应该把文件STARTUP.A51复制一份到项目文件夹中。如果只是调试比较简单的8051单片机程序,可以选择“否”。,使用Keil集成环境软件模拟调试C51程序,3新建一个源文件并把它加入到项目中 新建一个源文件 从“File”菜单中选择“New”菜单项新建一个源文件,或者单击工具栏中的“New file”按钮,将打开一个空的编辑窗口,以便用户输入程序源代码。为了能够高亮显示C语言语法字符,可以首先保存文件。从“File”菜单中选择“Save As”菜单项,将文件保存为想要的名字,如ex2-1.c。如下图所示。 在编辑窗口中输入例2-1中的程序

30、代码,并保存。,使用Keil集成环境软件模拟调试C51程序,3新建一个源文件并把它加入到项目中 将源文件加入到项目中 在“Project Workspace”窗口(也称为工程管理器)中,单击“Target 1”前面的“+”展开下一层的“Source Group1”文件夹,在“Source Group1”文件夹上单击右键,弹出右键快捷菜单,如图所示。,加入文件到源程序组,从文件列表框中选择要加入的文件并双击即可添加到工程中;单击Add,添加文件后,对话框不会自动关闭,而是继续等待用户添加其他文件。初学者往往以为没有添加成功,其实此时已经添加完毕,单击对话框中的“Close”按钮关闭对话框。给工程

31、添加文件成功后,工程管理器的“Source Group1”文件夹的前面会出现一个“+”号,单击“+”,可以看到ex2-1.c文件已经包含在源程序组中。双击它即可打开进行修改。,使用Keil集成环境软件模拟调试C51程序,4针对目标硬件设置工具选项:可以通过工具条图标、菜单或在“Project Workspace”窗口的“Target 1”上单击右键打开“Options for Target”对话框 选中“Options for Target”对话框的“Output”标签页,选中“Create HEX File”,选中此处,选中“Create HEX File”选项时,每次编译成功后,都会生成(

32、重新生成)能够下载到单片机的后缀名为hex的文件。,使用Keil集成环境软件模拟调试C51程序,5.编译项目并生成可以编程到程序存储器的HEX文件 单击工具条上的“|Build”目标 或“Rebuild”目标 的图标,可以编译所有的源文件并生成应用。当程序中有语法错误或警告时,Keil将在界面下部的“Build Output”窗口中显示错误或者告警信息。双击一行信息将打开此信息对应的文件,并定位到语法错误或警告处。如左下图所示。,根据信息提示,修改程序,直到不再出现警告或错误信息为止。如下图所示。,使用Keil集成环境软件模拟调试C51程序,6、进行仿真调试,选中“Options for Ta

33、rget”对话框的“Debug”标签,选择软件模拟调试功能,从“Debug”菜单中选择“Start/Stop debug session”菜单项(快捷键是Ctrl+F5),或者从工具条中单句“Start/Stop debug session”按钮 ,开始模拟调试过程。,在该对话框中选择“Use Simulator”单选框以进行软件模拟调试,使用Keil集成环境软件模拟调试C51程序,6、进行仿真调试,菜单栏 菜单栏和一般Windows应用程序的菜单栏作用相同。可以从菜单栏中选择菜单项,以执行相应的命令。 调试控制工具栏 在调试控制工具栏中包括调试有关的命令按钮,例如复位 、运行(Go(F5)、

34、停止 、单步执行 (Step(F11)、单步执行跳过 (Setp Over(F10)等。 视图切换工具栏 在该工具栏中,包含命令视图的显示/不显示切换控制按钮和观察视图中各个子视图的显示/不显示切换控制按钮。,使用Keil集成环境软件模拟调试C51程序,寄存器视图 在寄存器视图中,显示关键寄存器在调试过程中的变化情况 反汇编视图 在该视图中,显示了与C语言程序对应的汇编语言程序。除非特别需要,在调试过程中,一般用不到,因此,一般也就不让其显示 C语言源程序视图 在该视图中,显示用户编写的C语言源程序。在该视图中,可以设置程序的断点,可以单步调试等 命令视图 在该视图中,显示了在调试过程中所用到

35、的命令 观察视图 在该视图中,显示在调试过程中可能用到的子视图,例如,调用关系(Call Stack)、局部变量(Locals)、Watch视图(Watch1)、存储器子视图(Memory1)、符号子视图(Symbols)。用户可以根据需要选择是否显示相应的视图,6、进行仿真调试,使用Keil集成环境软件模拟调试C51程序,6、进行仿真调试:在调试过程中,可以进行如下操作: 连续执行、单步执行、单步跳过执行程序 “Debug”菜单中的“Go(F5)”、“Step(F11)”、“Setp Over(F10)”分别可以进行程序的连续执行、单步执行和单步跳过执行。其中,每选择执行一次单步执行程序的命

36、令,都会执行一行程序,当执行到某个函数或者子程序时,会跳入到函数或者子程序中运行程序。单步跳过执行程序的含义是,当单步运行程序到某个子程序的调用时,如果想跳过该子程序,继续运行下面的程序,可以使用该功能。在这种情况下,所跳过的子程序仍然执行(但,不是单步执行)。 运行到光标所在行 单击工具条上的“Run to Cursor line”图标 ,或者从“Debug”菜单中选择“Run to Cursor line (Ctrl+F10)”菜单项,则可以使得程序运行到当前光标所在的行。,使用Keil集成环境软件模拟调试C51程序,6、进行仿真调试 设置断点 在要设置断点的行上单击鼠标右键,弹出如右图所

37、示的菜单。在此菜单中,选择“Insert/Remove Breakpoint”菜单项,则可以在当前行插入或删除断点。 只要在当前行设置了断点,则在当前行的前面会出现一个红色的小方块。 也可以在相应代码行的行号上双击鼠标,进行断点的设置和删除。 连续运行程序后,执行到该行时,程序会暂停运行。此时,用户可以查看程序运行的一些中间状态和结果。,插入/删除断点菜单项,使用Keil集成环境软件模拟调试C51程序,6、进行仿真调试 观察视图的使用 在程序调试过程中,应充分利用观察视图对程序运行过程中的变量和状态进行观察,这样可以大大提高程序调试的速度和准确度。 例如,如要在运行过程中,查看P10变量(对应

38、P1.0)的状态,可以在观察视图中,单击“Watch 1”标签页,根据提示,在“double-click or F2 to add”行上双击,然后输入P10并键入回车,则P10变量就出现在Watch标签视图中。如下图所示。,使用Keil集成环境软件模拟调试C51程序,6、进行仿真调试 查看外围:从“Peripherals”菜单中选择不同的菜单项,可以查看单片机某些资源的状态。包括: “Interrupt”:打开中断向量表窗口,在窗口里显示了所有的中断向量。对选定的中断向量可以用窗口下面的复选框进行设置。 “I/O-Ports”:打开输入输出端口(P0P3)的观察窗口,在窗口里显示了程序运行时的

39、端口的状态,可以随时修改端口的状态。从而可以模拟外部的输入。“Serial”:打开串行口的状态和设置对话框。 “Timer”:打开定时器的状态和设置对话框。,2.3 STC15F2K60S2单片机C语言程序调试,2.3.1 使用Keil集成环境软件模拟调试C51程序2.3.2 使用Keil集成环境在线调试C51程序,2.3.2 使用Keil集成环境在线调试C51程序,1硬件设置 监控CPU负责和Keil-C51集成开发调试环境通信并控制仿真目标CPU芯片执行仿真功能 仿真CPU目标芯片必须是宏晶的IAP15F2K62S2或IAP15L2K62S2芯片 推荐由监控CPU板提供仿真目标CPU电源/

40、用户系统电源。如电流大则由用户系统自己给自己提供电源,VCC不连接在一起,GND要相连。每次重新下载程序调试时,用户系统必须手工停电/上电。,计算机、仿真器和学习板连接示意图,使用IAP15F2K62S2仿真器可以仿真宏晶STC15系列的单片机。使用过程如下:,使用Keil集成环境在线调试C51程序,2软件设置,按照上一小节中介绍的方法创建一个工程ex2-2,然后输入上述程序,保存为ex2-2.c并加入到项目中。,使用Keil集成环境在线调试C51程序,3. 仿真代码占用的资源 程序空间 : 6K字节(0xE0000xF7FF,用户在程序中不要使用) 常规RAM : 0字节 XRAM : 76

41、8字节(0x0400 0x06FF, 用户在程序中不要使用) I/O : P3.0 / P3.1 用户在程序中不得操作P3.0/P3.1, 不要使用INT4/T2CLKO/P3.0, 不要使用T2/P3.1,不要使用外部中断INT4,不要使用T2的时钟输出功能,不要使用T2的外部计数功能,使用Keil集成环境在线调试C51程序,4Keil环境设置 设置晶振频率 使用ProjectOptions for Target Target命令打开选项设置窗口,如下图所示:,在此编辑框中输入晶振频率,使用Keil集成环境在线调试C51程序,4Keil环境设置 设置Output选项 选中“Create HE

42、X File”复选框,选中此处,使用Keil集成环境在线调试C51程序,4Keil环境设置 选择硬件仿真 单击“Debug”选项卡,选中右半部分中的“Use”,从下拉列表框中选择“Keil Monitor-51 Driver”,并选中“Run to main”选项。如下图所示。,使用Keil集成环境在线调试C51程序,4Keil环境设置 设置串口 在上一页图片中,单击“Settings”按钮,弹出串口设置对话框,使用Keil集成环境在线调试C51程序,4Keil环境设置 设置完成后,就可以进行程序的调试了。使用仿真器进行程序的仿真时,需要注意如下问题: 仿真器与计算机USB连接须等待10秒以上

43、,等仿真器上电稳定后再进行程序的调试; 每次调试程序之前,需要重新上电; 不要关中断 ; 当全速运行程序时,若执行“Halt”命令后出现如右上图所示的对话框,请选择”Continue”按钮; 调试时若出现右下图所示情况,可能的原因有以下几点: keil的选项设置不正确,按照Keil环境设置的需要重新设置 串口设置不正确,按图2-24所示重新设置串口 程序正在全速运行或调试前单片机未复位,给学习板重新上电复位后再进行程序调试 把仿真器与电脑重新连接,等待10秒以上稳定后再调试程序,2.4 利用ISP工具将程序下载到单片机中 验证程序,从网站上下载宏晶科技公司提供的ISP下载工具免安装版,解压缩到

44、任一文件夹中双击其中的应用程序stc-isp-15xx-v6.19.exe即可启动。启动后的界面如下图所示:,利用ISP工具将程序下载到单片机中 验证程序,下载程序时,可以按照下面的步骤进行: 从“单片机型号”下拉列表框中选择所使用的单片机的型号,如选择STC15F2K60S2 选择串口号。从“串口号”下拉列表框中选择计算机所用的串行口,如COM1、COM2等。 获取串口的方法是,用鼠标右键单击计算机桌面上的“我的电脑”图标,从弹出的菜单中选择“管理”,然后点击系统工具下的设备管理器,在设备管理器中单击“端口”左边的“+”号选择波特率,根据实际使用效果,从“最低波特率”下拉框和“最高波特率”下

45、拉框中选择限制最低和最高通信波特率,如57600、38400或者19200等 单击“打开程序文件”按钮,打开要下载的用户程序文件。用户程序文件的后缀名为.bin或者.hex 进行时钟的选择、启动下载的条件等 单击“下载/编程”按钮,将用户程序下载到单片机内部。重复下载时,可重复执行该操作,也可单击“重复编程”按钮。,找到串口号,习题,标准C语言中的数据类型有哪几种? 列举并说明C语言中的基本运算符。 Keil C对ANSI C进行了哪些扩展?在Keil C中如何声明中断函数? 如何在Keil集成环境中调试单片机的C语言程序?详细叙述调试过程。 用C编写程序,点亮一灯。并在Keil集成环境中仿真。 用C语言编写程序:设单片机的系统时钟f=12MHz,要求在P1.0脚上输出周期为2ms的方波。 编程控制一盏灯,实现灯不同速度的的闪烁,每个速度闪烁10次,实现不同速度循环闪烁。,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 网络科技 > C/C++资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报