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

上传人:max****ui 文档编号:11543003 上传时间:2020-04-28 格式:PPT 页数:64 大小:973KB
返回 下载 相关 举报
插播2单片机的C语言程序设计及仿真调试.ppt_第1页
第1页 / 共64页
插播2单片机的C语言程序设计及仿真调试.ppt_第2页
第2页 / 共64页
插播2单片机的C语言程序设计及仿真调试.ppt_第3页
第3页 / 共64页
点击查看更多>>
资源描述
第2章单片机的C语言程序设计及仿真调试,本章节主要内容,2.1C51程序设计中的常用功能及应注意的问题,2.2KeilC和ANSIC,2.3STC15F2K60S2单片机C语言程序调试,2.4利用ISP工具将程序下载到单片机中验证程序,2.1C51程序设计中的常用功能及应注意的问题,2.1.1C51程序设计中的常用典型功能2.1.2C51程序编写中应注意的问题,2.1.1C51程序设计中的常用典型功能C语言功能,1、逻辑运算和位运算逻辑运算符与运算符(charcodearray=“hello!”;unsignedcharxdataarr1044;,KeilC51扩展关键字,_at_关键字:若要实现变量的绝对定位(称为绝对变量),可以直接在数据定义后加上“_at_常数地址”即可,注意:绝对变量不能被初始化;bit型函数及变量不能用_at_指定。例如:unsignedcharidataADCdata_at_0 x40;/指定ADCdata变量在40H处unsignedcharxdatabuffer20_at_0 x0010;/指定buffer数组从XRAM的0010H单元开始,KeilC51扩展关键字,存储模式:有Small、Compact和Large三种模式;存储模式可在KeilC51编译器选项中选择,如下图所示:,指定存储模式,Small模式:在该模式中所有变量都默认位于单片机内部数据存储器,此模式访问变量的效率很高,缺点是空间有限,只适用于小程序;Compact模式:所有缺省变量均位于外部RAM区的一页内(256字节),这和使用pdata指定存储器类型一样,该模式空间比Small宽裕,速度比Small慢,比large快,是一种中间状态;Large模式:所有缺省变量可放在多达64KB的外部RAM区,这和使用xdata指定存储器类型一样,使用数据指针DPTR进行寻址。通过数据指针访问外部数据存储器的效率较低,特别是当变量为2个字节或更多字节时。该模式的数据访问比Small和Compact产生更多的代码。优点是空间大,可存变量多,缺点是速度较慢。,KeilC51扩展关键字,变量或数据类型,2.2KeilC和ANSIC,2.2.1KeilC51扩展关键字2.2.2扩展I/O口的使用2.2.3KeilC51函数2.2.4STC15F2K60S2单片机C51程序框架,2.2.2扩展I/O口的使用,由于使用C语言访问外部I/O时用到指针的功能,因此,首先介绍KeilC51的指针。,1KeilC51指针KeilC51支持一般指针(GenericPointer)和存储器指针(MemorySpecificPointer)。一般指针的声明和使用均与标准C相同,同时还可以说明指针的存储类型。例如,下面的语句都声明pt为指向保存在外部RAM中unsignedchar数据的指针,但pt本身的保存位置却不同:unsignedcharxdata*pt;/pt本身依存储模式存放unsignedcharxdata*datapt;/pt被保存在内部RAM中unsignedcharxdata*xdatapt;/pt被保存在外部RAM中,一般指针本身用3个字节存放,分别为存储器类型,高位偏移,低位偏移量。基于存储器的指针,说明时即指定了存储类型,这种指针存放时,只需一个字节或2个字节就够了,因为只需存放偏移量。例如:chardata*str;/str指向data区中char型数据intxdata*pow;/pow指向外部RAM的int型整数。,关于堆栈指针SP的设定一般情况下,用户不需要在C语言程序中修改堆栈指针SP,但要关心一下SP的位置;C51是在startup.A51中设置SP指针的,用CODE选项生成的汇编代码中是找不到这段代码的。startup.A51是C51的初始化代码,单片机复位后先执行这段代码,完成初始化后由它调用main()函数。特殊需要时,可以修改这段代码,然后连接到用户的程序中去。,扩展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程序如下:,写端口程序:charxdata*com8255;/定义指向外部存储区的指针com8255=0 x7FF3;/使指针指向8255的控制口口地址7FF3H*com8255=0 x81;/输出81H到端口读端口程序:charxdata*com8255;/定义指针com8255=0 x7FF0;/使指针指向8255的PA口口地址7FF0Hchari;i=*com8255;/读PA端口到变量i,扩展I/O口的使用,2外部扩展I/O口的访问方法2:使用C51预定义指针。为了方便地访问外部存储器及I/O端口,在C51中的absacc.h头文件做了如下定义,利用这些定义可以方便地访问外部I/O端口。#defineCBYTE(unsignedcharvolatilecode*)0)#defineDBYTE(unsignedcharvolatiledata*)0)#definePBYTE(unsignedcharvolatilepdata*)0)#defineXBYTE(unsignedcharvolatilexdata*)0)例如:#include#definePORTAXBYTE0 x7FF0/其中,PORTA为程序定义的I/O端口名称,内的内容7FF0H为PORTA的地址voidmain(void)chara;PORTA=0 x81;/输出81H到端口7ff0Ha=PORTA;/读端口7ff0H到变量a,2.2KeilC和ANSIC,2.2.1KeilC51扩展关键字2.2.2扩展I/O口的使用2.2.3KeilC51函数2.2.4STC15F2K60S2单片机C51程序框架,2.2.3KeilC51函数,C51的程序结构:C51的程序也是从main()函数(主函数)开始执行的,主函数是程序的入口;主程序中的main()主函数可以根据不同需求来调用不同的函数。被调用的函数可以是编译器提供的库函数,也可以是用户自己编制设计的函数;当函数执行完毕的时候,就会发出返回指令,主程序中语句执行完毕,整个程序也完毕;但在一般的设计中,主程序都是一直循环,不断的重复执行。因此,一般在主程序中使用while(1)语句构成无限循环;在构成C51语言程序的若干函数中,有并且只能有一个主函数。在C51中定义主函数时,要求主函数没有参数,并且没有返回值;除此之外,C51的函数声明对ANSIC作了扩展。,KeilC51函数,C51的函数声明对ANSIC的扩展中断函数声明中断函数通过使用interrupt关键字和中断号来声明。中断号告诉编译器中断服务程序的入口地址。STC15F2K60S2单片机的中断号及中断服务程序入口地址如下表所示。例如,串行口1的中断函数可以声明如下:voidUART1_ISR(void)interrupt4using1/*中断服务程序的代码*/,KeilC51函数,C51的函数声明对ANSIC的扩展指定工作寄存器区当需要指定函数中使用的工作寄存器区时,使用关键字using后跟一个0到3的数,对应着工作寄存器0到3区。例如,在下面的函数中使用了工作寄存器1区(相当于PSW.4=0,PSW.3=1):unsignedcharGetKey(void)using1/*用户程序代码*/,KeilC51函数,C51的函数声明对ANSIC的扩展指定存储模式用户可以使用small,compact及large说明存储模式。例如:voidfun1(void)small提示:small说明的函数内部变量全部使用内部RAM。关键的、经常性的、耗时的地方可以这样声明,以提高运行速度。,KeilC51函数,C51的函数声明对ANSIC的扩展函数的参数传递规则最多只能有3个参数通过寄存器传递,规律如下表所示:,KeilC51函数,C51的函数声明对ANSIC的扩展函数返回值的规定函数返回值一律放于寄存器中,规则如下表所示:,KeilC51函数,C51的库函数C51的本征库函数只有9个,数目虽少,但都非常有用,列如下:_crol_,_cror_:将char型变量循环向左(右)移动指定位数后返回_iror_,_irol_:将int型变量循环向左(右)移动指定位数后返回_lrol_,_lror_:将long型变量循环向左(右)移动指定位数后返回_nop_:相当于插入NOP_testbit_:相当于JBCbitvar测试该位变量并跳转同时清除。_chkfloat_:测试并返回源点数状态。使用时,必须包含#inclucle“intrins.h”一行。,KeilC51函数,C51的库函数例如,chara,b;a=0 xA5;b=_crol_(a,3);/执行完后,b变为0 x2D再如,bittest_flag;if(_testbit_(test_flag)printf(Bitwassetn);elseprintf(Bitwasclearn);,KeilC51函数,几类重要库函数1)专用寄存器include文件2)绝对地址include文件absacc.h该文件中实际只定义了几个宏,以确定各存储空间的绝对地址。在程序中,用#include“absacc.h”即可使用其中定义的宏来访问绝对地址,包括:CBYTE、XBYTE、PWORD、DBYTE、CWORD、XWORD、PBYTE、DWORD例如:rval=CBYTE0 x0002;/指向程序存贮器的0002h地址rval=XWORD0 x0002;/指向外RAM的0004h地址,WORD是一个字,两个字节,故为0004h#defineCOM8255XBYTE0X060FF,KeilC51函数,几类重要库函数3)动态内存分配函数,位于stdlib.h中4)缓冲区处理函数位于“string.h”中其中包括拷贝比较移动等函数如:memccpymemchrmemcmpmemcpymemmovememset这样很方便地对缓冲区进行处理。5)输入输出流函数,位于“stdio.h”中流函数通过8051的串口或用户定义的I/O口读写数据,缺省为串口。,2.2KeilC和ANSIC,2.2.1KeilC51扩展关键字2.2.2扩展I/O口的使用2.2.3KeilC51函数2.2.4STC15F2K60S2单片机C51程序框架,2.2.4STC15F2K60S2单片机C51程序框架,为了便于学习,下面给出一个通用的STC15F2K60S2单片机的C51程序框架。读者可以在适当的地方根据设计任务需要填入代码,便可构成较完整的C语言程序。,STC15F2K60S2单片机C51程序框架,【例2-1】编程实现通过延时函数,由P1.0输出方波信号,并通过示波器观察程序输出波形的周期。,2.3STC15F2K60S2单片机C语言程序调试,2.3.1使用Keil集成环境软件模拟调试C51程序2.3.2使用Keil集成环境在线调试C51程序,2.3.1使用Keil集成环境软件模拟调试C51程序,1、Keil的安装与启动Keil是一个标准Windows应用程序。安装过程与一般Windows应用程序的安装过程类似。安装的最后一个窗口如下图所示。去掉所有选项的“”,单击“Finish”按钮便可完成安装。,使用Keil集成环境软件模拟调试C51程序,1、Keil的安装与启动从“程序”组中选择“KeiluVision4”程序项或者直接双击桌面上的KeiluVision4程序图标,就可以启动Keil。此时,还没有安装授权,使用的是评估版,与正式版唯一的区别是编译代码有2KB字节的限制。每次进入调试前会出现如下图所示的提示对话框。安装授权的方法是,在“File”菜单中选择“LicenseManagement.”菜单项,弹出“LicenseManagement”对话框,如下图所示。可以根据右上方的ComputerID号,向软件经销商索取“NewLicenseIDCode”并填入该单行编辑框中。然后,单击单行编辑框右边的“AddLIC”按钮,即可完成授权的安装。单击“Close”按钮关闭“LicenseManagement”对话框。,使用Keil集成环境软件模拟调试C51程序,2、新建一个项目文件并从器件库中选择一个器件要新建一个项目文件,可以从Keil的“Project”菜单中选择“NewProject”菜单项,将打开“CreateNewProject”对话框。如下图所示。,假如需要修改启动文件来迎合目标硬件,应该把文件STARTUP.A51复制一份到项目文件夹中。如果只是调试比较简单的8051单片机程序,可以选择“否”。,使用Keil集成环境软件模拟调试C51程序,3新建一个源文件并把它加入到项目中新建一个源文件从“File”菜单中选择“New”菜单项新建一个源文件,或者单击工具栏中的“Newfile”按钮,将打开一个空的编辑窗口,以便用户输入程序源代码。为了能够高亮显示C语言语法字符,可以首先保存文件。从“File”菜单中选择“SaveAs”菜单项,将文件保存为想要的名字,如ex2-1.c。如下图所示。在编辑窗口中输入例2-1中的程序代码,并保存。,使用Keil集成环境软件模拟调试C51程序,3新建一个源文件并把它加入到项目中将源文件加入到项目中在“ProjectWorkspace”窗口(也称为工程管理器)中,单击“Target1”前面的“+”展开下一层的“SourceGroup1”文件夹,在“SourceGroup1”文件夹上单击右键,弹出右键快捷菜单,如图所示。,加入文件到源程序组,从文件列表框中选择要加入的文件并双击即可添加到工程中;单击Add,添加文件后,对话框不会自动关闭,而是继续等待用户添加其他文件。初学者往往以为没有添加成功,其实此时已经添加完毕,单击对话框中的“Close”按钮关闭对话框。给工程添加文件成功后,工程管理器的“SourceGroup1”文件夹的前面会出现一个“+”号,单击“+”,可以看到ex2-1.c文件已经包含在源程序组中。双击它即可打开进行修改。,使用Keil集成环境软件模拟调试C51程序,4针对目标硬件设置工具选项:可以通过工具条图标、菜单或在“ProjectWorkspace”窗口的“Target1”上单击右键打开“OptionsforTarget”对话框选中“OptionsforTarget”对话框的“Output”标签页,选中“CreateHEXFile”,选中此处,选中“CreateHEXFile”选项时,每次编译成功后,都会生成(重新生成)能够下载到单片机的后缀名为hex的文件。,使用Keil集成环境软件模拟调试C51程序,5.编译项目并生成可以编程到程序存储器的HEX文件单击工具条上的“|Build”目标或“Rebuild”目标的图标,可以编译所有的源文件并生成应用。当程序中有语法错误或警告时,Keil将在界面下部的“BuildOutput”窗口中显示错误或者告警信息。双击一行信息将打开此信息对应的文件,并定位到语法错误或警告处。如左下图所示。,根据信息提示,修改程序,直到不再出现警告或错误信息为止。如下图所示。,使用Keil集成环境软件模拟调试C51程序,6、进行仿真调试,选中“OptionsforTarget”对话框的“Debug”标签,选择软件模拟调试功能,从“Debug”菜单中选择“Start/Stopdebugsession”菜单项(快捷键是Ctrl+F5),或者从工具条中单句“Start/Stopdebugsession”按钮,开始模拟调试过程。,在该对话框中选择“UseSimulator”单选框以进行软件模拟调试,使用Keil集成环境软件模拟调试C51程序,6、进行仿真调试,菜单栏菜单栏和一般Windows应用程序的菜单栏作用相同。可以从菜单栏中选择菜单项,以执行相应的命令。调试控制工具栏在调试控制工具栏中包括调试有关的命令按钮,例如复位、运行(Go(F5)、停止、单步执行(Step(F11)、单步执行跳过(SetpOver(F10)等。视图切换工具栏在该工具栏中,包含命令视图的显示/不显示切换控制按钮和观察视图中各个子视图的显示/不显示切换控制按钮。,使用Keil集成环境软件模拟调试C51程序,寄存器视图在寄存器视图中,显示关键寄存器在调试过程中的变化情况反汇编视图在该视图中,显示了与C语言程序对应的汇编语言程序。除非特别需要,在调试过程中,一般用不到,因此,一般也就不让其显示C语言源程序视图在该视图中,显示用户编写的C语言源程序。在该视图中,可以设置程序的断点,可以单步调试等命令视图在该视图中,显示了在调试过程中所用到的命令观察视图在该视图中,显示在调试过程中可能用到的子视图,例如,调用关系(CallStack)、局部变量(Locals)、Watch视图(Watch1)、存储器子视图(Memory1)、符号子视图(Symbols)。用户可以根据需要选择是否显示相应的视图,6、进行仿真调试,使用Keil集成环境软件模拟调试C51程序,6、进行仿真调试:在调试过程中,可以进行如下操作:连续执行、单步执行、单步跳过执行程序“Debug”菜单中的“Go(F5)”、“Step(F11)”、“SetpOver(F10)”分别可以进行程序的连续执行、单步执行和单步跳过执行。其中,每选择执行一次单步执行程序的命令,都会执行一行程序,当执行到某个函数或者子程序时,会跳入到函数或者子程序中运行程序。单步跳过执行程序的含义是,当单步运行程序到某个子程序的调用时,如果想跳过该子程序,继续运行下面的程序,可以使用该功能。在这种情况下,所跳过的子程序仍然执行(但,不是单步执行)。运行到光标所在行单击工具条上的“RuntoCursorline”图标,或者从“Debug”菜单中选择“RuntoCursorline(Ctrl+F10)”菜单项,则可以使得程序运行到当前光标所在的行。,使用Keil集成环境软件模拟调试C51程序,6、进行仿真调试设置断点在要设置断点的行上单击鼠标右键,弹出如右图所示的菜单。在此菜单中,选择“Insert/RemoveBreakpoint”菜单项,则可以在当前行插入或删除断点。只要在当前行设置了断点,则在当前行的前面会出现一个红色的小方块。也可以在相应代码行的行号上双击鼠标,进行断点的设置和删除。连续运行程序后,执行到该行时,程序会暂停运行。此时,用户可以查看程序运行的一些中间状态和结果。,插入/删除断点菜单项,使用Keil集成环境软件模拟调试C51程序,6、进行仿真调试观察视图的使用在程序调试过程中,应充分利用观察视图对程序运行过程中的变量和状态进行观察,这样可以大大提高程序调试的速度和准确度。例如,如要在运行过程中,查看P10变量(对应P1.0)的状态,可以在观察视图中,单击“Watch1”标签页,根据提示,在“double-clickorF2toadd”行上双击,然后输入P10并键入回车,则P10变量就出现在Watch标签视图中。如下图所示。,使用Keil集成环境软件模拟调试C51程序,6、进行仿真调试查看外围:从“Peripherals”菜单中选择不同的菜单项,可以查看单片机某些资源的状态。包括:“Interrupt”:打开中断向量表窗口,在窗口里显示了所有的中断向量。对选定的中断向量可以用窗口下面的复选框进行设置。“I/O-Ports”:打开输入输出端口(P0P3)的观察窗口,在窗口里显示了程序运行时的端口的状态,可以随时修改端口的状态。从而可以模拟外部的输入。“Serial”:打开串行口的状态和设置对话框。“Timer”:打开定时器的状态和设置对话框。,2.3STC15F2K60S2单片机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电源/用户系统电源。如电流大则由用户系统自己给自己提供电源,VCC不连接在一起,GND要相连。每次重新下载程序调试时,用户系统必须手工停电/上电。,计算机、仿真器和学习板连接示意图,使用IAP15F2K62S2仿真器可以仿真宏晶STC15系列的单片机。使用过程如下:,使用Keil集成环境在线调试C51程序,2软件设置,按照上一小节中介绍的方法创建一个工程ex2-2,然后输入上述程序,保存为ex2-2.c并加入到项目中。,使用Keil集成环境在线调试C51程序,3.仿真代码占用的资源程序空间:6K字节(0 xE0000 xF7FF,用户在程序中不要使用)常规RAM:0字节XRAM:768字节(0 x04000 x06FF,用户在程序中不要使用)I/O:P3.0/P3.1用户在程序中不得操作P3.0/P3.1,不要使用INT4/T2CLKO/P3.0,不要使用T2/P3.1,不要使用外部中断INT4,不要使用T2的时钟输出功能,不要使用T2的外部计数功能,使用Keil集成环境在线调试C51程序,4Keil环境设置设置晶振频率使用ProjectOptionsforTargetTarget命令打开选项设置窗口,如下图所示:,在此编辑框中输入晶振频率,使用Keil集成环境在线调试C51程序,4Keil环境设置设置Output选项选中“CreateHEXFile”复选框,选中此处,使用Keil集成环境在线调试C51程序,4Keil环境设置选择硬件仿真单击“Debug”选项卡,选中右半部分中的“Use”,从下拉列表框中选择“KeilMonitor-51Driver”,并选中“Runtomain”选项。如下图所示。,使用Keil集成环境在线调试C51程序,4Keil环境设置设置串口在上一页图片中,单击“Settings”按钮,弹出串口设置对话框,使用Keil集成环境在线调试C51程序,4Keil环境设置设置完成后,就可以进行程序的调试了。使用仿真器进行程序的仿真时,需要注意如下问题:仿真器与计算机USB连接须等待10秒以上,等仿真器上电稳定后再进行程序的调试;每次调试程序之前,需要重新上电;不要关中断;当全速运行程序时,若执行“Halt”命令后出现如右上图所示的对话框,请选择”Continue”按钮;调试时若出现右下图所示情况,可能的原因有以下几点:keil的选项设置不正确,按照Keil环境设置的需要重新设置串口设置不正确,按图2-24所示重新设置串口程序正在全速运行或调试前单片机未复位,给学习板重新上电复位后再进行程序调试把仿真器与电脑重新连接,等待10秒以上稳定后再调试程序,2.4利用ISP工具将程序下载到单片机中验证程序,从网站上下载宏晶科技公司提供的ISP下载工具免安装版,解压缩到任一文件夹中双击其中的应用程序stc-isp-15xx-v6.19.exe即可启动。启动后的界面如下图所示:,利用ISP工具将程序下载到单片机中验证程序,下载程序时,可以按照下面的步骤进行:从“单片机型号”下拉列表框中选择所使用的单片机的型号,如选择STC15F2K60S2选择串口号。从“串口号”下拉列表框中选择计算机所用的串行口,如COM1、COM2等。获取串口的方法是,用鼠标右键单击计算机桌面上的“我的电脑”图标,从弹出的菜单中选择“管理”,然后点击系统工具下的设备管理器,在设备管理器中单击“端口”左边的“+”号选择波特率,根据实际使用效果,从“最低波特率”下拉框和“最高波特率”下拉框中选择限制最低和最高通信波特率,如57600、38400或者19200等单击“打开程序文件”按钮,打开要下载的用户程序文件。用户程序文件的后缀名为.bin或者.hex进行时钟的选择、启动下载的条件等单击“下载/编程”按钮,将用户程序下载到单片机内部。重复下载时,可重复执行该操作,也可单击“重复编程”按钮。,找到串口号,习题,标准C语言中的数据类型有哪几种?列举并说明C语言中的基本运算符。KeilC对ANSIC进行了哪些扩展?在KeilC中如何声明中断函数?如何在Keil集成环境中调试单片机的C语言程序?详细叙述调试过程。用C编写程序,点亮一灯。并在Keil集成环境中仿真。用C语言编写程序:设单片机的系统时钟f=12MHz,要求在P1.0脚上输出周期为2ms的方波。编程控制一盏灯,实现灯不同速度的的闪烁,每个速度闪烁10次,实现不同速度循环闪烁。,
展开阅读全文
相关资源
相关搜索

当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!