单片机原理及应用(C语言版)4_ppt.txt

大学单片机原理及应用(C语言版)-周国运-课件PPT

收藏

资源目录
跳过导航链接。
大学单片机原理及应用(C语言版)-周国运-课件PPT.zip
单片机原理及应用(C语言版)-周国运-PPT演示文稿
教案资料.ppt---(点击预览)
单片机原理及应用(C语言版)-周国运-PPT课件文件
文稿ppt_ppt.txt---(点击预览)
文稿ppt_ppt.jpg---(点击预览)
文稿ppt.ppt---(点击预览)
单片机原理及应用(C语言版)-周国运-大学教学资料
(课件资料)《单片机原理及应用(C语言版)》-周国运-电子教案
压缩包内文档预览:(预览前20页/共27页)
预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图
编号:21836325    类型:共享资源    大小:16.05MB    格式:ZIP    上传时间:2019-09-06 上传人:QQ24****1780 IP属地:浙江
25
积分
关 键 词:
大学 单片机 原理 应用 利用 运用 语言版 国运 课件 ppt
资源描述:
大学单片机原理及应用(C语言版)-周国运-课件PPT,大学,单片机,原理,应用,利用,运用,语言版,国运,课件,ppt
内容简介:
单片机原理及应用 (C语言版)第4章 单片机C语言及程序设计主 编:周国运本章制作:周国运中国水利水电出版社第4章 单片机C语言及程序设计4.1 C51概述4.2 C51数据类型及存储4.3 C51变量的定义及数据存储区域4.4 C51位变量的定义4.5 C51特殊功能寄存器的定义4.6 C51指令的定义4.7 C51的输入/输出4.8 C51函数的定义4.9 C51与汇编语言混合编程4.10 C51集成开发软件Keil C目 录第4章 单片机C语言及程序设计本章主要讨论C51变量的定义和函数的定义,以及Keil C软件的使用等。本章内容的安排,认为读者已经学习过C语言,具有C语言的基本知识,因此,本章内容完全是结合单片机来讲解,也就是补充C语言在单片机方面的概念、数据定义和函数定义等。通过本章学习,使读者能够比较顺利地编写C51程序。 4.1 C51概述主要内容4.1.1 C语言编程的优势4.1.2 C51与ANSI C的区别4.1.3 C51扩展的关键字4.1 C51概述学习单片机C语言的必要性随着单片机性能的不断提高,C语言编译调试工具的不断完善,以及现在对单片机产品辅助功能的要求、对开发周期不断缩短的要求,使得越来越多的单片机编程人员转向使用C语言,因此有必要在单片机课程中讲授“单片机C语言”。 “C51”概念:为了与ANSI C区别,把“单片机C语言”称为“C51”,也称为“Keil C”。 4.1.1 C语言编程的优势在编程方面,使用C51较汇编语言有诸多优势:1)编程容易 2)容易实现复杂的数值计算3)容易阅读与交流4)容易调试与维护程序5)容易实现模块化开发 6)程序可移植性好 4.1.2 C语言与ANSI 的区别用汇编语言编写单片机程序时,必须要考虑其存储器的结构,尤其要考虑其片内数据存储器、特殊功能寄存器是否正确合理的使用,以及按照实际地址端口数据的处理。用C51编写程序,虽然不像汇编语言那样需要具体地组织、分配存储器资源,但是C51对数据类型和变量的定义,必须要与单片机的存储结构相关联,否则编译器不能正确地映射定位。 4.1.2 C语言与ANSI 的区别用C51编写单片机程序,与用ANSI C编写程序的不同之处是,需要根据单片机存储器结构及内部资源,定义相应的数据类型和变量。其它的语法规定、程序结构及程序设计方法,都与ANSI C相同。所以本章主要介绍C51各种变量的定义、指针定义、函数定义和混合编程。 4.1.3 C51扩展的关键字由于单片机在结构及编程上的特殊要求,C51有自己的特殊关键字,称之为C51扩展的关键字,下面给出常用的C51扩展的关键字。_at_bdatabit codedataidata interruptpdatareentrant sbitsfrsfr16usingvolatilexdata这些关键字在后面会陆续接触到,此处先不给出它们的含义。 4.2 C51数据类型及存储主要内容4.2.1 C51的数据类型4.2.2 C51数据的存储4.2.1 C51的数据类型4.2.1 C51的数据类型数据类型转换1)自动转换转换规则是向高精度数据类型转换、向有符号数据类型转换。如字符型变量与整型变量相加时,则位变量先转换字符型或整型数据,然后相加。2)强制转换像ANSI C一样,通过强制类型转换的方式进行转换。如:unsignedintb;floatc;b=(int)c; 4.2.2 C51数据的存储MCS-51单片机只有bit和unsigned char两种数据类型支持机器指令,而其它类型的数据都需要转换成bit或unsigned char型进行存储。为了减少单片机的存储空间和提高运行速度,要尽可能地使用unsigned char型数据。 一、位变量的存储bit和sbit型位变量,直接存于RAM的位寻址空间,包括低128位和特殊功能寄存器位。 4.2.2 C51数据的存储二、字符变量的存储字符变量(char):无论是unsigned char数据还是signed char数据,均为1个字节,能够被直接存储在RAM中,可以存储在00x7f区域,也可以存储在0x800xff区域,与变量的定义有关。unsigned char数:可直接被MSC-51接受signed char数据:用补码表示。需要额外的操作来测试、处理符号位,使用的是两种库函数,代码量大,运算速度降低。4.2.2 C51数据的存储三、整型变量的存储整型变量(int):不管是unsigned int数据还是signed int数据,均为2个字节,其存储方法是高位字节保存在低地址(在前面),低位字节保存在高地址(在后面) 。例如,整型变量的值为0x1234,在内存中的存放如右图所示。signed int数据用补码表示。地址低高4.2.2 C51数据的存储四、长整型变量的存储长整型变量(long)为4个字节,其存储方法与整型数据一样,是最高位字节保存的地址最低(在最前面),最低位字节保存的地址最高(在最后面)。如长整型变量的值为0x12345678,在内存中的存放方法如右图所示。不管是unsigned long数据还是signed long数据。地址低高4.2.2 C51数据的存储五、浮点型变量的存储浮点型变量(fload)占4个字节,用指数方式表示,其具体格式与编译器有关。对于Keil C,采用的是IEEE-754标准,具有24位精度,尾数的最高位始终为1,因而不保存。具体分布为:1位符号位,8位阶码位,23位尾数,如下图所示。 4.2.2 C51数据的存储符号位S:1表示负数,0表示正数。阶码:用移码表示。如,实际阶码-126用1表示,实际阶码0用127表示,即实际阶码数加上127得到阶码的表达数。阶码数值范围:-126+128。4.2.2 C51数据的存储例如浮点数-12.5符号位为1,12.5的二进制数为1100.1=1.1001E+0011,阶码数值为3+127=130=10000010B,尾数为1001。因此,其十六进制数为0xC1480000,则存储结构如右图所示。 地址低高说明:教材中存储结构是错的。4.3 C51变量的定义及数据存储区域主要内容4.3.1 C51变量的定义4.3.2 C51变量的存储类型4.3.3 C51变量的存储区域4.3.4 C51变量定义举例4.3.5 C51变量的存储模式4.3.6 C51变量的绝对定位4.3.1 C51变量的定义C51变量定义的一般格式为:存储类型数据类型 存储区变量名1=初值 ,变量名2=初值 ,或存储类型存储区 数据类型 变量名1=初值 ,变量名2=初值 ,可见变量(非位变量)的定义由4部分组成,即在变量定义时,指定变量4种属性。数据类型:在前面的4.2中已经叙述过,对于变量名也无须多说,下面主要解释“存储类型”和“存储区”等概念。 4.3.2 C51变量的存储类型存储类型这个属性我们仍沿用ANSI C的说法,尽量不改变原来的含义。按照ANSI C,C语言的变量有4种存储类型:动态存储(auto)静态存储(static)全局存储(extern)寄存器存储(register) 4.3.2 C51变量的存储类型一、动态存储动态(存储)变量:用auto定义的为动态变量,也叫自动变量。作用范围:在定义它的函数内或复合语句内部。当定义它的函数或复合语句执行时,C51才为变量分配存储空间,结束时所占用的存储空间释放。定义变量时,auto可以省略,或者说如果省略了存储类型项,则认为是动态变量。动态变量一般分配使用寄存器或堆栈。 4.3.2 C51变量的存储类型二、静态存储静态(存储)变量:用static定义的为静态变量。分为内部静态和外部静态变量。内部静态变量:在函数体内定义的为内部静态变量。在函数内可以任意使用和修改,函数运行结束后会一直存在,但在函数外不可见,即在函数体外得到保护。外部静态变量:在函数体外部定义的为外部静态变量。在定义的文件内可以任意使用和修改,外部静态变量会一直存在,但在文件外不可见,即在文件外得到保护。 4.3.2 C51变量的存储类型三、外部存储外部(存储)变量:用extern声明的变量为外部变量,是在其它文件定义过的全局变量。用extern声明后,便可以在所声明的文件中使用。需要注意的是:在定义变量时,即便是全局变量,也不能使用extern定义。 4.3.2 C51变量的存储类型四、寄存器存储寄存器(存储)变量:用register定义的变量为寄存器变量。寄存器变量存放在CPU的寄存器中,这种变量处理速度快,但数目少。C51中的寄存器变量: C51的编译器在编译时,能够自动识别程序中使用频率高的变量,并将其安排为寄存器变量,用户不用专门声明。 4.3.3 C51变量的存储区域变量的存储区属性是单片机扩展的概念,非常重要,它涉及到7个新的关键字。MCS-51单片机有四个存储空间,分成三类,它们是片内数据存储空间、片外数据存储空间和程序存储空间。 MCS-51单片机有更多的存储区域:由于片内数据存储器和片外数据存储器又分成不同的区域,所以单片机的变量有更多的存储区域。在定义变量时,必须明确指出是存放在哪个区域。4.3.3 C51变量的存储区域4.3.4 C51变量定义举例1)定义存储在data区域的动态unsigned char变量:unsigned char data sec=0, min=0, hou=0;2)定义存储在data区域的静态unsigned char变量:static unsigned char data scan_code=0xfe;3)定义存储在data区域的静态unsigned int变量:static unsigned int data dd;4.3.4 C51变量定义举例4)定义存储在bdata区域的动态unsigned char变量:unsigned char bdata operate, operate1;/定义指示操作的可位寻址的变量5)定义存储在idata区域的动态unsigned char数组:unsigned char idata temp20; 6)定义在pdata区域的动态有符号int数组:int pdata send_data30;/定义存放发送数据的数组 4.3.4 C51变量定义举例7)定义存储在xdata区域的动态unsigned int数组:unsigned int xdata receiv_buf50;/定义存放接受数据的数组8)定义存储在code区域的unsigned char数组:unsigned char code dis_code10=0x3f, 0x06, 0x5b, 0x4f, 0x66,0x6d,0x7d,0x07,0x7f,0x6f; /定义共阴极数码管段码数组4.3.5 C51变量的存储模式存储模式:如果在定义变量时缺省了存储区属性,则编译器会自动选择默认的存储区域,也就是存储模式。变量的存储模式也就是程序(或函数)的编译模式。编译模式分为三种:小模式(small)、紧凑模式(compact)和大模式(large)。编译模式由编译控制命令决定。存储模式(编译模式)决定了变量的默认存储区域和参数的传递方法。 4.3.5 C51变量的存储模式一、small模式在small模式下,变量的默认存储区域是“data”、“idata”,即未指出存储区域的变量保存到片内数据存储器中,并且堆栈也安排在该区域中。small模式的特点:存储容量小,但速度快。在small模式下参数的传递:通过寄存器、堆栈或片内数据存储区完成的。 4.3.5 C51变量的存储模式二、compact模式在compact模式下,变量的默认存储区域是“pdata”,即未指出存储区域的变量保存到片外数据存储器的一页中,最大变量数为256字节,并且堆栈也安排在该区域中。compact模式的其特点:是存储容量较small模式大,速度较small模式稍慢,但比large模式要快。在compact模式下参数的传递:通过片外数据区的一个固定页完成的。 4.3.5 C51变量的存储模式三、large模式在large模式下,变量的默认存储区域是“xdata”,即未指出存储区域的变量保存到片外数据存储器,最大变量数可达64KB,并且堆栈也安排在该区域中。large模式的特点:存储容量大,速度慢large模式下参数的传递方式:参数的传递也是通过片外数据存储器完成的。 4.3.5 C51变量的存储模式C51支持混合模式:即可以对函数设置编译模式,所以在large模式下,可以对某些函数设置为compact模式或small模式,从而提高运行速度。默认编译模式:如果文件或函数未指明编译模式,则编译器按small模式处理。编译模式控制命令: “#pragma small(或compact、large)”应放在文件的开始。 4.3.6 C51变量的绝对定位C51有三种方式可以对变量(I/O端口)绝对定位:绝对定位关键字_at_ 、指针、库函数的绝对定位宏。对于后两种方式,在后面指针一节介绍。C51扩展的关键字_at_专门用于对变量作绝对定位,_at_使用在变量的定义中,其格式为:存储类型 数据类型 存储区 变量名1 _at_ 地址常数,变量名2 4.3.6 C51变量的绝对定位举例说明_at_的使用方法1)对data区域中的 unsigned char变量aa作绝对定位:unsignedchardata aa _at_ 0x30;2)对pdata区域中的 unsigned int数组cc作绝对定位:unsignedint pdata cc10 _at_ 0x34;3)对xdata区域中的 unsigned char变量printer_port作绝对定位:unsignedcharxdata printer_port _at_ 0x7fff; 4.3.6 C51变量的绝对定位对变量绝对定位的几点说明:1)绝对地址变量在定义时不能初始化,因此不能对code型变量绝对定位;2)绝对地址变量只能够是全局变量,不能在函数中对变量绝对定位;3)绝对地址变量多用于I/O端口,一般情况下不对变量作绝对定位;3)位变量不能使用_at_绝对定位。4.4 C51位变量的定义主要内容4.4.1 bit型位变量的定义4.4.2 sbit型位变量的定义4.4.1 bit型位变量的定义常说的位变量指的就是bit型位变量。C51的bit型位变量定义的一般格式为:存储类型 bit 位变量名1=初值 ,位变量名2=初值 ,bit位变量被保存在RAM中的位寻址区域(字节地址为0x200x2f,16字节)。例如:bitflag_run,receiv_bit=0;static bitsend_bit; 4.4.1 bit型位变量的定义两点说明:1)bit型位变量与其它变量一样,可以作为函数的形参,也可以作为函数的返回值,即函数的类型可以是位型的;2)位变量不能定义指针,不能定义数组。 4.4.2 sbit型位变量的定义对于能够按位寻址的特殊功能寄存器、定义在位寻址区域的变量(字节型、整型、长整型),可以对其各位用sbit定义位变量。为了方便起见,分开讨论按位寻址的特殊功能寄存器中位变量的定义、按位寻址的变量中位变量的定义。4.4.2 sbit型位变量的定义一、特殊功能寄存器中位变量定义能够按位寻址的特殊功能寄存器中位变量定义的一般格式为:sbit位变量名 位地址表达式这里的位地址表达式有三种形式:直接位地址特殊功能寄存器名带位号字节地址带位号4.4.2 sbit型位变量的定义1、用直接位地址定义位变量这种情况下位变量的定义格式为:sbit位变量名 位地址常数这里的位地址常数范围为0x800xff,实际是定义特殊功能寄存器的位。例如:sbitP0_0=0x80; sbitP1_1=0x91;sbitRS0=0xd3; /定义PSW的第3位sbitET0=0xa9; /定义IE的第1位 4.4.2 sbit型位变量的定义2、特殊功能寄存器名带位号定义这时位变量的定义格式为:sbit位变量名 特殊功能寄存器名位号常数这里的位号常数为07。例如:sbitP0_3=P03; sbitP1_4=P14;sbitOV=PSW2; /定义PSW的第2位sbitES=IE4; /定义IE的第4位 4.4.2 sbit型位变量的定义3、寄存器地址带位号定义位变量在这种情况下位变量的定义格式为:sbit位变量名 特殊功能寄存器地址位号常数这里的位号常数同上,为07。例如:sbitP0_6=0x806; sbitP1_7=0x907;sbitAC=0xd06; /定义PSW的第6位sbitEA=0xa87;/定义IE的第7位 4.4.2 sbit型位变量的定义4、几点说明1)用sbit定义的位变量,必须能够按位操作,而不能够对无位操作功能的位定义位变量。2)用sbit定义位变量,必须放在函数外面作为全局位变量,而不能在函数内部定义。3)用sbit每次只能定义一个位变量。4)对其它模块定义的位变量(bit型或 sbit型)的引用声明,都使用bit。5)用sbit定义的是一种绝对定位的位变量(因为名字是与确定位地址对应的),具有特定的意义,在应用时不能像bit型位变量那样随便使用。4.4.2 sbit型位变量的定义二、位寻址区变量的位定义对bdata型变量(字节型、整型、长整型) ,被保存在RAM中的位寻址区,因此可以对bdata型变量各位作位变量定义。这样,既可以对bdata型变量作字节(或整型、长整型)操作,也可以作位操作。bdata型变量的位定义格式:sbit 位变量名 bdata型变量名位号常数 4.4.2 sbit型位变量的定义bdata型变量为在此之前应该是定义过的,位号常数可以是07(8位字节变量),或015(16位整型变量),或031(32位字长整型变量)。例如:unsignedchar bdataoperate;对operate的低4位作位变量定义:sbit flag_key=operate0; /键盘标志位sbit flag_dis=operate1; /显示标志位sbit flag_mus=operate2; /音乐标志位sbit flag_run=operate3; /运行标志位 4.5 C51特殊功能寄存器的定义主要内容4.5.1 8位特殊功能寄存器的定义4.5.2 16位特殊功能寄存器的定义4.5.1 8位特殊功能寄存器的定义定义的一般格式为:sfr特殊功能寄存器名 地址常数地址常数范围:0x800xff。特殊功能寄存器定义例子(见reg51.h、reg52.h等文件):sfrP0=0x80;/定义P0寄存器sfrP1=0x90;/定义P1口寄存器sfrPSW=0xd0;/定义PSWsfrIE=0xa8;/定义IE 4.5.2 16位特殊功能寄存器的定义定义的一般格式为:sfr16 特殊功能寄存器名 地址常数地址常数范围:0x800xff。例如(见reg51.h、reg52.h等文件):sfr16 DPTR=0x82;sfr16 T2=0xcc; /含TL2和TH2sfr16 RCAP2=0xca; /含RCAP2L/和RCAP2H, 0xca为RCAP2L的地址4.5.2 16位特殊功能寄存器的定义几点说明:1)定义特殊功能寄存器中的地址必须在0x800xff范围内。2)定义特殊功能寄存器,必须放在函数外面作为全局变量。3)用sfr或sfr16每次只能定义一个特殊功能寄存器。4)像sbit一样,用sfr或sfr16定义的是绝对定位的变量(因为名字是与确定地址对应的),具有特定的意义,在应用时不能像一般变量那样随便使用。 4.6 C51指针的定义主要内容4.6.1 通用指针4.6.2 存储器专用指针4.6.3 指针变换4.6.4 C51指针应用4.6 C51指针的定义由于MCS-51单片机有三种不同类型的存储空间,并且还有不同的存储区域,因此C51指针的内容更丰富。指针除了具有像变量的四种属性(存储类型、数据类型、存储区、变量名)外,按存储区,将指针分为通用指针和不同存储区域的专用指针。 4.6.1 通用指针所谓通用指针,就是通过该类指针可以访问所有的存储空间。在C51库函数中通常使用这种指针来访问。通用指针用3个字节来表示:第一个字节:表示指针所指向的存储空间第二个字节:为指针地址的高字节第三个字节:为指针地址的低字节4.6.1 通用指针通用指针的定义与一般C语言指针的定义相同,其格式为:存储类型 数据类型 *指针名1,*指针名2 ,例如:unsigned char *cpt;int *dpt;long *lpt;static char *ccpt; 通用指针的特点:定义简单访问所有空间访问速度慢 4.6.2 存储器专用指针所谓存储器专用指针,就是通过该类指针,只能够访问规定的存储空间区域。指针本身占用1个字节(data *,idata *,bdata *,pdata *)或2个字节(xdata *,code *)。存储器专用指针的一般定义格式为:存储类型 数据类型 指向存储区 *指针存储区 指针名1 ,*指针存储区 指针名2, 4.6.2 存储器专用指针指向存储区:是指针变量所指向的数据存储空间区域。不能够缺省。指针存储区:是指针变量本身所存储的空间区域。缺省时认为指针存储区在默认的存储区域,其默认存储区域决定于所设定的编译模式。指向和指针存储区,两者可以是同一个区域,但多数情况下不会是同一个区域。 4.6.2 存储器专用指针存储器专用指针例子:unsigned char data *cpt1, *cpt2; signed int idata *dpt1, *dpt2;unsigned char pdata *ppt; signed long xdata *lpt1, *lpt2;unsigned char code *ccpt;上面所定义的指针虽然所指向的空间不同,但指针变量本身都存储在默认的存储区域。 4.6.2 存储器专用指针又如:1)unsigned char data *idata cpt1,*idata cpt2; 2)signed int idata *data dpt1, *data dpt2; 3)unsigned char pdata *xdata ppt; 4)signed long xdata *lpt1, *xdata lpt2; 5)unsigned char code *data ccpt; 绿色关键字为指针所指向的存储区蓝色关键字为指针本身所存储的区域4.6.2 存储器专用指针注意:(1)要区分指针变量指向的空间区域和指针变量本身所存储的区域;(2)定义时,前者不能缺省,而后者可以缺省;(3)指针变量的长度:指向不同的区域,占用的字节数不同。说明:指针变量本身所存储的区域,在定义指针时一般都省略了,指针变量本身保存在缺省存储的区域中。定义时,缺省指针存储的区域,显得简单,并且对初学者更容易理解。 4.6.3 指针变换一、通用指针格式 由前面的讨论知,通用指针由3个字节组成,第一个字节为数据的存储区域,后两个字节为指针地址,第一个字节的存储区域编码如表4-6所示。 4.6.3 指针变换一、指针转换指针转换有两种途径,一种是显式的编程转换,另一种是隐式的自动转换。指针的编程转换:(1)通用指针的第一字节,与专用指针的指向数据区属性,二者相互转换;(2)通用指针后两个字节的地址,与专用指针值的转换。指针的隐式自动转换:由编译器在进行编译时自动完成。 4.6.4 C51指针应用指针在PC机上的C语言中应用很广泛。在单片机中,由于不使用操作系统,指针的应用可以独立于变量,独立地指向所需要访问的存储空间位置。本节通过例子来学习和认识C51指针的这种独立应用性。下面介绍两种利用指针访问存储区的方法。也可以访问函数。4.6.4 C51指针应用二、通过指针定义的宏访问存储器1、访问存储器宏的定义用指针定义的、访问存储器宏的格式: #define 宏名 (数据类型 volatile 存储区*)0)格式中的数据类型主要为无符号的字符型数、整型;格式中的存储区域主要使用data、idata、pdata、xdata和code类型,不使用bdata存储区类型。 4.6.4 C51指针应用格式中的关键字“volatile”: “volatile”是单片机中定义的,其含义为:这种变量在程序执行中可被隐含地改变而编译器无法检测到,告知编译器不要做优化处理,使应用者能够得到正确的变量值。volatile的应用:volatile常用于定义寄存器,特别是状态寄存器,因为状态寄存器的值不是程序员设置,而是单片机在运行中CPU设置的。特别说明:“volatile”的含义与教材上表述不太一致,此处表述直观更容易理解。4.6.4 C51指针应用2、库函数中访问存储器宏的原型C51编译器提供了两组用指针定义的绝对存储器访问的宏,其原型如下。 1)按字节访问存储器的宏:#define CBYTE (unsigned char volatile code*)0)#define DBYTE (unsigned char volatile data*)0)#define PBYTE(unsigned char volatile pdata*)0)#define XBYTE (unsigned char volatile xdata*)0) 4.6.4 C51指针应用2)按整型双字节访问存储器的宏:#define CWORD (unsigned int volatile code*)0) #define DWORD (unsigned int volatile data*)0)#define PWORD (unsigned int volatile pdata*)0)#define XWORD (unsigned int volatile xdata*)0)无idata型,不能访问片内RAM高128字节区域(0x800xff),需要时可以自己定义。这些宏定义原型放在absacc.h文件中,使用时需要用预处理命令把该头文件包含到文件中,形式为:#include 。 4.6.4 C51指针应用3、绝对访问存储器宏的应用使用宏定义访问存储器的形式类似于数组。1)按字节访问存储器宏的形式宏名地址即数组中的下标就是存储器的地址,因此使用起来非常方便。例如:DBYTE0x30=48;/给片内RAM送数据XBYTE0x0002=0x36;/给片外RAM送数据dis_buf0=CBYTETABLE+5; /从CODE区读取数据4.6.4 C51指针应用2)按整型数访问存储器宏的形式宏名下标由于整型数占两个字节,所以下标与地址的关系为:地址=下标2。由于数组中的下标与存储器的地址是倍数关系,使用时要注意。例如:DWORD0x20=0x1234; /给0x40、0x41送数XWORD0x0002=0x5678;/给4、5单元送数通过指针定义的宏访问存储器这种方法,特别适用于访问I/O口。 4.6.4 C51指针应用一、通过专用指针直接访问存储器使用指针直接访问存储器对PC机是禁止的,但对于单片机来说使用时注意是可以的。使用指针直接访问存储器方法是先定义所需要的指针,给指针赋地址值,然后使用指针访问存储器。例如:unsigned char xdata *xcpt;xcpt=0x2000;*xcpt=123; /给0x2000送数xcpt+;*xcpt=234; /给0x2001送数4.6.4 C51指针应用例4-1 编写程序,将单片机片外数据存储器中地址从0x1000开始20个字节数据,传送到片内数据存储器地址从0x30开始的区域。程序段如下:unsigned char data i, *dcpt; unsigned char xdata*xcpt; dcpt=0x30;/给指针赋地址xcpt=0x1000; for(i=0;i20;i+)*(dcpt+i)=*(xcpt+i); dcpt和xcpt两个指针变量存储在什么地方?4.6.4 C51指针应用例4-2 在数字滤波中有一种叫做“中值滤波”技术,就是对采集的数据按照从大到小或者从小到大进行排序,然后取中间位置的数作为采样值。试编写一函数,对存放在片内数据存储器中,从0x50开始的21个单元的采样数据,用冒泡法排序进行中值滤波,并把得到的中值数据返回。中值滤波函数如下:unsigned char median_filter() unsigned char data *point,i,j,n,d; 4.6.4 C51指针应用for(i=0;i20;i+)/外层循环20次point = 0x50;/point指向0x50处n=20i;/n为内层循环次数for(j=0;jn;j+)/内层循环if(*point*(point+1)/从大到小排d=*point; *point=*(point+1);*(point+1)=d;point+;/指针指向下一个数point=0x50+10;/指向位于中间的数return *point;/返回得到的中值 4.7 C51的输入/输出主要内容4.7.1 基本输入/输出函数4.7.2 格式输出函数printf4.7.3 格式输入函数scanf4.7 C51的输入/输出C51的输入和输出函数的形式虽然与ANSI C的一样,但实际意义和使用方法都大不一样,因此,有必要专门介绍一下C51的输入/输出函数。 在C51的I/O函数库中定义的I/O函数,都是以_getkey和putchar函数为基础。这些I/O函数包括:字符输入/输出函数getchar和putchar,字符串输入/输出函数gets和puts,格式输入/输出函数printf和scanf等。4.7 C51的输入/输出C51的输入/输出函数,都是通过单片机的串行接口实现的。在使用这些I/O函数之前,必须先对单片机的串行口、定时器/计数器T1进行初始化。假设单片机的晶振为11.0592MHz,波特率为9600bps,则初始化程序段为:SCON=0x52;/设置串口方式1收、发TMOD=0x20;/设置T1以模式2工作TL1=0xfd;/设置T1低8位初值TH1=0xfd;/设置T1自动重装初值TR1=1;/开T1 4.7.1 基本输入/输出函数1、基本输入函数getkeygetkey函数是基本的字符输入函数,原型为char _getkey(void)函数功能:从单片机串行口读入一个字符,如果没有字符输入则等待,返回值为读入的字符,不显示。可重入函数。字符输入函数getchar()功能:与getkey基本相同,唯一的区别:还要从串行口返回字符。4.7.1 基本输入/输出函数2基本输出函数putcharputchar函数是基本的字符输出函数,其原型为:char putchar(char)函数功能:是从单片机的串行口输出一个字符,返回值为输出的字符。putchar为可重入函数。 4.7.2 格式输出函数printf函数功能:通过单片机的串行口输出若干任意类型的数据。格式如下:printf(格式控制,输出参数表)格式控制是用双引号括起来的字符串,也称为转换控制字符串,它包括三种信息:格式说明符普通字符转义字符。4.7.1 格式输出函数printf1)格式说明符:由百分号“%”和格式字符组成,其作用是指明输出数据的格式,如%d、%c、%s等,详细情况见表4-3。2)普通字符:这些字符按原样输出,主要用来输出一些提示信息。3)转义字符:由“”和字母或字符组成,它的作用是输出特定的控制符,如转义字符n的含义是输出换行,详细情况见表4-4。 4.7.1 格式输出函数printf4.7.1 格式输出函数printf用printf函数输出例子(假设y已定义过,也赋值过):printf(“x=%d”,36) ;/从串行口输出x=36printf(“y=%d”,y) ;/从串行口输出y=y的值printf(“c1=%c,c2=%c”,A,B) ; /从串行口输出c1=A,c2=Bprintf(“%sn”,“OK,Send data begin!”) ;/从串行口输出OK, Send data begin!和n 4.7.2 格式输入函数scanfscanf函数的功能:通过单片机串行口实现各种数据输入。函数格式如下:scanf(格式控制,地址列表)格式控制格式控制与printf函数的类似,也是用双引号括起来的一些字符,包括三种信息:格式说明符、普通字符和空白字符。1)格式说明符:由百分号“%”和格式字符组成,其作用是指明输入数据的格式,见表4-5。 4.7.2 格式输入函数scanf2)普通字符:在输入时,要求这些字符按原样输入。3)空白字符:包括空格、制表符和换行符等,这些字符在输入时被忽略。地址列表:是由若干个地址组成,它可以是指针变量、变量地址(取地址运算符“&”加变量)、数组地址(数组名)或字符串地址(字符串名)等。 4.7.2 格式输入函数scanf用scanf函数输入例子(假设x、y、z、c1、c2是定义过的变量,str1是定义过的指针):scanf(“%d”,&x);scanf(“%d%d”,&y,&z);scanf(“%c%c”,&c1,&c2);scanf(“%s”,str1);在实际的串行通信中,传输的数据多数是字符型和字符串,以字符串居多,往往把数字型数据转换成字符串传输。 4.7.2 格式输入函数scanf例4-3 有一单片机时钟系统,为了演示输出函数putchar和输入函数getkey的应用,编写程序,用串行口方式1自发自收,每一秒钟从串行口发送一次时间数据的时、分、秒,从串行口接收到数据后,送给6位数码管显示。设晶振频率为11.0592MHz,波特率为9600bps。不用编写时钟计时函数和数码管显示函数。4.7.2 格式输入函数scanf#include /包含头文件#include /包含I/O函数库unsigned char data t13;/存放原始的时分秒unsigned char data dis_buf6;/数码管显示void main(void) unsigned char data t23;/放接收的时间unsigned char data sec0=61;/秒备份unsigned char data i;4.7.2 格式输入函数scanfSCON=0x52;/串行口初始化TMOD=0x20; /设置定时器工作模式TH1=0xfd; /设置T1重装的初值TR1=1; /开T1运行while(1) if(sec0!=t12)/判断秒是否已经改变 putchar(t1i);t2i+=_getkey();4.7.2 格式输入函数scanf if(i2) dis_buf0=t20/10; dis_buf1=t20%10; dis_buf2=t21/10; dis_buf3=t21%10; dis_buf4=t22/10; dis_buf5=t22%10; i=0; sec0=t12;/更新秒备份 display( ); /调用数码管扫描显示函数4.8 C51函数的定义主要内容4.8.1 C51函数的定义4.8.2 C51中断函数的定义 C51函数的定义与ANSI C相似,但有更多的属性要求。本节先讨论函数的一般定义,然后专门给出中断函数的定义,因为中断函数有其特殊性。 4.8.1 C51函数的定义在C51中,函数的定义与ANSI C中是相同的。唯一不同的就是在函数的后面需要带上若干个C51的专用关键字。C51函数定义的一般格式如下:返回类型 函数名(形参表) 函数模式 reentrant interrupt m using n局部变量定义执行语句 4.8.1 C51函数的定义各属性含义如下:函数模式:也就是编译模式、存储模式,可以为small、compact和large。缺省时则使用文件的编译模式。reentrant:表示重入函数。所谓可重入函数,就是允许被递归调用的函数。是C51定义的关键字。 在编译时会为重入函数生成一个堆栈,通过这个堆栈来完成参数的传递和存放局部变量。重入函数不能使用bit型参数;函数返回值也不能是bit型。4.8.1 C51函数的定义interrupt m:中断关键字和中断号。 interrupt是C51定义的。C51支持32个中断源中断入口地址与中断号m的关系:中断入口地址38m。4.8.1 C51函数的定义using n:选择工作寄存器组和组号,n可以为03,对应第0组到第3组。关键字using是C51定义的。如果函数有返回值,不能使用该属性,因为返回值是存于寄存器中,函数返回时要恢复原来的寄存器组,导致返回值错误。 4.8.2 C51中断函数的定义C51函数的定义实际上已经包含了中断服务函数,但为了明确起见,下面专门给出中断处理函数的具体定义形式:void 函数名(void) 函数模式 interrupt m using n局部变量定义执行语句 4.8.2 C51中断函数的定义中断服务函数需要注意以下几点:1)中断服务函数不传递参数;2)中断服务函数没有返回值;3)中断服务函数必须有interrupt m属性;4)进入中断服务函数,ACC、B、PSW会进栈,根据需要,DPL、DPH也可能进栈,如果没有using n属性,R0R7也可能进栈,否则不进栈;5)在中断服务函数中调用其它函数,被调函数最好设置为可重入的,因为中断是随机的,有可能中断服务函数所调用的函数出现嵌套调用;6)不能够直接调用中断服务函数。 4.8.2 C51中断函数的定义例4-4 编写程序,使用定时器/计数器0定时并产生中断,实现从P1.7产生方波的功能。程序如下:#include #defineTIMER0L0x18/设振荡频率为12MHz#defineTIMER0H0xfc/定时1ms(1000微秒)void timer0_int(void) interrupt 1TL0=TIMER0L;TH0=TIMER0H;P1_7=P1_7;/产生的方波频率为500Hz 4.8.2 C51中断函数的定义voidmain(void)TMOD=0x01;/设置T1模式1定时TL0=TIMER0L;/设置T0低8位初值TH0=TIMER0H;/设置T0高8位初值IE=0x82;/开T0中断和总中断TR0=1;/开T0运行while(1);/等待中断,产生方波 4.9 C51与汇编语言混合编程主要内容4.9.1 在C51程序中嵌入汇编程序4.9.2 C51程序与汇编程序混合编程4.9 C51与汇编语言混合编程混合编程有两种方式:一种是在C语言函数中嵌入汇编语言程序,程序中没有独立的汇编语言函数,只有个别C语言函数中嵌入有汇编程序;另一种是C语言文件与汇编语言文件混合编程,程序中有独立的汇编程序函数和汇编语言文件。无论是哪种混合编程方式,采用C51后,程序的大部分是C语言,只有少部分是汇编语言。 4.9.1 在C51程序中嵌入汇编程序其方法是用编译控制指令“#pragma src”、“#pragma asm”和“#pragma endasm”实现。“#pragma src”是控制编译器将C源文件编译成汇编文件,“#pragma src”要放在文件的开始;“#pragma asm”和“#pragma endasm”指示汇编语言程序的开始和结束,分别放在汇编程序段的前面和后面。4.9.1 在C51程序中嵌入汇编程序例4-5 编写一从单片机P1口做循环右移输出的流水灯子程序。#pragma src/指示将C文件编译成汇编文件void round_lamp(void)static unsigned char lamp=0x55;P1=lamp; # pragma asm/指示汇编语言程序开始MOVA,lamp/对变量lamp做循环右移RRAMOVlamp,A# pragma endasm/指示汇编语言程序结束 4.9.2 C51程序与汇编程序混合编程在这种情况下,C语言与汇编语言程序都是独立的文件,它们的函数要相互调用,这就涉及到了汇编语言程序的参数传递和函数命名两个问题。下面先讨论汇编语言函数的命名和参数传递问题,然后讨论混合编程。 4.9.2 C51程序与汇编程序混合编程主要内容一、C51函数的命名规则二、C51函数段与数据段的格式三、C51函数的参数传递规则四、汇编语言文件及函数编写方法五、汇编语言文件编程举例六、在C语言中调用汇编语言的方法4.9.2 C51程序与汇编程序混合编程一、C51函数的命名规则从表4-8中可以看出,C51函数的命名规则主要有:函数名字符串 /不传递参数的函数_函数名字符串 /通过寄存器传递参数_?函数名字符串/通过堆栈传递参数的可重入函数 C51函数名还有其它的格式,如通过存储器传递参数的函数等,在混合编程中基本不用,所以不再介绍。 4.9.2 C51程序与汇编程序混合编程4.9.2 C51程序与汇编程序混合编程二、C51函数段与数据段的格式C51编译后对每个函数都分配一个独立的CODE段,并且汇编函数名字还要带上模块名,所以C51汇编语言函数段的格式为:?PR?函数名字符串?模块名?PR?_函数名字符串?模块名?PR?_?函数名字符串?模块名如果函数中定义有局部变量,编译时也给局部变量分配数据段,数据段的格式为:?数据段前缀?函数名?数据类型4.9.2 C51程序与汇编程序混合编程4.9.2 C51程序与汇编程序混合编程三、C51函数的参数传递规则分为调用时的参数传递和返回时参数的传递。1、调用时参数的传递分三种情况:少于等于3个参数时通过寄存器传递(寄存器不够用时通过存储区传递);多于3个时有一部分通过存储区传递;对于重入函数参数通过堆栈传递。通过寄存器传递速度最快。表4-10给出了第一种情况通过寄存器传递参数的规则。 4.9.2 C51程序与汇编程序混合编程4.9.2 C51程序与汇编程序混合编程2、函数返回值的传递当函数有返回值时,通过寄存器传递。4.9.2 C51程序与汇编程序混合编程四、汇编语言文件及函数编写方法汇编语言文件的构成主要有:定义模块名、函数声明、公共函数声明、引用函数声明、引用变量声明、函数定义等部分。1、定义模块对汇编语言文件定义模块名,一般一个文件为一个模块,也可以多个文件为同一个模块名。模块定义格式如下:NAME 模块名定义模块要放在文件的开始。例如:NAME EXAMP 4.9.2 C51程序与汇编程序混合编程2、函数声明即对本模块定义的函数作声明,其格式为:?PR?函数名?模块名 SEGMENT CODE格式中的函数名规则如上面一所述。例如:?PR?DISPLAY?EXAMP SEGMENT CODE?PR?_RIGHT?EXAMP SEGMENT CODE?PR?_?MUSIC?EXAMP SEGMENT CODE说明:函数的声明放在文件的前面,一般在模块定义之后,并且紧接着模块定义。 4.9.2 C51程序与汇编程序混合编程3、公共函数声明如果函数在其它文件(模块)中调用,必须作公共函数声明。声明格式为:PUBLIC 函数名例如:PUBLICDISPLAYPUBLIC_RIGHT_SHIFTPUBLIC_?MUSIC 声明公共函数应放在函数声明之后。 4.9.2 C51程序与汇编程序混合编程4、引用函数声明如果在汇编程序中引用了其它文件中的函数,必须作引用声明。声明格式为:EXTRN CODE(函数名)例如:EXTRNCODE(KEY)EXTRNCODE(_COUNT)函数引用声明中的“KEY” 函数不传递参数;“_COUNT”函数通过寄存器传递参数。 4.9.2 C51程序与汇编程序混合编程5、引用变量声明如果在汇编程序中引用了其它文件中的变量,必须作引用声明。声明格式为:EXTRN 存储区(变量名)其存储区域类型如表4-2所示的7种类型。例如:EXTRNDATA(TIMER_SEC)EXTRNIDATA(DIS_BUF)ENTRNXDATA(SEND_BUF) 4.9.2 C51程序与汇编程序混合编程6、函数编写格式汇编语言函数的格式如下: RSEG ?PR?函数名?模块名函数名:RET(或RETI) 4.9.2 C51程序与汇编程序混合编程五、汇编语言文件编写举例例4-6 编写一个完整的汇编语言程序文件,文件包含三个函数,分别是定时器/计数器T1产生方波信号的中断函数、循环右移多位函数和循环左移多位函数;参数传递:T1的计数初值通过全局变量T1_H、T1_L传递。左移、右移函数都有两个入口参数(被移位的数、移位的位数)和返回值(被移位后的数) ,要求通过寄存器传递。所有参数都是无符号字符型数据。4.9.2 C51程序与汇编程序混合编程程序如下:NAME EXAMP;定义模块名?PR?T1_INT?EXAMPSEGMENT CODE?PR?_RIGHT?EXAMP SEGMENT CODE?PR?_LEFT?EXAMPSEGMENT CODEPUBLIC_RIGHT;公共函数声明PUBLIC_LEFTEXTRNDATA(T1_H);引用外部变量声明EXTRNDATA(T1_L)4.9.2 C51程序与汇编程序混合编程CSEGAT001BH;设置T1中断入口LJMPT1_INTRSEG ?PR?T1_INT?EXAMP;定义T1中断处理函数T1_INT:MOVTL1, T1_LMOVTH1, T1_HCPLP1.7RETI 4.9.2 C51程序与汇编程序混合编程RSEG ?PR?_RIGHT?EXAMP; 右移函数_RIGHT : ;R7中为第1个参数,MOV A, R7;为将被移位的数RIGHT_LP: ;R5为第2个参数,移位的位数RRA;右移1位DJNZ R5, RIGHT_LPMOV R7, A;保存返回值于R7中RET ;为被移位后的数4.9.2 C51程序与汇编程序混合编程RSEG ?PR?_LEFT?EXAMP;左移函数_ LEFT: ;R7为第1个参数,MOV A, R7;为被移位的数LEFT_LP:;R5为第2个参数, 移位的位数RL A;左移1位DJNZ R5, LEFT_LPMOV R7, A;保存返回值于R7中RET;为被移位后的数END 4.9.2 C51程序与汇编程序混合编程阅读本例注意以下几个方面: 1)函数的声明方法和定义方法 3)引用其它文件中的变量的声明方法和使用方法4)声明公共函数的方法2)对(中断处理)函数的定位方法5)函数中入口参数的传递方法,返回参数的传递方法6)外部函数的声明方法和使用方法4.9.2 C51程序与汇编程序混合编程六、在C51中调用汇编函数的方法在C语言文件中调用汇编语言中的函数,必须先声明再调用,其声明方法与声明C语言函数完全一样,即: extern 返回值类型 函数名(参数表) ;例如:extern unsigned char right_shift(char,char); extern unsigned char left_shift (char, char);对于汇编语言函数的调用方法,与调用C语言中的函数完全一样。 4.10 C51集成开发软件Keil C主要内容4.10.1 Keil C集成开发工具简介4.10.2 Keil C操作界面4.10.3 Keil C的使用4.10.4 项目的运行调试4.10 C51集成开发软件Keil CKeil C:是德国KEIL公司开发的单片机C语言编译器。其前身是FRANKLIN C51,功能相当强大。Vision2:是一个for Windows 的、集成化的C51开发环境。集成了文件编辑处理、项目管理、编译链接、软件仿真调试等多种功能,是强大的C51开发工具。在后面的讨论中,对Keil C和Vision2两个术语不做严格的区分,一般多称呼为Keil C,包含有Vision2集成开发环境之意。 4.10.1 Keil C集成工具简介一、编译器和链接器Keil C的编译器和链接器包括C51、A51、L51和BL51。C51是C语言编译器,其功能是将C源代码编译生成可重新定位的目标模块。A51是汇编语言编译器,其功能是将汇编源代码编译生成可重新定位的目标模块。L51是链接/定位器,其功能是将汇编源代码和C源代码生成的可重定位的目标模块文件(.OBJ),与库文件链接、定位生成绝对目标文件。 4.10.1 KeilC集成工具简介BL51也是链接/定位器,除了具有L51所有的功能之外, (1)可以链接定位大于64KB的程序;(2) 具有代码域及域切换功能;(3)可用于RTX51实时多任务操作系统。二、LIB51库管理器LIB51库管理器可以把由汇编器、编译器创建的目标文件构建成目标库(.LIB)。这些库是按规定格式排列的目标模块,可在以后被链接器所使用。4.10.1 KeilC集成工具简介三、模拟调试器Keil C有三个模拟调试器。1、软件模拟调试器dScope51(1)模拟程序运行与调试,包括C、汇编、宏汇编程序;(2)模拟CPU及其外围器件,如串行口、定时器/计数器、I/O口等。2、硬件调试器tScope51tScope51用于对硬件目标板进行调试。3、监视程序Monitor51通过串行口,PC机与目标板进行通信,利用 Monitor51,在PC机上显示程序的运行情况4.10.2 Keil C操作界面编辑状态的操作界面主要由5部分组成:最上面的菜单栏、菜单栏下面的工具栏、左边的工程管理窗口、中间的编辑窗口、下面的输出信息窗口。菜单项主要有:文件、编辑、视图(View)、工程、调试、片内外设(Peripherals)、工具、软件版本控制系统(SVCS)、窗口、帮助。 工具都是相应菜单项的快捷操作按钮,所以,下面以介绍菜单项为主线,并指明对应的工具按钮。4.10.2 Keil C操作界面4.10.2 Keil C操作界面一、文件(File)菜单文件菜单下都是常见的项,不再给出对应的工具按钮。1)New2)Open3)Close4)Save5)Save as6)Device Database:维护器件数据库7)Print Setup:设置打印机8)Print9)Exit4.10.2 Keil C操作界面二、编辑(Edit)菜单1)Undo2)Redo:恢复上次的撤销3)Cut4)Copy5)Paste6)Indent Select Text:缩进一个制表符位7)Unindent Select Text左移一个制表符位8)Toggle Bookmark:在当前行置书签9)Goto Next Bookmark移光标到下一书签10)Goto Previous Bookmark:移光标到上一个书签4.10.2 Keil C操作界面11)Clear All Bookmark:清除当前文件中所有的书签12)Find13)Replace:查找与替换14)Find in Files:在多个文件中查找字符串15)Goto Matching Brace:寻找匹配的各种括号 4.10.2 Keil C操作界面三、查看(View)菜单1)Status Bar:显示或隐藏状态栏2)File Toolbar:显示或隐藏文件工具栏3)Build Toolbar:显示或隐藏编译工具栏4)Debug Toolbar:显示或隐藏调试工具栏5)Project Windows:显示或隐藏工程窗口6)Output Windows:显示或隐藏输出窗口7)Source Browser:打开源文件浏览器窗口8)Disassembly Windows:显示或隐藏反汇编窗口4.10.2 Keil C操作界面9)Watch & Call Stack Windows:显示或隐藏观察和堆栈窗口10)Memory Windows:显示或隐藏存储器窗口11)Code Coverage Windows:显示或隐藏代码覆盖窗口12)Performance Analyzer Windows:显示或隐藏性能分析窗口13)Symbol Windows:显示或隐藏符号变量窗口4.10.2 Keil C操作界面14)Serial Windows #1:显示或隐藏串行口窗口115)Serial Windows #2:显示或隐藏串行口窗口216)Toolbox:显示或隐藏工具箱17)Periodic Windows Update:在调试运行程序时,周期刷新调试窗口18)Workbook Mode:显示或隐藏工作簿窗口的标签19)Option:设置颜色、字体、快捷键和编辑器选项 4.10.2 Keil C操作界面四、工程(Project)菜单1)New Project:创建一个新工程2)Import Vision2 Project:导入工程文件3)Open Project:打开一个已有工程4)Close Project:关闭当前工程5)Components Environment and Books:设置工具书、包含文件和库文件的路径6)Select Device for Target:从器件库中选择一种CPU4.10.2 Keil C操作界面7)Remove Groups:从工程中删去组或文件8)Option for Target:设置对象、组或文件的工具选项,设置当前目标选项,选择当前目标9)Build Target:编译修改过的文件并生成应用10)Rebuild Target:重新编译所有的文件并生成应用11)Translate:编译当前文件12)Stop Build:停止当前的编译过程4.10.2 Keil C操作界面五、调试(Debug)菜单1)Start/Stop Debugging:启动/停止调试模式2)Go:全速运行3)Step:跟踪运行4)Step Over:单步运行5)Step out of current function:一步执行完当前函数并返回6)Run to Cursor line:一步运行到当前光标处7)Stop Running:停止运行4.10.2 Keil C操作界面8)Breakpointing:打开断点对话框9)Insert/Remove Breakpoint:在当前行设置/清除断点10)Enable/Disable Breakpoint:使能/禁止当前行的断点11)Disable All Breakpoints:禁止所有断点12)Kill All Breakpoints:清除所有断点13)Show Next Statement:显示下一条指令4.10.2 Keil C操作界面14)Enable/Disable Trace Recording:使能/禁止跟踪记录15)View Trace Records:显示执行过的指令16)Memory Map:打开存储空间配置对话框17)Performance Analyzer:打开性能分析设置窗口18)Inline Assembly:对某一行重新汇编,且可以修改汇编代码19)Function Editor:编辑调试函数和调试配置文件 4.10.2 Keil C操作界面六、片内外设(Peripheral)菜单1)Reset CPU:复位CPU2)Interrupt:设置/观察中断(触发方式、优先级、使能等)3)I/O Ports:设置/观察各个I/O口4)Serial:设置/观察串行口5)Timer:设置/观察各个定时器/计数器6)A/D Converter:设置/观察A/D转换器7)D/A Converter:设置/观察D/A转换器这一部分的内容,与选择的CPU有关。 4.10.2 Keil C操作界面七、工具(Tools)菜单1)Setup PC-Lint:配置PC-Lint2)Lint:用PC-Lint处理当前编辑的文件3)Lint all C Source Files:用PC-Lint处理当前项目中所有的C文件4)Setup Easy-Case:配置Siemens 的Easy-Case5)Star/Stop Easy-Case:启动或停止Easy-Case4.10.2 Keil C操作界面6)Show File(Line):用Easy-Case处理当前编辑的文件7)Customize Tools Menu:将用户程序加入工具菜单。 八、软件版本控制系统(SVCS)菜单软件版本控制系统菜单只有一项:Configure Version Control:配置软件版本控制系统命令 4.10.2 Keil C操作界面九、视窗(Windows)菜单1)Cascade:以相互重叠方式排列文件窗口2)Tile Horizontally:以不重叠方式水平排列文件窗口3)Tile Vertically:以不重叠方式垂直排列文件窗口4)Arrange Icons:在窗口的下方排列图标5)Split:将当前窗口分成几个窗格6)Close All:关闭所有窗口4.10.2 Keil C操作界面十、帮助(Help)菜单1)Vision Help:打开Vision在线帮助2)Open Books Window:打开电子图书窗口3)Simulated Peripherals for:显示片内外设信息4)Internet Support Knowledegebase:打开互联网支持的知识库5)Contact Support:联系方式支持6)Check for Update:检查更新7)About Vision:显示Vision的版本号和许可证信息4.10.3 Keil C应用在Keil C中,文件的管理采用的是项目(也叫工程)方式,而不是以前的单一文件方式。工程管理器的功能:对C51源程序、汇编源程序、头文件等文件统一管理;可以对文件进行分组。如图4-7所示。工程管理窗口内容及分布,与Windows的资源管理器相似。4.10.3 Keil C应用图4-7 Keil C51的工程管理器4.10.3 Keil C应用一、项目的建立1、建立项目选择Project菜单下的New Project命令,创建新工程,在对话框中设定新工程的位置,输入新工程名字保存即可。2、选择CPU在出现的为新工程选择CPU的界面,在“data base”栏下选择所使用的CPU。确定后,会弹出一“Copy Standard 8051 Startup Code to Project Folder and Add File to Project”信息, 一般选择“是”即可。4.10.3 Keil C应用二、给项目加入程序文件加入的文件可以是C文件,也可以是汇编文件。加入程序文件的过程如下。1)在项目管理器窗口中展开Target1文件夹,可以看到Source Group1。2)向Source Group1添加文件。在Source Group1点击鼠标右键,会弹出一菜单,其中有一“Add Files to GroupSource Group1”命令,点击后会弹出一对话框,选择需要加入的程序文件,并且一次可以加入多个文件。如图4-9所示。4.10.3 Keil C应用3)移走项目:在欲移走的文件上点击鼠标右键,会弹出一菜单,执行其中的“Remove File *”命令即可。 4)对文件分组:可以按功能对项目管理器中的文件分成组,如图4-7所示。先使用图4-9中的“Manage Components”命令建立组,然后用鼠标直接在组之间移动文件即可。 4.10.3 Keil C应用图4-9 项目添加文件和组件命令4.10.3 Keil C应用三、项目的编译链接设置输出.hex文件:在Target1上点击鼠标右键,出现类似图4-9所示的菜单,点击执行“Options for Target Target1”命令,在弹出的会话界面选择“Output”标签,选中“Create HEX File”项即可。 编译链接方法:使用Project菜单下的Build target命令或Rebuild all target Files命令,或者直接点击工具栏中
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
提示  人人文库网所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
关于本文
本文标题:大学单片机原理及应用(C语言版)-周国运-课件PPT
链接地址:https://www.renrendoc.com/p-21836325.html

官方联系方式

2:不支持迅雷下载,请使用浏览器下载   
3:不支持QQ浏览器下载,请用其他浏览器   
4:下载后的文档和图纸-无水印   
5:文档经过压缩,下载后原文更清晰   
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

网站客服QQ:2881952447     

copyright@ 2020-2025  renrendoc.com 人人文库版权所有   联系电话:400-852-1180

备案号:蜀ICP备2022000484号-2       经营许可证: 川B2-20220663       公网安备川公网安备: 51019002004831号

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