当前位置:首页 > 单片机编程软件
  • 单片机编程软件很简单(18),Keil单片机编程软件对ANSIC的扩展学习

    单片机编程软件很简单(18),Keil单片机编程软件对ANSIC的扩展学习

    单片机编程软件对于大家并不陌生,想必大家对于IAR单片机编程软件、Keil单片机编程软件等均有所了解。为增进大家对单片机编程软件的认识,本文将对Keil单片机编程软件相关内容予以介绍,主要为Keil C51对标准ANSIC的扩展的学习。如果你对本文内容具有兴趣,不妨继续往下阅读哦。 深入理解并应用Keil C51对标准ANSIC的扩展是学习Keil C51的关键之一。因为大多数扩展功能都是直接针对8051系列CPU硬件的。大致有以下8类: 1. 8051存储类型及存储区域 2. 存储模式 3. 存储器类型声明 4. 变量类型声明 5. 位变量与位寻址 6. 特殊功能寄存器(SFR) 7. Keil C51指针 8. 函数属性 具体说明如下(8031为缺省CPU)。 一、Keil C51扩展关键字 C51 V4.0版本有以下扩展关键字(共19个): _at_ idata sfr16 alien interrupt small bdata large _task_ Code bit pdata using reentrant xdata compact sbit data sfr 二、内存区域(Memory Areas): 1. Pragram Area: 由Code说明可有多达64kBytes的程序存储器 2. Internal Data Memory: 内部数据存储器可用以下关键字说明: data:直接寻址区,为内部RAM的低128字节 00H~7FH idata:间接寻址区,包括整个内部RAM区 00H~FFH bdata:可位寻址区, 20H~2FH 3. External Data Memory 外部RAM视使用情况可由以下关键字标识: xdata:可指定多达64KB的外部直接寻址区,地址范围0000H~0FFFFH pdata:能访问1页(25bBytes)的外部RAM,主要用于紧凑模式(Compact Model)。 4. Speciac FuncTIon Register Memory 8051提供128Bytes的SFR寻址区,这区域可位寻址、字节寻址或字寻址,用以控制定时器、计数器、串口、I/O及其它部件,可由以下几种关键字说明: sfr:字节寻址 比如 sfr P0=0x80;为PO口地址为80H,“=”后H~FFH之间的常数。 sfr16:字寻址,如sfr16 T2=0xcc;指定TImer2口地址T2L=0xcc T2H=0xCD sbit:位寻址,如sbit EA=0xAF;指定第0xAF位为EA,即中断允许 还可以有如下定义方法: sbit 0V=PSW^2;(定义0V为PSW的第2位) sbit 0V=0XDO^2;(同上) 或bit 0V-=0xD2(同上)。 三、存储模式 存储模式决定了没有明确指定存储类型的变量,函数参数等的缺省存储区域,共三种: 1. Small模式 所有缺省变量参数均装入内部RAM,优点是访问速度快,缺点是空间有限,只适用于小程序。 2. Compact模式 所有缺省变量均位于外部RAM区的一页(256Bytes),具体哪一页可由P2口指定,在STARTUP.A51文件中说明,也可用pdata指定,优点是空间较Small为宽裕速度较Small慢,较large要快,是一种中间状态。 3. large模式 所有缺省变量可放在多达64KB的外部RAM区,优点是空间大,可存变量多,缺点是速度较慢。 提示:存储模式在C51编译器选项中选择。 四、存储类型声明 变量或参数的存储类型可由存储模式指定缺省类型,也可由关键字直接声明指定。各类型分别用:code,data,idata,xdata,pdata说明,例: data uar1 char code array[ ]=“hello!”; unsigned char xdata arr[10][4][4]; 五、变量或数据类型 C51提供以下几种扩展数据类型: bit 位变量值为0或1 sbit 从字节中定义的位变量 0或1 sfr sfr字节地址 0~255 sfr16 sfr字地址 0~65535 其余数据类型如:char,enum,short,int,long,float等与ANSI C相同。 六、位变量与声明 1. bit型变量 bit型变量可用变量类型,函数声明、函数返回值等,存贮于内部RAM20H~2FH。 注意: (1) 用#pragma dISAble说明函数和用“usign”指定的函数,不能返回bit值。 (2) 一个bit变量不能声明为指针,如bit *ptr;是错误的 (3) 不能有bit数组如:bit arr[5];错误。 2. 可位寻址区说明20H-2FH 可作如下定义: int bdata i; char bdata arr[3], 然后: sbit bito=in0;sbit bit15=I^15; sbit arr07=arr[0]^7;sbit arr15=arr[i]^7; 七、Keil C51指针 C51支持一般指针(Generic Pointer)和存储器指针(Memory_Specific Pointer). 1. 一般指针 一般指针的声明和使用均与标准C相同,不过同时还可以说明指针的存储类型,例如: long * state;为一个指向long型整数的指针,而state本身则依存储模式存放。 char * xdata ptr;ptr为一个指向char数据的指针,而ptr本身放于外部RAM区,以上的long,char等指针指向的数据可存放于任何存储器中。 一般指针本身用3个字节存放,分别为存储器类型,高位偏移,低位偏移量。 2. 存储器指针 基于存储器的指针说明时即指定了存贮类型,例如: char data * str;str指向data区中char型数据 int xdata * pow; pow指向外部RAM的int型整数。 这种指针存放时,只需一个字节或2个字节就够了,因为只需存放偏移量。 3. 指针转换 即指针在上两种类型之间转化: · 当基于存储器的指针作为一个实参传递给需要一般指针的函数时,指针自动转化。 · 如果不说明外部函数原形,基于存储器的指针自动转化为一般指针,导致错误,因而请用“#include”说明所有函数原形。 · 可以强行改变指针类型。 八、Keil C51函数 C51函数声明对ANSI C作了扩展,具体包括: 1. 中断函数声明: 中断声明方法如下: void serial_ISR () interrupt 4 [using 1] { /* ISR */ } 为提高代码的容错能力,在没用到的中断入口处生成iret语句,定义没用到的中断。 /* define not used interrupt, so generate IRET in their entrance */ void extern0_ISR() interrupt 0{} /* not used */ void TImer0_ISR () interrupt 1{} /* not used */ void extern1_ISR() interrupt 2{} /* not used */ void TImer1_ISR () interrupt 3{} /* not used */ void serial_ISR () interrupt 4{} /* not used */ 2. 通用存储工作区 3. 选通用存储工作区由using x声明,见上例。 4. 指定存储模式 由small compact 及large说明,例如: void fun1(void) small { } 提示:small说明的函数内部变量全部使用内部RAM。关键的经常性的耗时的地方可以这样声明,以提高运行速度。 5. #pragma dISAble 在函数前声明,只对一个函数有效。该函数调用过程中将不可被中断。 6. 递归或可重入函数指定 在主程序和中断中都可调用的函数,容易产生问题。因为51和PC不同,PC使用堆栈传递参数,且静态变量以外的内部变量都在堆栈中;而51一般使用寄存器传递参数,内部变量一般在RAM中,函数重入时会破坏上次调用的数据。可以用以下两址椒ń饩龊??厝耄?br />a、在相应的函数前使用前述“#pragma dISAble”声明,即只允许主程序或中断之一调用该函数; b、将该函数说明为可重入的。如下: void func(param...) reentrant; KeilC51编译后将生成一个可重入变量堆栈,然后就可以模拟通过堆栈传递变量的方法。 由于一般可重入函数由主程序和中断调用,所以通常中断使用与主程序不同的R寄存器组。 另外,对可重入函数,在相应的函数前面加上开关“#pragma noaregs”,以禁止编译器使用绝对寄存器寻址,可生成不依赖于寄存器组的代码。 7. 指定PL/M-51函数 由alien指定。 以上便是此次小编带来的“单片机编程软件”相关内容,希望大家对本文内容具备一定的了解。如果你喜欢本文,不妨持续关注我们网站哦,小编将于后期带来更多精彩内容。最后,十分感谢大家的阅读,have a nice day!

    时间:2020-06-29 关键词: keil 指数 单片机编程软件

  • 单片机编程软件很简单(17),Keil单片机编程软件之编译、链接

    单片机编程软件很简单(17),Keil单片机编程软件之编译、链接

    单片机编程软件使用较多,诸多朋友大学期间便接触单片机编程软件。因此,大家对于单片机编程软件或多或少有所了解。本文中,将对Keil单片机编程软件加以介绍,主要在于介绍如何在这款单片机编程软件中进行项目设置以及如何进行编译、链接。如果你对本文内容具有兴趣,不妨继续往下阅读哦。 一、工程的详细设置 工程建立好以后,还要对工程进行进一步的设置,以满足要求。 首先点击左边Project 窗口的Target 1,然后使用菜单“Project->OpTIon for target ‘target1’”即出现对工程设置的对话框,这个对话框可谓非常复杂,共有8 个页面,要全部搞清可不容易,好在绝大部份设置项取默认值就行了。设置对话框中的Target 页面,如图1所示,Xtal 后面的数值是晶振频率值,默认值是所选目标CPU 的最高可用频率值, 对于我们所选的AT89C51 而言是24M,该数值与最终产生的目标代码无关,仅用于软件模拟调试时显示程序执行时间。正确设置该数值可使显示时间与实际所用时间一致,一般将其设置成与你的硬件所用晶振频率相同,如果没必要了解程序执行的时间,也可以不设,这里设置为12。 Memory Model 用于设置RAM 使用情况,有三个选择项,Small 是所有变量都在单片机的内部RAM 中;Compact 是可以使用一页外部扩展RAM,而Larget 则是可以使用全部外部的扩展RAM。Code Model 用于设置ROM 空间的使用,同样也有三个选择项,即Small模式,只用低于2K 的程序空间;Compact 模式,单个函数的代码量不能超过2K,整个程序可以使用64K 程序空间;Larget 模式,可用全部64K 空间。Use on-chip ROM 选择项,确认是否仅使用片内ROM(注意:选中该项并不会影响最终生成的目标代码量);OperaTIng 项是操作系统选择,Keil 提供了两种操作系统:Rtx TIny 和Rtx full,关于操作系统是另外一个很大的话题了,通常我们不使用任何操作系统,即使用该项的默认值:None(不使用任何操作系统);Off Chip Code memory 用以确定系统扩展ROM 的地址范围,Off Chip xData memory 组用于确定系统扩展RAM 的地址范围,这些选择项必须根据所用硬件来决定,由于该例是单片应用,未进行任何扩展,所以均不重新选择,按默认值设置。设置对话框中的OutPut 页面,如图2所示,这里面也有多个选择项,其中Creat Hex file 用于生成可执行代码文件(可以用编程器写入单片机芯片的HEX 格式文件,文件的扩展名为.HEX),默认情况下该项未被选中,如果要写片做硬件实验,就必须选中该项,这一点是初学者易疏忽的,在此特别提醒注意。选中Debug information 将会产生调试信息,这些信息用于调试,如果需要对程序进行调试,应当选中该项。Browse information 是产生浏览信息,该信息可以用菜单view->Browse 来查看,这里取默认值。按钮“ Select Folder for objects” 图1 对目标进行设置 图2 对输出进行控制 是用来选择最终的目标文件所在的文件夹,默认是与工程文件在同一个文件夹中。Name of Executable 用于指定最终生成的目标文件的名字,默认与工程的名字相同,这两项一般不需要更改。工程设置对话框中的其它各页面与C51 编译选项、A51 的汇编选项、BL51 连接器的连接选项等用法有关,这里均取默认值,不作任何修改。以下仅对一些有关页面中常用的选项作一个简单介绍。Listing 标签页用于调整生成的列表文件选项。在汇编或编译完成后将产生(*.lst)的列表文件,在连接完成后也将产生(*.m51)的列表文件,该页用于对列表文件的内容和形式进行细致的调节,其中比较常用的选项是“C Compile Listing”下的“Assamble Code”项,选中该项可以在列表文件中生成C 语言源程序所对应的汇编代码。C51 标签页用于对Keil 的C51 编译器的编译过程进行控制,其中比较常用的是“Code Optimization”组,如图3所示,该组中Level 是优化等级,C51 在对源程序进行编译时,可以对代码多至9 级优化,默认使用第8 级,一般不必修改,如果在编译中出现一些问题,可以降低优化级别试一试。Emphasis 是选择编译优先方式,第一项是代码量优化(最终生成的代码量小);第二项是速度优先(最终生成的代码速度快);第三项是缺省。默认的是速度优先,可根据需要更改。设置完成后按确认返回主界面,工程文件建立、设置完毕。 图3 代码生成控制 二、编译、链接 在设置好工程后,即可进行编译、链接。选择菜单Project->Build target,对当前工程进行连接,如果当前文件已修改,软件会先对该文件进行编译,然后再连接以产生目标代码;如果选择Rebuild All target files 将会对当前工程中的所有文件重新进行编译然后再连接,确保最终生产的目标代码是最新的,而Translate … .项则仅对该文件进行编译,不进行连接。以上操作也可以通过工具栏按钮直接进行。编译、设置的工具栏按钮,从左到右分别是:编译、编译连接、全部重建、停止编译和对工程进行设置。编译过程中的信息将出现在输出窗口中的Build 页中,如果源程序中有语法错误,会有错误报告出现,双击该行,可以定位到出错的位置,对源程序反复修改之后,最终会得到如图4所示的结果,提示获得了名为exam1.hex 的文件,该文件即可被编程器读 入并写到芯片中,同时还产生了一些其它相关的文件,可被用于Keil 的仿真与调试,这时可以进入下一步调试的工作。 图4 正确编译、连接之后的结果 以上便是此次小编带来的“单片机编程软件”相关内容,通过本文,希望大家对Keil单片机编程软件如何编译、链接具备一定的了解。如果你喜欢本文,不妨持续关注我们网站哦,小编将于后期带来更多精彩内容。最后,十分感谢大家的阅读,have a nice day!

    时间:2020-06-29 关键词: keil 指数 单片机编程软件

  • 单片机编程软件很简单(16),Keil单片机编程软件建立工程项目

    单片机编程软件很简单(16),Keil单片机编程软件建立工程项目

    单片机编程软件为单片机的使用提供便利,缺少单片机编程软件,单片机程序的编写将十分困难。对于单片机编程软件,小编在往期文章中有所介绍,如IAR单片机编程软件等。本文对于单片机编程软件的讲解将基于Keil,主要内容在于阐述如何建立Keil工程。如果你对本文内容具有兴趣,不妨继续往下阅读哦。 一、 Keil简介 单片机开发中除必要的硬件外,同样离不开软件,我们写的汇编语言源程序要变为CPU可以执行的机器码有两种方法,一种是手工汇编,另一种是机器汇编,目前已极少使用手工汇编的方法了。机器汇编是通过汇编软件将源程序变为机器码,用于MCS-51 单片机的汇编软件有早期的A51,随着单片机开发技术的不断发展,从普遍使用汇编语言到逐渐使用高级语言开发,单片机的开发软件也在不断发展,Keil 软件是目前最流行开发MCS-51 系列单片机的软件,这从近年来各仿真机厂商纷纷宣布全面支持Keil 即可看出。Keil 提供了包括C编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境(uVision)将这些部份组合在一起。运行Keil 软件需要PenTIum 或以上的CPU,16MB或更多RAM、20M 以上空闲的硬盘空间、WIN98、NT、WIN2000、WINXP等操作系统。掌握这一软件的使用对于使用51 系列单片机的爱好者来说是十分必要的,如果你使用C 语言编程,那么Keil 几乎就是你的不二之选(目前在国内你只能买到该软件、而你买的仿真机也很可能只支持该软件),即使不使用C 语言而仅用汇编语言编程,其方便易用的集成环境、强大的软件仿真调试工具也会令你事半功倍。 我们将通过一些实例来学习Keil 软件的使用,在这一部份我们将学习如何输入源程序,建立工程,图1 所示电路图使用89C51 单片机作为主芯片,这种单片机性属于MCS-51 系列,其内部有4K 的FLASH ROM, 可以反复擦写,非常适于做实验。89C51 的P1 引脚上接8 个发光二极管,P3.2~P3.4 引脚上接4 个按钮开关,我们的第一个任务是让接在P1 引脚上的发光二极管依次循环点亮。 二、Keil 工程的建立 首先启动Keil 软件的集成开发环境,这里假设读者已正确安装了该软件,可以从桌面上直接双击uVision 的图标以启动该软件。 UVison启动后,程序窗口的左边有一个工程管理窗口,该窗口有3 个标签,分别是Files、Regs、和Books,这三个标签页分别显示当前项目的文件结构、CPU 的寄存器及部份特殊功能寄存器的值(调试时才出现)和所选CPU 的附加说明文件,如果是第一次启动Keil,那么这三个标签页全是空的。 1、源文件的建立 使用菜单“File->New”或者点击工具栏的新建文件按钮,即可在项目窗口的右侧打开一个新的文本编缉窗口,在该窗口中输入以下汇编语言源程序,例1: MOV A,#0FEH MAIN: MOV P1,A RL A LCALL DELAY AJMP MAIN DELAY: MOV R7,#255 D1: MOV R6,#255 DJNZ R6,$ 图1 简单的键盘、显示板 DJNZ R7,D1 RET END 保存该文件,注意必须加上扩展名(汇编语言源程序一般用asm 或a51 为扩展名),这里假定将文件保存为exam1.asm。需要说明的是,源文件就是一般的文本文件,不一定使用Keil 软件编写,可以使用任意文本编缉器编写,而且,Keil 的编缉器对汉字的支持不好,建议使用UltraEdit 之类的编缉软件进行源程序的输入。 2、建立工程文件 在项目开发中,并不是仅有一个源程序就行了,还要为这个项目选择CPU(Keil 支持数百种CPU,而这些CPU 的特性并不完全相同),确定编译、汇编、连接的参数,指定调试的方式,有一些项目还会有多个文件组成等,为管理和使用方便,Keil 使用工程(Project)这一概念,将这些参数设置和所需的所有文件都加在一个工程中,只能对工程而不能对单一 的源程序进行编译(汇编)和连接等操作,下面我们就一步一步地来建立工程。 点击“Project->New Project… ”菜单,出现一个对话框,要求给将要建立的工程起一个名字,你可以在编缉框中输入一个名字(设为exam1),不需要扩展名。点击“保存”按钮,出现第二个对话框,如图2所示,这个对话框要求选择目标CPU(即你所用芯片的型号),Keil 支持的CPU很多,我们选择Atmel 公司的89C51 芯片。点击ATMEL 前面的“+”号,展开该层,点击其中的89C51,然后再点击“确定”按钮,回到主界面,此时,在工程窗口的文件页中,出现了“Target1”,前面有“+”号,点击“+”号展开,可以看到下一层的“ Source Group1”,这时的工程还是一个空的工程,里面什么文件也没有,需要手动把刚才编写好的源程序加入,点击“Source Group1”使其反白显示,然后,点击鼠标右键,出现一个下拉菜单,如图3 所示。选中其中的“Add file toGroup”Source Group1”,出现一个对话框,要求寻找源文件,注意,该对话框下面的“文件类型”默认为C source file(*.c),也就是以C 为扩展名的文件,而我们的文件是以asm 为扩展名的,所以在列表框中找不到exam1.asm,要将文件类型改掉,点击对话框中“文件类型”后的下拉列表,找到并选中“Asm Source File(*.a51,*.asm),这样,在列表框中就可以找到exam1.asm 文件了。 双击exam1.asm 文件,将文件加入项目,如 图2 选择目标CPU 图3 加入文件 注意,在文件加入项目后,该对话框并不消失,等待继续加入其它文件,但初学时常会误认为操作没有成功而再次双击同一文件,这时会出现如图4 所示的对话框,提示你所选文件已在列表中,此时应点击“确定”,返回前一对话框,然后点击“Close”即可返回主界面,返回后,点击“SourceGroup 1”前的加号,会发现exam1.asm 文件已在其中。双击文件名,即打开该源程序。 图4 重复加入文件的错误 以上便是此次小编带来的“单片机编程软件”相关内容,通过本文,希望大家对如何建立Keil工程项目文件具备一定的了解。如果你喜欢本文,不妨持续关注我们网站哦,小编将于后期带来更多精彩内容。最后,十分感谢大家的阅读,have a nice day!

    时间:2020-06-29 关键词: keil 指数 单片机编程软件

  • 单片机编程软件很简单(15),Keil单片机编程软件库函数、寄存器关系

    单片机编程软件很简单(15),Keil单片机编程软件库函数、寄存器关系

    单片机编程软件的使用频率极高,采用单片机编程软件,可制造诸多系统。对于单片机编程软件,小编做过诸多介绍。本文对于单片机编程软件的介绍基于Keil,主要在于介绍该单片机编程软件是如何处理库函数以及寄存器的关系的。如果你对本文即将探讨的内容存在兴趣,不妨继续往下阅读哦。 在一个芯片系统里,uart的驱动是厂商自己写好的,那他们是怎么关联printf到uart的呢?有人说,printf最终是调用了putchar,小编搜索了源码,没有这个函数,估计是开发工具,像KeilC u3,里面已经集成了putchar。于是小编奇怪,这个工具怎么知道厂商哪个函数时uart的,有没有命名规则要求?好像没有,看了下面的讨论,估计是通过UART的收发寄存器来关联的。小编猜想应该是在某个地方,keilc关联了系统的寄存器列表,找到了串口的寄存器的地址,然后putchar操作该寄存器,就相当于操作了厂商或者开发者自定义的uart_write_byte.uart_read_byte. 在你配置完串口的时候首先写一个数到SBUF寄存器中然后在用printf函数打印就可以,当让这个顺序是不可以变的,如果你想在追问细节为什么,小编只能告诉你这应该是开发环境决定的,这一点小编就理解这么多,如果有大侠给出更好的解释小编也一起共勉。 其实也不用首先写一个数据到SBUF寄存器,只需在串口初始化后,加上一句TI=1;即可。原因是printf函数事实上是调用putchar输出字符的。之所以能输出到串口上,就是因为putchar函数把字符通过串口输出。这是keil中putchar最简单的版本,其他版本也一样,看函数就明白为什么要先让TI=1;了,楼主写的那个SBUF=0,原理是相同的,写入了数据,那么TI就等于1了,然后就可以使用putchar函数和printf函数了。putchar函数的源码在{keil安装目录下}\C51\LIB文件夹里的PUTCHAR.C文件里,另外在keil的帮助文档里有说明。 char putchar (char c) { while (!TI); TI = 0; return (SBUF = c); } 小编在某个CortextM3的源码里的debug.c找到了fputc。应该说,某些系统是通过fputc建立联系,而不是putchar的。如下: void fputc_hook(char ch) { if (DebugType == 0) { UARTWriteByte(ch, 1000); } else { VirtualUartWrite(ch); } } int fputc(int ch, FILE *f) { uint8 dgbBuffer[DEBUG_TIME_LEN]; uint32 tmpcnt, i; if (ch == '\n') { tmpcnt = SysTickCounter; for (i = 0; i < DEBUG_TIME_LEN; i++) { dgbBuffer[i] = tmpcnt % 10; tmpcnt = tmpcnt / 10; } fputc_hook('\r'); fputc_hook('\n'); fputc_hook('['); for (i = 0; i < DEBUG_TIME_LEN; i++) { fputc_hook(dgbBuffer[DEBUG_TIME_LEN - 1 -i]+0x30); if (DEBUG_TIME_LEN - 1 -i == 2) { fputc_hook('.'); } } fputc_hook(']'); return OK; } fputc_hook(ch); return OK; } 在实际工作中,遇到了这么一个问题,需要向不同的串口传输ASCII码,无疑使用printf函数是最方便的。然而printf打印出的信息无法选择出口。在网上搜到的程序,printf要调用fputc函数发送字符。该函数如下: int fputc(int ch, FILE *f) { /* e.g. write a character to the USART */ USART_SendData(USART1, (uint8_t) ch); /* Loop until the end of transmission */ while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET) {} return ch; } 入口参数有字符和字符要输出到的文件指针。根据搜索,printf函数输出到stdout,而fprintf可以指定字符到达的文件。可FILE结构体中,没有一个是与串口相关的。 typedef struct { char *fpos; /* Current position of file pointer (absolute address) */ void *base; /* Pointer to the base of the file */ unsigned short handle; /* File handle */ short flags; /* Flags (see FileFlags) */ short unget; /* 1-byte buffer for ungetc (b15=1 if non-empty) */ unsigned long alloc; /* Number of currently allocated bytes for the file */ unsigned short buffincrement; /* Number of bytes allocated at once */ } FILE; 该如何重定向呢?自己定义n个FILE*指针,并任意赋值。在fputc中利用if..else来做判断,代码如下: FILE* FileUart1 = (FILE*)0x19; FILE* FileUart2 = (FILE*)0x28; int fputc(int ch, FILE *f) { if ( f == FileUart1 ) { USART_SendData(COM_USART[0], (uint8_t) ch); while (USART_GetFlagStatus(COM_USART[0], USART_FLAG_TC) == RESET){} } else if ( f == FileUart2 ) { USART_SendData(COM_USART[1], (uint8_t) ch); while (USART_GetFlagStatus(COM_USART[1], USART_FLAG_TC) == RESET){} } } 这样,fprintf(FileUart1,...)和fprintf(FileUart2,...)便能向不同的串口发送数据。虽然没有真正做到重定向,但最初的目的还是达到了。 以上便是此次小编带来的“单片机编程软件”相关内容,通过本文,希望大家对Keil单片机编程软件如何处理库函数与寄存器间的关系具备一定的了解。如果你喜欢本文,不妨持续关注我们网站哦,小编将于后期带来更多精彩内容。最后,十分感谢大家的阅读,have a nice day!

    时间:2020-05-22 关键词: 库函数 指数 单片机编程软件

  • 单片机编程软件很简单(14),Keil单片机编程软件断点设置

    单片机编程软件很简单(14),Keil单片机编程软件断点设置

    单片机编程软件十分常用,对于单片机编程软件,小编于往期文章中做过诸多介绍。本文对于单片机编程软件的介绍基于Keil,主要内容在于介绍该单片机编程软件的在线汇编功能以及断点设置。如果你对Keil单片机编程软件抑或本文即将涉及的内容存在兴趣,都不妨继续往下阅读哦。 一、在线汇编 在进入Keil 的调试环境以后,如果发现程序有错,可以直接对源程序进行修改,但是要使修改后的代码起作用,必须先退出调试环境,重新进行编译、连接后再次进入调试,如果只是需要对某些程序行进行测试,或仅需对源程序进行临时的修改,这样的过程未免有些麻烦,为此Keil 软件提供了在线汇编的能力,将光标定位于需要修改的程序行上,用菜单Debug->Inline Assambly… 即可出现如图1 的对话框,在Enter New 后面的编缉框内直接输入需更改的程序语句,输入完后键入回车将自动指向下一条语句,可以继续修改,如果不再需要修改,可以点击右上角的关闭按钮关闭窗口。 二、断点设置 程序调试时,一些程序行必须满足一定的条件才能被执行到(如程序中某变量达到一定的值、按键被按下、串口接收到数据、有中断产生等),这些条件往往是异步发生或难以预先设定的,这类问题使用单步执行的方法是很难调试的,这时就要使用到程序调试中的另一种非常重要的方法——断点设置。断点设置的方法有多种,常用的是在某一程序行设置断点,设置好断点后可以全速运行程序,一旦执行到该程序行即停止,可在此观察有关变量值,以确定问题所在。在程序行设置/移除断点的方法是将光标定位于需要设置断点的程序行,使用菜单Debug->Insert/Remove BreakPoint 设置或移除断点(也可以用鼠标在该行双击实现同样的功能);Debug->Enable/Disable Breakpoint 是开启或暂停光标所在行的断点功能;Debug->Disable All Breakpoint 暂停所有断点;Debug->Kill All BreakPoint 清除所有的断点设置。这些功能也可以用工具条上的快捷按钮进行设置。除了在某程序行设置断点这一基本方法以外,Keil 软件还提供了多种设置断点的方法,按Debug->Breakpoints… 即出现一个对话框,该对话框用于对断点进行详细的设置,如图2所示。 图2中Expression 后的编缉框内用于输入表达式,该表达式用于确定程序停止运行的条件,这里表达式的定义功能非常强大,涉及到Keil 内置的一套调试语法,这里不作详细说明,仅举若干实例,希望读者可以举一反三。 1) 在Experssion 中键入a==0xf7,再点击Define 即定义了一个断点, 注意,a 后有两个等号,意即相等。该表达式的含义是:如果a 的值到达0xf7 则停止程序运行。 图1在线汇编窗口 图1 除使用相等符号之外,还可以使用>,>=,<,<=,!=(不等于),&(两值按位与),&&(两值相与)等运算符号。 2) 在Experssion 后中键入Delay 再点击Define,其含义是如果执行标号为Delay 的行则中断。 3) 在Experssion 后中键入Delay,按Count后的微调按钮,将值调到3,其意义是当第三次执行到Delay 时才停止程序运行。 4) 在Experssion 后键入Delay , 在Command 后键入printf(“SubRouTIne‘Delay’ has been Called\n”)主程序每次调用Delay 程序时并不停止运行,但会在输出窗口Command 页输出一行字符,即SubRouTIne ‘Delay’ has been Called。其中“\n”的用途是回车换行,使窗口输出的字符整齐。 5) 设置断点前先在输出窗口的Command页中键入DEFINE int I,然后在断点设置时同4),但是Command 后键入printf(“SubRouTIne ‘Delay’ has been Called %d times\n”,++I),则主程序每次调用Delay 时将会在Command 窗口输出该字符及被调用的次数,如SubRoutine ‘Delay’ has been Called 10 times。 对于使用C 源程序语言的调试,表达式中可以直接使用变量名,但必须要注意,设置时只能使用全局变量名和调试箭头所指模块中的局部变量名。 三、实例调试 为进行程序的调试,我们首先给源程序制造一个错误,将延时子程序的第三行“DJNZ R6,$”后的$改为D1,然后重新编译,由于程序中并无语法错误,所以编译时不会有任何出错提示,但由于转移目的地出错,所以子程序将陷入无限循环中。 进入调试状态后,按F10 以过程单步的形式执行程序,当执行到LCALL DELAY 行时,程序不能继续往下执行,同时发现调试工具条上的Halt 按钮变成了红色,说明程序在此不断地执行着,而我们预期这一行程序执行完后将停止,这个结果与预期不同,可以看出所调用的子程序出了差错。为查明出错原因,按Halt 按钮使程序停止执行,然后按RST 按钮使程序复位,再次按下F10 单步执行,但在执行到LCALL DELAY 行时,改按F11 键跟踪到子程序内部(如果按下F11 键没有反应,请在源程序窗口中用鼠标点一下),单步执行程序,可以发现在执行到“DJNZ R6,D1”行时,程序不断地从这一行转移到上一行,同时观察左侧的寄存器的值,会发现R6 的值始终在FFH 和FEH 之间变化,不会减小,而我们的预期是R6 的值不断减小,减到0 后往下执行,因此这个结果与预期不符,通过这样的观察,不难发现问题是因为标号写错而产生的,发现问题即可以修改,为了验证即将进行的修改是否正确,可以先使用在线汇编功能测试一下。把光标定位于程序行“DJNZ R6,D1”,打开在线汇编的对话框,将程序改为“DJNZ R7,0EH”,即转回本条指令所在行继续执行,其中0EH 是本条指令在程序存储器中的位置,这个值可以通过在线汇编窗口看到,如图2所示。 然后关闭窗口,再进行调试,发现程序能够正确地执行了,这说明修改是正确的。注意,这时候的源程序并没有修改,此时应该退出调试程序,将源程序更改过来,并重新编译连接,以获得正确的目标代码。 图2 断点设置对话框 以上便是此次小编带来的“单片机编程软件”相关内容,通过本文,希望大家对Keil单片机编程软件的断点调试功能具备一定的了解。如果你喜欢本文,不妨持续关注我们网站哦,小编将于后期带来更多精彩内容。最后,十分感谢大家的阅读,have a nice day!

    时间:2020-05-22 关键词: keil 指数 单片机编程软件

  • 单片机编程软件很简单(13),Keil单片机编程软件常用调试命令

    单片机编程软件很简单(13),Keil单片机编程软件常用调试命令

    单片机编程软件有多款可供使用,对于单片机编程软件,自动化专业朋友自然熟悉。为增进大家对单片机编程软件的了解,本文将对单片机编程软件Keil予以介绍,主要内容在于该单片机编程软件的常用调试命令,以帮助大家更好地调试源程序。如果你对本文内容存在兴趣,不妨继续往下阅读哦。 在对工程成功地进行汇编、连接以后,按Ctrl+F5 或者使用菜单Debug->Start/Stop Debug Session 即可进入调试状态,Keil 内建了一个仿真CPU 用来模拟执行程序,该仿真CPU 功能强大,可以在没有硬件和仿真机的情况下进行程序的调试,下面将要学的就是该模拟调试 功能。不过在学习之前必须明确,模拟毕竟只是模拟,与真实的硬件执行程序肯定还是有区别的,其中最明显的就是时序,软件模拟是不可能和真实的硬件具有相同的时序的,具体的表现就是程序执行的速度和各人使用的计算机有关,计算机性能越好,运行速度越快。 进入调试状态后,界面与编缉状态相比有明显的变化,Debug 菜单项中原来不能用的命令现在已可以使用了,工具栏会多出一个用于运行和调试的工具条,如图1 所示,Debug 菜单上的大部份命令可以在此找到对应的快捷按钮,从左到右依次是复位、运行、暂停、单步、过程单步、执行完当前子程序、运行到当前行、下一状态、打开跟踪、观察跟踪、反汇编窗口、观察窗口、代码作用范围分析、1#串行窗口、内存窗口、性能分析、工具按钮等命令。 图1 调试工具条 学习程序调试,必须明确两个重要的概念,即单步执行与全速运行。全速执行是指一行程序执行完以后紧接着执行下一行程序,中间不停止,这样程序执行的速度很快,并可以看到该段程序执行的总体效果,即最终结果正确还是错误,但如果程序有错,则难以确认错误出现在哪些程序行。单步执行是每次执行一行程序,执行完该行程序以后即停止,等待命令执行下一行程序,此时可以观察该行程序执行完以后得到的结果,是否与我们写该行程序所想要得到的结果相同,借此可以找到程序中问题所在。程序调试中,这两种运行方式都要用到。 使用菜单STEP 或相应的命令按钮或使用快捷键F11 可以单步执行程序,使用菜单STEP OVER 或功能键F10 可以以过程单步形式执行命令。所谓过程单步,是指将汇编语言中的子程序或高级语言中的函数作为一个语句来全速执行。 按下F11 键,可以看到源程序窗口的左边出现了一个黄色调试箭头,指向源程序的第一行,如图2 所示。每按一次F11,即执行该箭头所指程序行,然后箭头指向下一行,当箭头指向LCALL DELAY 行时,再次按下F11,会发现,箭头指向了延时子程序DELAY 的第一行。不断按F11 键,即可逐步执行延时子程序。 通过单步执行程序,可以找出一些问题的所在,但是仅依靠单步执行来查错有时是困难的,或虽能查出错误但效率很低,为此必须辅之以其它的方法。 图2 调试窗口 将D2: DJNZ R6,D2 这一行程序执行六万多次来达到延时的目的,如果用按F11 六万多次的方法来执行完该程序行,显然不合适,为此,可以采取以下一些方法,第一,用鼠标在子程序的最后一行( ret)点一下,把光标定位于该行,然后用菜单Debug->Run to Cursor line(执行到光标所在行),即可全速执行完黄色箭头与光标之间的程序行。第二,在进入该子程序后,使用菜单Debug->Step Out of Current FuncTIon(单步执行到该函数外),使用该命令后,即全速执行完调试光标所在的子程序或子函数并指向主程序中的下一行程序(这里是JMP LOOP 行)。第三种方法,在开始调试的,按F10 而非F11,程序也将单步执行。不同的是,执行到lcall delay 行时,按下F10 键,调试光标不进入子程序的内部,而是全速执行完该子程序,然后直接指向下一行“JMP LOOP”。灵活应用这几种方法,可以大大提高查错的效率。 以上便是此次小编带来的“单片机编程软件”相关内容,通过本文,希望大家对Keil单片机编程软件的常用调试命令具备一定的了解。如果你喜欢本文,不妨持续关注我们网站哦,小编将于后期带来更多精彩内容。最后,十分感谢大家的阅读,have a nice day!

    时间:2020-05-22 关键词: keil 指数 单片机编程软件

  • 单片机编程软件很简单(12),Keil单片机编程软件配置操作

    单片机编程软件很简单(12),Keil单片机编程软件配置操作

    单片机的使用离不开单片机编程软件,相关器件的开发同样离不开单片机编程软件。往期文章中,小编对多款单片机编程软件做过阐述。本文对于单片机编程软件的介绍同样基于keil,主要内容在于介绍这款单片机编程软件的配置问题。如果你对本文的内容存在一定兴趣,不妨继续往下阅读哦。 一、前言 我们常见的字体大小、颜色、关键字、快捷键等这些都是在“Configuration”中进行设置。本文讲述Configuration中的前面3项Editor、Colors & Fonts、User KeyWords。 本文讲述的Configuration配置和前面文章Options for Target目标选项在保存上有一个明显的区别:Configuration修改过后并保存的配置是保存在你Keil(电脑)软件上;而Options for Target修改过后并保存的配置是保存在你(.uvprojx和.uvoptx)工程文件中。 二、本文主要内容 1.本文主要内容 为了不让文章的篇幅过多而显得繁杂,本文将只对“Configuration”前三项Editor、Colors & Fonts、User KeyWords进行讲述。 2.打开“Configuration”方法 1.点击Configuration快捷按钮,如下图: 2.从菜单中打开,Edit-> Configuration,如下图: 三、Editor编辑 我将Edit分为五部分来讲述,分为General Editor Settings、Function Display、Look & Feel、File & Project Handing、C/C++ & ASM & Other File五个部分,如下图: 1.General Editor Settings General Editor Settings是通用编辑设置的意思,这个选项里面内容比较实用,可以参看下面动画效果。 Dncoding:编码方式选择。 Keil提供十几种编码方式供大家选择,一般我们选择标准的:Dncode in ANSI. Auto Indent:自动缩进。 也就是换行时自动缩进(对齐)功能,提供3个选项。 None:不对对齐,光标每次换行在第一列。 Smart:灵活对齐(常用)。包含大括号自动对齐。 Block:光标对齐于前一行。 Virtual Spaces:虚拟空间。 光标在上下移动时不管有没有“空间”都对齐。也就是说光标可以在任何位置。 View White Space:显示空白(空格)。 也就是显示一个点为空格。 View End of Line:显示结束行。 也就是在行结束位置显示换行符 Dncoding、Auto Indent动画效果: Virtual Spaces、View White Space、View End of Line动画效果: 2.Function Display Function Display是函数显示的意思,就是如何在Function Display窗口显示函数。 这一区域是三个参数组合(1配2)的配置,【显示方式Display Modules】和【显示内容Scan function names in project files、Scan function names in current editor files】进行组合可以4种显示效果。 Display Modules:显示模块【显示方式】。 勾选:以模块(分组/文件夹)方式显示。 不选:以函数名方式显示。 简单的说模块显示就是显示C源文件名,将函数名折叠在文件里面。 Scan function names in project files:浏览工程项目中所有函数【显示内容】。 就是显示工程中所有函数。 Scan function names in current editor files:浏览当前(打开)编辑文件的函数【显示内容】。 比如:我打开了main.c和bsp.c两个文件来编辑,那么就显示这两个文件的内容(函数)。 Function Display动画效果: 3.Look & Feel Look & Feel是看&感觉(视觉)设置的意思,看下面描述就能直观的理解这一区域意思。 Show Message Dialog during Find:在查找时显示消息对话框。 就是在查找结束,或未查找到相关内时容弹出的提示框。 比如:我在main.c文件中查找main1(文件中实际是没有main1),勾选上就会弹出消息对话框(如下图),不勾选就不会弹出高亮对话框。 Highlight Current Line:高亮当前行。 光标放在那一行,这一行就高亮的意思。如下图: Highlight matching and mismatched braces:高亮显示匹配和不匹配括号。 将光标放在括号处,会高亮括号,如下图: Print with syntax coloring:打印语法颜色。 打印颜色对应为编辑器中的颜色。 Colored Editor Tabs:颜色编辑器选项卡。 启用或禁用文件名称标签的颜色。 Right Margin:右边距。 编辑分隔符标记的位置号。位置号的默认值是80,范围[1-999]。 None:无标记; Vertical Line:虚线标记; Colored Background:背景颜色标记。 4.File and Project Handling File and Project Handling是文件和工程管理的意思,针对的是文件和工程。 Create Backup files:创建备份文件(* . bak)。 勾选该选项会影响文件和项目管理,一般我们不勾选。 Automatic reload of externally modified files:自动加载(不提示)修改过的文件。 比如:Keil软件打开了main.c文件,再使用文本编辑器打开该main,c文件修改其中内容并保存,这时Keil软件自动加载修改过后的main.c文件。 Save Project before entering Debug:进入调试之前保存工程项目。 Save Files before entering Debug:进入调试之前保存所有文件。 Auto save modified File every [x] Minutes:每x分钟自动保存文件。 5.C/C++ & ASM & Other File 这里三组配置类似,只讲述一组,比较简单。 Use syntax coloring:使用语法颜色。 不使用语法就等于txt文本那种纯黑色。见下图不使用和使用区别: Insert spaces for tabs:符插入空格。 这个符号需要配合上面第一处General Editor Settings的View White Space显示出来才能看到效果。 Tab Size:Tab符大小。 一个Tab符占几个空格。 Show Line Numbers:显示行数。 Use monospaced Font:使用等宽字体。 Open with Outlining:打开伦廓。 Ⅳ、Colors & Fonts颜色和字体 这个选项里面的配置就是我们很多都说的修改字体和颜色。我这里整体讲述一下里面内容。【个人习惯使用默认设置,也建议大家尽量使用默认设置】 Window窗口:列出所有可配置窗口名称或窗口类型。这个列表是预定义的,用户不能修改。我们常见修改的地方就是“C/C++ Edit files”。 Element元素:一个窗口的列表元素。这个列表是预定义的,用户不能修改。 Font字体:包含Font字体、Size大小和Style风格三项。 Colors颜色:包含Foreground 前景色、Background 背景色。 Ⅴ、User Keywords用户关键字 这个选项比较简单,就是用户自定义关键字。 Text File Types:文本文件类型。 User Keywords:用户关键字。 举例:我们定义C/C++类型关键字为“abcedf”,在编辑的时候就会显示关键字颜色。 以上便是此次小编带来的“单片机编程软件”相关内容,希望大家对本文介绍的内容具备一定的认知。如果你喜欢本文,不妨持续关注我们网站哦,小编将于后期带来更多精彩内容。最后,十分感谢大家的阅读,have a nice day!

    时间:2020-04-02 关键词: keil 指数 configuration 单片机编程软件

  • 单片机编程软件很简单(11),Keil单片机编程软件在线调试

    单片机编程软件很简单(11),Keil单片机编程软件在线调试

    单片机编程软件的使用促进了社会发展,每款单片机编程软件各有千秋。在选择单片机编程软件时,大家可依据个人喜好和项目需求。本文对于单片机编程软件的介绍将基于keil,主要在于介绍这款单片机编程软件的在线调试功能。如果你对本文即将涉及的内容存在一定兴趣,或者以下部分正是你的疑虑所在,都不妨继续往下阅读哦。 一、前言 Keil在线调试的内容有很多,本文带来在线调试常用的内容:Debug Toolbar调试工具栏(复位、全速运行、停止运行、单步调试、逐行调试、跳出调试、运行到光标行、跳转到暂停行、调试窗口)快捷按钮的详细内容。 Keil工具栏总共有三种:文件工具栏(File Toolbar)、编译工具栏(Build Toolbar)、调试工具栏(Debug Toolbar)。编译工具栏只在编辑模式有效,调试工具栏只在调试模式下有效。文件工具栏在两种模式下都有效。 文件工具栏可以参看文章:Keil(MDK-ARM)系列教程(二)_工具栏详细说明. 二、本文要点 调试工具栏是我们在线调试时常用的工具栏(按钮),掌握这些按钮就能快速的调试代码,也即能快速的定位我们程序哪些地方存在不足。 1.编译,进入调试 编辑(或修改)代码之后,我们需要编译代码(F7)查看是否有错误,编译无误后点击调试按钮(Ctrl + F5)进入在线调试。 编译,进入调试动画效果: 2.复位,全速运行,停止运行 复位:让程序复位到起点,调试设置恢复到初始状态。这里可以参看文章Keil(MDK-ARM)系列教程(四)_工程目标选项配置(Ⅱ)Debug选项。 全速运行(F5):可以让程序运行常看运行状态,也可以在特定位置打断点,让程序运行到特定位置,查看运行状态。 停止运行:程序全速运行时(有效),点击该按钮可让程序停止运行。 复位,全速运行动画效果: 3.单步调试 单步调试(F11)也就是每点一次按钮,程序运行一步,遇到函数会跳进函数执行。 单步调试动画效果: 4.逐步调试 逐行调试(F10)也就是每点一次按钮,程序运行一行,遇到函数跳过函数执行。 逐步调试动画效果: 5.跳出调试 跳出调试(Ctrl + F11)也就是每点一次按钮,程序跳出当前函数执行,直到跳出最外面的函数(main函数)。 跳出调试动画效果: 6.运行到光标行 运行到光标处(Ctrl + F10)即将光标放在某一行,Ctrl + F11,程序执行到光标的位置就会停止下来(前提是程序能执行到光标的位置)。 运行到光标行动画效果: 7.跳转到暂停行 这个功能在程序停止运行时有效,主要的作用就是我们打开了很多文件,不知道将程序翻到哪里去了,点击改按钮即可知道我们的程序暂停在那个位置。 跳转到暂停行动画效果: 8.调试窗口 【调试窗口】是在调试的时候可以查看的窗口,这里有别于平时编辑状态下的窗口。平时编辑时View菜单下面的选项很少,但是进入调试模式,这里就多了很多选项,这些选项就是调试时查看的窗口(见下图)。 下面简述一下常用的调试窗口: A.watch查看窗口 Watch查看窗口也就是我们常用于查看变量的窗口。 B.系统外设窗口 这个窗口用于查看外设寄存器数值的窗口。 以上便是此次小编带来的“单片机编程软件”相关内容,通过本文,希望大家对keil单片机编程软件的在线调试功能具备一定的认知,并在以后使用keil单片机编程软件的过程中可熟练使用它的在线调试功能。如果你喜欢本文,不妨持续关注我们网站哦,小编将于后期带来更多精彩内容。最后,十分感谢大家的阅读,have a nice day!

    时间:2020-04-02 关键词: keil 指数 在线调试 单片机编程软件

  • 单片机编程软件很简单(10),Keil单片机编程软件常见文件介绍

    单片机编程软件很简单(10),Keil单片机编程软件常见文件介绍

    单片机编程软件使用广泛,操作单片机编程软件的人员往往需具备专业知识。市场上有多款单片机编程软件可供大家选择,而小编较为推荐keil单片机编程软件。本文中,将主要为大家介绍这款单片机编程软件中的一些常见文件的作用和功能。如果你对本文即将探讨的内容存在一定兴趣,不妨继续往下阅读哦。 相信大部分朋友看见过类似上图“凌乱”的现象。工程文件和编译过程文件杂乱放在一起,其实只有.uvoptx和.uvprojx这两个比较重要,其他大部分都不重要。 小编我习惯在工程文件中放一个“删除编译产生垃圾文件.bat”文件,在最后源代码存档时删除编译过程产生的文件。 一、简介 本文说的“文件类型”指的是像.uvoptx、 .uvprojx、 .hex、 .map、 .axf、.ini、.c、.h···等一些后缀不同的文件,他们各自的作用和功能。 有时打开从其他地方获取的源文件,发现除了工程文件“.uvprojx”之外还有很大杂七杂八的文件,如:.crf、.d、.o···等一些让人看了都“烦躁”的源文件。 其实有很多文件都是在建立工程及编译之后产生的“中间文件”,对于我们来说,并不需要保存,只是在编译调试的过程中需要使用到。 当我们需要使用保存一个工程及相关源代码时,就需要把有些不必要的中间文件删除掉。于是,我们就需要知道这些文件的意思,哪些文件可以删除,哪些不能删除。 我们使用Go to Definition Of使用到的文件为.crf文件,有时候Go to Definition Of不能使用(或按F12不起作用),有可能就是相关的.crf文件被删除了,或者没有。 在线调试的时候,不能跟踪调试,很有可能是没有调试类型文件。 二、Keil中使用到的文件类型 大体可以分为7类: 1、Project Files工程类型文件; 2、Source Files源代码类型文件; 3、Listing Files链接类型文件; 4、Object and HEX Files目标和Hex类型文件; 5、Build Files编译类型文件; 6、Debugger Files调试类型文件; 7、Other Files其他类型文件。 下面章节会将常见的一些文件类型做详细说明。 三、Project Files工程类型文件 工程类型文件是比较重要的,一般不能删除。删除之后有可能打不开软件工程,所以,不能轻易删除这一类文件。 .uvmpw:多工程(工作空间)文件; .uvprojx:工程文件(Keil V5) .uvproj:工程文件(Keil V4) .uvoptx:工程选项配置文件(Keil V5) .uvopt:工程选项配置文件(Keil V4) .uv2:工程文件(Keil V3) 四、Source Files源代码类型文件 这一类源文件,我想,应该不用多说。主要就是源文件和头文件,大体上有如下一些类型: .c、 .h、 .cpp、 .inc、 .a51、 .s、 .a66、 .src等。 五、Listing Files链接类型文件 Project -> Options for Target -> Listing,如图: 这类文件的输出就在上图的地方配置,需要输出就勾选上。常见文件类型有如下几种: .map:MAP文件就是存储镜像文件,这个文件非常重要。当代码出现异常,对分析代码非常有帮助,我打算后面专门写一篇文章来讲述这个文件。 .i:C语言预处理器输出文件; .lst:C编译器或汇编程序生成的文件; .cod:包括混合C和汇编代码的完整的程序清单文件; 六、Object and HEX Files目标和Hex类型文件 Project -> Options for Target -> Output,如图: 这一类文件比较重要,调试信息、预览信息、可执行文件等都在这里面。 .hex:可执行文件(和.bin类似 用于下载到芯片的程序文件); .axf:包含调试信息的程序文件,有时候我们在调试时出现错误,可能是axf没有文件; .d:编译生成的依赖文件,一般一个.c文件对应一个.d文件; .o:也是目标的依赖文件(重定位定址的依赖文件); .lib:库文件,生成库就在这里; .elf:ELF/DWARF链接的文件; .crf:浏览信息文件,在文章开头说了,使用Go to Definition Of功能,就需要有这类文件。 七、剩下一些类型文件 Build Files编译类型文件: 这一类文件重点提一下“bat批处理文件”,也就是说在编译的时候,可以配合bat文件一起编译。Bat文件主要就是一些命令,如拷贝、新建等。 Debugger Files调试类型文件: .ini:调试加载类文件。就是在调试时加载的文件: Other Files其他类型文件: .pack:支持包文件; .sct:链接控制文件; .lnp:连接器传递命令文件; ······· 这类文件还有很多,重要性不强,不一一说明了。 以上便是此次小编带来的“单片机编程软件”相关内容,希望大家对本文讲解的内容具备一定的认知。如果你喜欢本文,不妨持续关注我们网站哦,小编将于后期带来更多精彩内容。最后,十分感谢大家的阅读,have a nice day!

    时间:2020-04-02 关键词: keil 指数 单片机编程软件

  • 单片机编程软件很简单(九),Keil单片机编程软件高级调试技巧讲解

    单片机编程软件很简单(九),Keil单片机编程软件高级调试技巧讲解

    单片机编程软件必不可少,近来文章中,小编主要为大家讲解Keil单片机编程软件。上篇中,主要阐述了Keil单片机编程软件的辅助功能。而在本文中,将介绍Keil单片机编程软件的高级调试技巧。如果你对单片机编程软件存在一定兴趣,不妨继续往下阅读哦。 Keil 内置了一套调试语言,很多高级调试技巧与此有关,但是全面学习这套语言并不现实,这不是这么几期连载可以胜任的,这里仅介绍部份较为实用的功能,如要获得更详细的信息,请参考Keil 自带的帮助文件GS51.PDF。 1、串行窗口与实际硬件相连 Keil 的串行窗口除可以模拟串行口的输入和输出功能外还可以与PC 机上实际的串口相连,接受串口输入的内容,并将输出送到串口。这需要在Keil 中进行设置。方法是首先在输出窗口的Command 页用MODE 命令设置串口的工作方式,然后用ASSIGN 命令将串行窗口与实际的串口相关联,下面我们通过一个实例来说明如何操作。例1: ORG 0000H JMP START ORG 3+4*8 ;串行中断入口 JMP SER_INT START: MOV SP,#5FH ;堆栈初始化 CALL SER_INIT ;串行口初始化A SETB EA ; SETB ES ; JMP $ ;主程序到此结束 SER_INT: JBC RI,NEXT ;如果串口接收到字 符,转 JMP SEND ;否则转发送处理 NEXT: MOV A,SBUF ;从SBUF 中取字符 MOV SBUF,A ;回送到发送SBUF 中 JMP OVER SEND: clr ti OVER: reti SER_INIT: ;中断初始化 MOV SCON,#50H ORL TMOD,#20H ORL PCON,#80H MOV TH1,#0FDH ;设定波特率 SETB TR1 ;定时器1 开始运行 SETB REN ;允许接收 SETB SM2 RET END 这个程序使用了中断方式编写串行口输入/输出程序,它的功能是将接串行口收到的字符回送,即再通过串行口发送出去。 正确输入源文件、建立工程、编译连接没有错后,可进行调试,使用Keil 自带的串行窗口测试功能是否正确,如果正确,可以进行下一步的连机试验。 为简单实用,我们不借助于其它的硬件,而是让PC 机上的两个串口互换数据,即COM1发送COM2 接收,而COM2 发送则由COM1 接收,为此,需要做一根连接线将这两个串口连起来,做法很简单,找两个可以插入PC 机串口的DIN9 插座(母),然后用一根3 芯线将它们连起来,连线的方法是: 2——3 3——2 5——5 接好线把两个插头分别插入PC 机上的串口1 与串口2。找一个PC 机上的串口终端调试软件,如串口精灵之类,运行该软件,设置好串口参数,其中串口选择2,串口参数设置,为: 19200,n,8,1 其含义是波特率为19200,无奇偶校验,8 位数据,1 位停止位。 在Keil 调试窗口的command 页中输入: >mode com1 19200,0,8,1 >assign com1 sout 注意两行最前面的“>”是提示符,不要输入,第二行中的“”即“小于”和 “大于”符号,中间的是字母“s”和“input”的前两个字母,最后是字母“s”和“output”的前三个字母。 第一行命令定义串口1 的波特率为19200,无奇偶校验,8 位数据,1 位停止位。第二行是将串口1(com1)分配给串行窗口。 全速运行程序,然后切换串口精灵,开始发送,会看到发送后的数据会立即回显到窗口中,说明已接收到了发送过来的数据。切换到uVison,查看串行窗口1,会看到这里的确接 收到了串口精灵送来的内容。 2、从端口送入信号 程序调试中如果需要有信号输入,比如数据采集类程序,需要从外界获得数据,由于Keil 的调试完全是一个软件调试工具,没有硬件与之相连,所以不可能直接获得数据,为此必须采用一些替代的方法,例如,某电路用P1 口作为数据采集口,那么可以使用的一种方法是利用外围接口,打开PORT 1,用鼠标在点击相应端口位,使其变为高电平或低电平,就能输入数据。显然,这种方法对于要输获得数据而不是作位处理来说太麻烦了,另一种方法是直接在command 页输入port1=数值,以下是一个小小的验证程序。例2: LOOP: MOV A,P1 JZ NEXT MOV R0,#55H JMP LOOP NEXT: MOV R0,#0AAH JMP LOOP END 该程序从P1 口获得数据,如果P1 口的值是0,那么就让R0 的值为0AAH,否则让R0的值为55H。输入源程序并建立工程,进入调试后,在观察窗口加入R0,然后全速运行程序,注意确保View->Periodic Window Updata 处于选中状态,然后在Command 后输入PORT1=0 回车后可以发现观察窗口中的R0 的值变成了0AAH,然后再输入PORT1=1 或其它非零值,则R0 的值会变为55H。同样的道理,可以用port0、port2、port3 分别向端口0、2、3 输入信号。 3、直接更改内存值 在程序运行中,另一种输入数据的方法是直接更改相应的内存单元的值,例如,某数据采集程序,使用30H 和31H 作为存储单元,采入的数据由这两个单元保存,那么我们更改了30H 和31H 单元的值就相当于这个数据采集程序采集到了数据,这可以在内存窗口中直接修改(参考上一讲),也可以通过命令进行修改,命令的形式是: _WBYTE (地址,数据),其中地址是指待写入内存单元的地址, 而数据则是待写入该地址的数据。例如_WBYTE(0x30,11)会将值11 写入内存地址十六进制30H 单元中。 以上便是此次小编带来的“单片机编程软件”相关内容,希望大家对本文讲解的内容具备一定的了解。如果你喜欢本文,不妨持续关注我们网站哦,小编将于后期带来更多精彩内容。最后,十分感谢大家的阅读,have a nice day!

    时间:2020-03-10 关键词: keil 指数 单片机编程软件 调试技巧

  • 单片机编程软件很简单(八),Keil单片机编程软件辅助功能讲解

    单片机编程软件很简单(八),Keil单片机编程软件辅助功能讲解

    单片机编程软件的应用很多,在单片机编程软件的帮助下,我们对单片机的控制才变得如此简单。在市场上流通的单片机编程软件中,小编最为喜爱Keil单片机编程软件。在本文中,小编将为大家介绍Keil单片机编程软件的辅助工具。如果你对本文将要探讨的内容存在一定兴趣,不妨继续往下阅读哦。 这部份功能并不是直接用来进行程序调试的,但可以帮助我们进行程序的调试、程序性能的分析,同样是一些很有用的工具。 1、外围接口 为了能够比较直观地了解单片机中定时器、中断、并行端口、串行端口等常用外设的使用情况,Keil 提供了一些外围接口对话框,通过Peripherals 菜单选择,该菜单的下拉菜单内容与你建立项目时所选的CPU有关,如果是选择的89C51 这一类“标准”的51 机,那么将会有Interrupt(中断)、I/O Ports(并行I/O 口)、Serial(串行口)、TImer(定时/计数器)这四个外围设 备菜单。打开这些对话框,列出了外围设备的当前使用情况,各标志位的情况等,可以在这些对话框中直观地观察和更改各外围设备的运行情况。 下面我们通过一个简单例子看一看并行端口的外围设备对话框的使用。例4: MOV A,#0FEH LOOP: MOV P1,A RL A CALL DELAY ;延时100 毫秒 JMP LOOP 其中延时100 毫秒的子程序请自行编写。 编译、连接进入调试后,点击Peripherals->I/O-Ports->Port 1 打开,如图1 所示,全速运行,可以看到代表各位的勾在不断变化(如果看不到变化,请点击View->Periodic Window Updata),这样可以形象地看出程序执行的结果。 注:如果你看到的变化极快,甚至看不太清楚,那么说明你的计算机性能好,模拟执行的速度快,你可以试着将加长延时程序的时间以放慢速度。模拟运行速度与实际运行的速度无法相同是软件模拟的一个固有弱点。 点击Peripherals->I/O-Ports->TImer0 即出现图2 所示定时/计数器0 的外围接口界面,可以直接选择Mode 组中的下拉列表以确定定时/计数工作方式,0-3 四种工作方式。 图1 外围设备之并行端口 图2 外围设备之定时器 设定定时初值等,点击选中TR0,status 后的stop 就变成了run,如果全速运行程序,此时th0,tl0 后的值也快速地开始变化(同样要求Periodic Window Updata 处于选中状态),直观地演示了定时/计数器的工作情况(当然,由于你的程序未对此写任何代码,所以程序不会对此定时/计数器的工作进行处理)。 2、性能分析 Keil 提供了一个性能分析工具,利用该工具,我们可以了解程序中哪些部份的执行时间最长,调用次数最多,从而了解影响整个程序中执行速度的瓶颈。下面通过一个实例来看一看这个工具如何使用,例5: #include "reg51.h" sbit P1_0=P1^0; //定义P1.0 void mDelay(unsigned char DelayTIme) { unsigned int j=0; for(;DelayTIme>0;DelayTime--) { for(j=0;j0;DelayTime--) { for(j=0;jPerformance Analyzer Window,打开性能分析对话框,进入该对话框后,只有一项unspecified,点鼠标右键,在快捷菜单中选择Setup PA即打开性能分析设置对话框,对于C 语言程序,该对话框右侧的“Function Symbol”下的列表框给出函数符号,双击某一符号,该符号即出现在Define Performance Analyzer 下的编缉框中,每输入一个符号名字,点击Define 按钮,即将该函数加入其上的分析列表框。对于汇编语言源程序,Function Symbol 下的列表框中不会出现子程序名,可以直接在编缉框中输入子程序名,点击Close 关闭窗口,回到性能分析窗口,此时窗口共有4 个选项。全速执行程序,可以看到mDelay 和mDelay1 后出现一个蓝色指示条,配合上面的标尺可以直观地看出每个函数占整个执行时间的比例,点击相应的函数名,可以在该窗口的状态栏看到更 详细的数据,其中各项的含义如下: Min:该段程序执行所需的最短时间;Max:该段程序执行所需的最长时间;Avg:该段程序执行所花平均时间;Total:该段程序到目前为目总共执行的时间;%:占整个执行时间的百分比;count:被调用的次数。 本程序中,函数mDelay 和mDelay1 每次被调用都花费同样的时间,看不出Min、Max、和Avg 的意义,实际上,由于条件的变化,某些函数执行的时间不一定是一个固定的值,借助于这些信息,可以对程序有更详细的了解。下面将mDelay1 函数略作修改作一演示。 void mDelay1(unsigned char DelayTime) { static unsigned char k; unsigned int j=0; for(;DelayTime>0;DelayTime--) { for(;j {;} } k++; } 程序中定义了一个静态变量K,每次调用该变量加1,而j 的循环条件与k的大小有关,这使每次执行该程序所花的时间不一样。编译、执行该程序,再次观察性能分析窗口,可以看出Min、Max、Avg 的意义。 3、变量来源浏览 该窗口用于观察程序中变量名的有关信息,如该变量名在那一个函数中被定义、在哪里被调用,共出现多少次等。在Source Browse 窗口中提供了完善的管理方法,如过滤器可以分门别类地列出各种类别的变量名,可以对这些变量按Class(组)、Type(类型)、Space(所在空间)、Use(调用次数)排序,点击变量名,可以在窗口的右侧看到该变量名的更详细的信息。 4、代码作用范围分析 在你写的程序中,有些代码可能永远不会被执行到(这是无效的代码),也有一些代码必须在满足一定条件后才能被执行到,借助于代码范围分析工具,可以快速地了解代码的执行情况。进入调试后,全速运行,然后按停止按钮,停下来后,可以看到在源程序的左列有三种颜色,灰、淡灰和绿,其中淡灰所指的行并不是可执行代码,如变量或函数定义、注释行等等,而灰色行是可执行但从未执行过的代码,而绿色则是已执行过的程序行。使用调试工具条上的Code Coverage Window 可打开代码作用范围分析的对话框,里面有各个模块代码执行情况的更详细的分析。如果你发现全速运行后有一些未被执行到的代码,那么就要仔细分析,这些代码究竟是无效的代码还是因为条件没有满足而没有被执行到。 以上便是此次小编带来的“单片机编程软件”相关内容,希望大家对本文讲解的内容具备一定的了解。如果你喜欢本文,不妨持续关注我们网站哦,小编将于后期带来更多精彩内容。最后,十分感谢大家的阅读,have a nice day!

    时间:2020-03-10 关键词: keil 指数 单片机编程软件 辅助功能

  • 单片机编程软件很简单(七),Keil单片机编程软件软件仿真+硬件仿真

    单片机编程软件很简单(七),Keil单片机编程软件软件仿真+硬件仿真

    单片机编程软件的重要性不言而喻,对于单片机编程软件,大家或多或少有所接触。在往期单片机编程软件文章中,小编介绍过IAR单片机编程软件、Keil单片机编程软件。在本文中,小编将再次基于Keil软件,介绍这款单片机编程软件的软件仿真以及硬件仿真。如果你对单片机编程软件存在一定兴趣,或者对本文即将涉及的内容存在疑惑,不妨继续往下阅读哦。 一、软件仿真 Keil有很强大的软件仿真功能,通过软件仿真可以发现很多将要出现的问题,Keil的仿真可以查看很多硬件相关的寄存器,通过观察这些寄存器值的变化可以知道代码有没有正常运行。这样可以避免频繁下载程序,延长单片机Flash寿命。 开始仿真之前,先配置一些选项。 1.在工程设置里设置好芯片型号和晶振频率。 2.在“Debug”选项卡中选择“Use Simulator”,表示使用软件仿真;选择“Run to main()”则表示跳过汇编代码,直接跳转到main函数开始仿真。设置下面的“Dialog DLL”项为“DARMSTM.DLL”和“TARMSTM.DLL”;parameter项为“-pSTM32F103C8”,用于设置支持STM32F103C8的软硬件仿真。 3.点击开始仿真,这个时候会多出来一个工具条,就是Debug工具条。 1:复位,其功能等同于硬件上按复位按钮,相当于实现了一次硬复位。按下该按钮后,代码会重新从头开始执行。 2:执行到断点处,按按钮用来快速执行到断点处,有时候并不需要观看每步时怎么执行的,而是想快速执行到程序的某个地方看结果,这个按钮就可以实现这样的功能,前提是已在查看的地方设置了断点。 3:停止运行,此按钮在程序一直执行的时候变为有效,可以使程序停止下来进入到单步调试状态。 4:执行进去,该按钮用来实现执行到某个函数里面去的功能,在没有函数的情况下等同于执行过去按钮。 5:执行过去,在碰到有函数的地方,通过该按钮就可以单步执行过这个函数,而不进入这个函数单步执行。 6:执行出去,该按钮是进入了函数单步调试的时候,有时候可能不必再执行该函数的剩余部分了,通过该按钮就直接一步执行完函数余下的部分,并跳出函数回到函数被调用的位置。 7:执行到光标处:该按钮可以迅速使程序运行到光标处,与执行到断点处按钮功能类似。 8:汇编窗口,通过该按钮可以查看汇编代码,这对分析程序很有用。 9:堆栈局部变量窗口,通过该按钮可以显示Call Stack+Locals窗口,显示当前函数的局部变量及其值,方便查看。 10:观察窗口,MDK5提供2个观察窗口(下拉选择),该按钮按下则弹出一个显示变量的窗口。输入想观察的变量或表达式,即可查看其值,是很常用的调试窗口。 11:内存查看窗口,MDK5提供4个内存查看窗口,按下按钮,则弹出一个内存查看窗口,可以在里面输入要查看的内存地址,然后观察这一片内存的变化情况。 12:串口打印窗口,MDK5提供4个串口打印窗口。按下该按钮,则弹出一个类似串口调试助手界面的窗口,用来显示从串口打印出来的内容。 13:逻辑分析窗口,该图标下面有3个选项,一般用第一个,也就是逻辑分析窗口。通过SETUP按钮新建一些IO口,于是可以观察这些IO的电平变化情况,并以多种形式显示出来,比较直观。 14:系统查看窗口,该按钮可以提供各种外设寄存器的查看窗口(通过下拉选择),选择对应外设即可调出该外设的相关寄存器表,并显示这些寄存器的值,方便查看设置是否正确。 二、硬件仿真 硬件仿真则是程序下载到单片机中,进行的仿真,是程序实际在单片机中运行的情况。 需要选择后面那个选项,然后在下拉单里选择自己的仿真器。然后后面步骤和软件仿真一样。 注:要在逻辑硬件仿真里使用逻辑分析仪之类的工具,要开“Trace” 以上便是此次小编带来的“单片机编程软件”相关内容,通过本文,希望大家对Keil单片机编程软件的软件仿真和硬件仿真具备一定的认知。如果你喜欢本文,不妨持续关注我们网站哦,小编将于后期带来更多精彩内容。最后,十分感谢大家的阅读,have a nice day!

    时间:2020-03-10 关键词: keil 指数 软件仿真 单片机编程软件

  • 单片机编程软件很简单(六),V5.29 keil mdk单片机编程软件新特性+烧写程序

    单片机编程软件很简单(六),V5.29 keil mdk单片机编程软件新特性+烧写程序

    单片机编程软件使用广泛,市场上最为流通的单片机编程软件为IAR、keil。往期中,小编曾对keil单片机编程软件带来诸多介绍,想必大家对这款单片机编程软件早已熟悉。但是大家了解keil mdk单片机编程软件吗?本文中,小编将对keil mdk v5.29版本单片机编程软件的新特性加以讲解。此外,文章第四部分将对keil单片机如何烧写程序予以介绍。如果你对本文即将涉及的两大部分存在兴趣,请继续往下阅读哦。 一、keil mdk新特性 关注Keil的读者应该知道MDK升级至V5.29的消息了。我看到升级消息也是第一时间去下载更新体验了一下。 升级之后的,用户使用上没有太多变化,主要是升级了一些组件,简单的说,就是一些小改动。 现在MDK也在搜集用户信息了,说的是用于分析产品,比如:平时的遇到的一些BUG,但具体会搜集哪些信息,还未知。 一般装好之后,启动时会有这么一个提示,若不想被收集,点击“否”。下面讲讲升级的内容,共四项。 1.编译器Arm Compile升级至V6.13.1主要增加的功能是对Armv8.1-M和可选的M-profile Vector Extension(MVE)的支持。 MVE带来了几个独特的架构功能,这些功能可以在DSP和机器学习内核中实现更高的性能。 二、中间件MDK-Middleware升级至V7.10.0这次升级,中间件升级内容最多,包括文件系统、网络、USB等。 1.文件系统组件 添加了用于管理文件或目录时间戳的 ftime_set 和 ftime_get 函数。 添加了状态代码fsAlreadyExists和fsNotDirectory,可以在使用fmkdir,frmdir和fchdir时进行更多控制。 添加了功能fversion,用于检索FileSystem组件的版本。 增强了标准I / O例程使用的文件系统功能的错误报告(使用errno检索上一个错误代码)。 使用选项 /S 和名称缓存时,已纠正frmdir中的错误,该错误可能导致重命名操作后无法访问文件。 2.网络组件 在客户端模式下使用PPP接口并且服务器生成小于16字节的CHAP质询时,已纠正CHAP身份验证中可能的内存损坏。 在HTTP服务器摘要身份验证中增加了对用户帐户的支持。 增加了对存储为MD5哈希值HA1的密码的支持。 在HTTP服务器中增加了对摘要访问身份验证的支持。 收到分段的广播消息时,更正了内存问题。 如果未创建BSD套接字,则从BSD_EINVAL到BSD_ESOCK的更正返回码。 提高了BSD插槽的坚固性。 纠正了对链接层寻址的UDP消息的过滤(不再收到具有正确MAC地址和无效IP地址的数据报)。 3.USB组件 USB设备/主机:为USB堆栈创建的所有线程添加了线程名称。 USB主机:更正后的USBH_Device_GetController / Port / Speed / Address / VID / PID函数可用于设备枚举初始化回调。 二、改进µVision µVision调试器现在支持 ADI v6(在ULINKplus,ULINKpro和CMSIS-DAP中)。 在反汇编程序中支持Armv8.1-M体系结构扩展。 自动生成的分散文件可以管理具有相同名称的多个模块。 如果所有包含的对象都是最新的,则跳过在构建过程中运行Lib。 三、更新调试驱动程序和模型 ULINKpro固件v1.59 ST-Link驱动程序v3.0.7.0 NULink驱动程序v3.01.6951 删减了对Stellaris ICDI的支持 快速模型11.8 四、keil c51软件烧写操作说明 1、适用范围 适用于以51系列芯片作为软件运行载体的所有设备。 2、运行环境 WIN98、NT、WIN2000、WINXP、WIN7等操作系统。 3、辅助工具 PC机1台、KEIL C51 安装软件、编程器(UEC-5)1个、USB转RS232数据线(电脑无串口时需配备)1条 4、软件安装 Keil C51软件在首次使用时需要安装,使用的工装(电脑PC)上已安装好软件此步骤可以省略。 5、KEIL C51设置 6、产品软件烧写 以上便是此次小编带来的“单片机编程软件”相关内容,通过本文,希望大家对keil mdk v5.29版本单片机编程软件的新特性具备一定的认知,并对keil c51烧写程序的步骤有所了解。如果你喜欢本文,不妨持续关注我们网站哦,小编将于后期带来更多精彩内容。最后,十分感谢大家的阅读,have a nice day!

    时间:2020-01-20 关键词: keil 烧写程序 mdk 单片机编程软件

  • 单片机编程软件很简单(五),keil单片机编程软件变量用法(下)

    单片机编程软件很简单(五),keil单片机编程软件变量用法(下)

    对于单片机编程软件,想必大家均有所了解。针对单片机编程软件,小编曾对keil、IAR予以介绍。本文对于单片机编程软件的讲解,同样基于keil。本文中,将介绍keil单片机编程软件变量用法下篇。如果你对单片机编程软件相关内容存在一定兴趣,不妨继续往下阅读哦。 一、Keil C51中使用变量存储模式的必要性 在Keil C51中,变量的存储模式是一个可选项,如果不使用这个选项,则Keil C51在编译时自动进行优选分配。但这种处理方法有以下缺点: ①系统不知道各种变量的使用频度,有可能对使用频度高的变量使用了访问速度慢的片外存储方式,而对使用频高的变量使用了片内存储方式,使得程序的运行效率降低; ②在使用指针寻址时,由于不知道寻址对象的存储方式,只好使用一般指针,在Keil C51中一般指针要多占用1~2个字节,并且使用时还要对存储方式进行判断,增加了寻址操作时间。 如果能够在定义变量的同时定义其存储类型,可以高效地使用51内核单片机的存储空间,获得高质量的目标代码。 二、Keil C51变量的使用方法 2.1 全局变量和静态局部变量 全局变量一般会在多个函数中被使用,并在整个程序运行期间内有效,静态局部变量虽然只在一个函数中使用,但也是在整个程序运行期间有效。对于这些变量,应尽量选择data型,这样在目标代码中就可以用直接寻址指令访问,获得最高的访问速度,提高程序的工作效率。例如一个保存人数的全局变量n_g,在多个函数中都被经常用到,可以这样定义: unsigned int data n_g;//对n_g赋值时使用“MOV XXH,……”指令 2.2 数组(包括全局和局部) 定义数组一般用idata存储类型,在目标代码中使用“MOV@Ri”指令进行间接寻址。如果因数组元素过多而在编译时报错,可以改用pdata和xdata存储类型。 数组定义为data存储类型意义不大,因为既然使用数组,就是希望能够根据某一自变量访问数组元素。如定义X[100],一般都是为了能够使用X(i是一个变量)来访问,这样在目标代码中就必须使用问接寻址,所以数组没有必要使用data存储类型,即便使用了data存储类型,在目标代码中也仍然要用间接寻址指令。数组定义成idata存储类型,在使用52内核且片内数据存储器不够时,会使用只能间接寻址的片内数据存储空间。这样,既不能降低处理速度,又扩大了可使用的存储空间。 2.3 供查表用的数据 这类数据的特点是需要始终保持不变,且使用时只读,因此应定义为code型。例如一个字形表: 全局或局部code型变量在存储时无区别。 2.4 非静态局部变量 非静态局部变量仅在某一函数内使用,退出该函数时变量也被释放。 若系统使用small存储模式,对于这些变量可以不加存储说明,由编译软件自行按最优原则决定,因为仅在函数内使用的非静态局部变量,有可能使用工作寄存器R0~R7,这样会更快速和更节省存储空间。例如: unsigned char i,j; //系统尽可能会用R0~R7存储i和j 若系统使用了compact或large存储模式,则应将这些变量定义为data存储模式,以防系统自行决定时被定义为pdagta或xdata模式而降低工作效率。 2.5 指针 如前所述,定义指针变量时有2个存储类型:数据存储类型,说明被寻址对象的存储类型;指针存储类型,说明指针自身的存储类型。当数据存储类型为xdata时,指针自身占用2个字节;当数据存储类型为pdata以及idata等片内存储类型时,指针自身占用1个字节;若不说明数据存储类型,指针自身就要占用3个字节。因此,在KeilC51中使用指针时,应尽量定义数据存储类型,但要特别注意指针中的数据存储类型与被寻址对象的存储类型必须一致。指针都是频繁使用的,它要不断被设置、修改和使用,因此它自身的存储类型应选择data型。例如定义一个数组时就同时定义其存储类型,以后用指针对其寻址时就将数组的存储类型添加到指针的数据类型中。方法如下: 2.6 二义性变量 在标准C中如果要使用一个二义性变量,只能用枚举类型。如: 以上程序在Keil C51中使用时,变量t虽然仅有0和1两种状态,但在目标代码中仍占用一个字节。此处理方法既浪费存储资源,又延长了处理时间,这对于8086内核算不上多大问题,但在资源有限、运行速度不高的51内核中就不能不考虑了。在Keil C51中可使用以下方法: 这两种方式效果是完全相同的,但在目标代码中变量t仅占用1位(即1/8字节),而且因为51内核单片机指令系统中有位处理指令,生成的目标代码占用内存少、运行速度快。 2.7 特殊功能寄存器变量(包括位变量) 特殊功能寄存器中,累加器A、寄存器B、堆栈指针SP和数据指针DPTR是归系统使用的,在C51中不提供给用户。其他的特殊功能寄存器都可以用sfr定义成变量,其中地址可以被8整除者的各位,还可以用bsfr定义成位变量。访问这些变量,就可以对特殊功能寄存器及其可以位寻址的各位进行读写,达到操作单片机内部各硬件的目的。对于标准的51内核单片机,头文件reg51.h、reg52.h或其他头文件中已对这些特殊功能寄存器变量作了定义,用户可以用#include将此头文件包含进来,然后就可以使用了。现在很多51内核兼容型单片机扩展了更多的特殊功能寄存器,这些就需要用户自行定义,具体方法可参考器件的使用说明。 2.8 外部数据存储器变量 若设置成pdata和xdata存储类型,将把变量存储在片外数据存储器中。这两种存储类型的访问速度最慢,非迫不得已不要使用。在使用这两种存储类型时,注意尽量只用它保存原始数据或最终结果,尽量减少对其访问的次数,需要频繁访问的中间结果不要用它。 2.9 用外部数据存储器地址扩展的其他硬件 在单片机外部扩展的其他硬件,一般都借用外部数据存储器地址,表现为外部数据存储器单元形式。对于这些硬件,可以用指针进行读写操作。例如: 以上便是此次小编带来的“单片机编程软件”相关内容,通过本文,希望大家对本文讲解的内容具备一定的了解。如果你喜欢本文,不妨持续关注我们网站哦,小编将于后期带来更多精彩内容。最后,十分感谢大家的阅读,have a nice day!

    时间:2020-01-20 关键词: keil 单片机编程软件 变量用法

  • 单片机编程软件很简单(四),keil单片机编程软件变量用法(上)

    单片机编程软件很简单(四),keil单片机编程软件变量用法(上)

    常用单片机编程软件有多款,其中keil单片机编程软件较为知名。对于keil单片机编程软件,小编曾带来3篇系列教程。本文对于单片机编程软件的讲解同样基于keil,在本文中,小编将对单片机编程软件keil c51的变量使用方法加以介绍。 8051内核单片机是一种通用单片机,在国内占有较大的市场份额。在将C语言用于51内核单片机的研究方面,Keil公司做得最为成功。由于51内核单片机的存储结构的特殊性,Keil C51中变量的使用与标准C有所不同。正确地使用变量,有利于获得高效的目标代码。 一、CPU存储结构与变量的关系 变量都需要有存储空间,存储空间的不同使得变量使用时的工作效率也不同。 标准C的典型运行环境是8086(含IA-32系列)内核,其存储结构是CPU内部有寄存器,外部有存储器,寄存器的访问速度大大高于存储器的访问速度。在标准C中,不加特别定义的变量是放在存储器中的,使用register可以强制变量存储在寄存器中,对于使用特别频繁且数量不多的变量可以选用这种存储模式,以获得更高的工作效率。 相比之下,51内核单片机的存储结构则显得有些怪异,它的存储空间有3个:程序存储器空间(64 KB含片内、片外)、片外数据存储器空间(64KB)、片内数据存储器及特殊功能寄存器空间。它没有真正意义上的寄存器,它的寄存器其实是片内数据存储器(如R0~R7)和特殊功能寄存器(如A、B等)中的一部分。因此,在Keil C51中使用变量就和标准C有很大不同。 二、Keil C51变量分析 Keil C51支持标准C原有的大多数变量类型,但为这些变量新增了多种存储类型,也新增了一些标准C没有的变量。 2.1 Keil C51新增的变量存储类型 Keil C51中定义变量的格式如下: [存储种类]数据类型[存储类型]变量名表; 其中,[存储类型]是标准C中没有的,[存储类型]共有6种,分别介绍如下: ①data。将变量存储在片内可直接寻址的数据存储器中。使用这种存储模式,目标代码中对变量的访问速度最快。 ②bdata。将变量存储在片内可位寻址的数据存储器中。在目标代码中变量可以方便地进行位处理,在不进行位处理时与data相同。 ③idata。将变量存储在片内间接寻址的数据存储器中。在52内核中,当片内直接寻址数据存储器不够用时,可以使用128字节间接寻址数据存储器,访问速度一般较data要慢一些,但具有最大的片内数据存储器空间;在51内核中因无单独的间接寻址数据存储器区,idata与data无区别。 ④xdata。将变量存储在片外数据存储器中。目标代码中只能使用“MOVX A,@DPTR”和“MOVX@DPTR,A”指令访问变量,访问速度最慢,但存储空间最大(64KB)。 ⑤pdata。将变量存储在片外数据存储器中的第一页(00H~FFH)中。目标代码中可以使用“MOVX A,@Ri”和“MOVX@Ri,A”指令访问变量,访问速度与xdata相同,存储空间为256字节。 ⑥code。将变量存储在程序存储器中。目标代码中只能使用MOVC指令访问变量,因变量存储在程序存储器中,具有非易失性且为只读。 2.2 Keil C51新增的指针变量存储类型 Keil C51中的指针变量形式如下: 数据类型[数据存储类型]*[指针存储类型]标识符; 其中,[数据存储类型]和[指针存储类型]都是标准C中没有的。[数据存储类型]定义数据(即寻址对象)存储的空间,[指针存储类型]定义指针自身存储的空间。若不使用[数据存储类型],则指针为一般指针,占用3个字节;若使用[数据存储类型]则指针为基于存储器的指针,占用1~2个字节。 2.3 Keil C51新增的变量类型 bit:位变量。存储在片内数据存储器的可位寻址字节(20H~2FH)的某个位上,这个变量在实时控制中具有很高的实用价值。 sfr:特殊功能寄存器变量。存储在片内特殊功能寄存器中,用来对特殊功能寄存器进行读写操作。 sbit:特殊功能寄存器位变量。存储在片内特殊功能寄存器的可位寻址字节(地址可以被8整除者)的某个位上,用来对特殊功能寄存器的可位寻址位进行读写操作。 sbitl6:16位特殊功能寄存器变量。存储在片内特殊功能寄存器的连续2个字节的低地址上,这个变量类型很少使用。 以上这些Keil C51中新增的变量类型,不支持数组和指针操作。 以上便是此次小编带来的“单片机编程软件”相关内容,通过本文,希望大家对单片机编程软件Keil C51变量的使用具备一定的了解。如果你喜欢本文,不妨持续关注我们网站哦,小编将于后期带来更多精彩内容。最后,十分感谢大家的阅读,have a nice day!

    时间:2020-01-20 关键词: keil 单片机编程软件 变量使用方法

  • 单片机编程软件很简单(三),keil单片机编程软件双数据指针+二进制

    单片机编程软件很简单(三),keil单片机编程软件双数据指针+二进制

    单片机编程软件实际使用较多,因此单片机编程软件具备很强的使用价值。对于单片机编程软件,小编曾带来诸多介绍,如单片机编程软件有哪些等。本文对单片机编程软件的讲解基于Keil C51,主要内容为介绍keil对双数据指针的支持情况以及其代码生成机制,并为大家介绍keil c51直接使用二进制的方法。 在8051体系中,数据指针DPTR作为一个特殊的16位寄存器,用于寻址64 KB的XDATA或CODE空间,通常它被当作一个16位指针,指向一个常数表。双数据指针可以改善同时有两个16位指针使用时的性能。作为一种增强特性,有许多8051派生型器件支持双数据指针。以宏晶科技STC89系列的产品为例,DPTR被增强为DPTR0和DPTR1两个,仍然使用原来的地址,用另外一个SFR AUXR1的0位DPS来切换。当DPS位为0时,所有对DPTR的操作使用DPTR0;当DPS位为1时,所有对DPTR的操作使用DPTR1。这样,通过一个简单的INC AUXR1指令,就可以来回切换两个数据指针。 一、Keil C51对双数据指针的支持情况 作为一个常用的C51编译器,Keil C51是支持双数据指针的,但并不是直接支持。如果要在C51程序中使用双数据指针,有一些特别的要求。 首先来看Keil C51是如何支持双数据指针的。 在Keil C51的编译器手册中指出:#pragma modp2可以打开Philips或Atmel WM系列器件中有双DPTR的型号,并且可以提升以下库函数的性能,包括:memcpy,memmove,memcmp,strcpy,strcmp。 Keil公司也提供了一个对照表,对比性能的提升。对比的型号是8051和Dallas 320,函数是memcpy块拷贝。对照表如下: 看起来似乎使用库函数就可以大幅度提高程序性能,但实际上这样做并不能保证一定可以提高程序性能。首先Dallas 320是4T的CPU,本身就比12T的8051快。其次,以memcpy为例,它的原型是void*memcpy(void*s1,const void*s2,int len),其传人参数有3个,合计8字节,要使用数据段来传送。在数据量少的情况下,参数传递的开销就有可能大过数据传递的开销。如果想要在数据块拷贝或移动的同时对数据加以处理,比如在一个目的数据块后面加上一个校验和,那么使用库函数是办不到的,只有通过循环来进行。当数据块的源和目都是16位地址时,每一次循环都会有两次对数据指针的赋值,在源地址和目地址之间来回切换,这时采用双数据指针会有效地提高程序性能。 如果要在程序中直接生成使用双数据指针的代码,目前没有直接的编译指令。Keil公司在它的网站上曾说过多数据指针支持库函数,并且目前也未打算在编泽器中直接支持多数据指针。 二、 Keil C中直接生成双数据指针的代码 实际上,Keil C51编译器还是可以直接生成使用双数据指针的代码的,只要没定好适当的优化级别,安排好适当的C51语句,编译器就会生成使用双数据指针的代码。下面给出一个例子,使用双数据指针将CODE区的一个16字节的数组拷贝到XDATA区。 编译后其中for循环的汇编代码主体如下: 可以看到,汇编代码基本上是最简化的使用双数据指针的汇编程序。 由上面的代码可知,在优化级别7(Extended Index Ac-cess OpTImizing)的作用下,DPTR被调用了。通过类型转换和SFR指令的配合,双数据指针指令被生成。这足一个经验方法,基本上这是一个框架,可以在看到双DPTR调用被生成后加入其他语句,在块操作的同时处理数据。 三、调试环境的设定 在Keil uVision2环境下,软件仿真Philips或AtmelWM系列器件中有双DPTR的型号时,仿真器中会有AUXR1、DPTR0、DPTR1这3个寄存器。如果不使能双DPTR特性,仿真时DPTR的值是混乱的。对于宏晶科技STC89系列器件的双DPTR特性,打开软件仿真设定的具体步骤是:在File/Device Database菜单中选择STC的某一具体型号,在OpTIons框中"CPU="一项后加上MODP2,然后单击Update更新器件库。打开双数据指针调试后,再启动Debug,就会有AUXR1、DPTR[0]、DPTR[1]这3个寄存器。当加载上述程序时,会清楚地看到双数据指针的操作和AUXR1的变化。 四、Keil C51中直接使用二进制数方法 在Keil C51中数不能直接以二进制形式赋值,虽然在8051的汇编中是可以的。二进制数虽然书写长,易出错,但是由于是一位位写的,所以程序设计者能够很明确的看到每一位的状态,看得比较直观。于是很多人怀念了8051的汇编,很想在C51中使用二进制。没猜错的话搜到本篇日志的人很可能就是来找这种解决办法的,下面两种办法都是不错的选择。 方法一: 建立一个头文件,将所有的二进制数宏定义列举出来,用的时候直接使用宏定义,头文件定义:binary(右键>>“目标另存为”>>下载)。 方法二: 做一个带参数宏定义,将输入的类二进制数变换为对应的16进制数,整个定义和使用实例请见下文,可以直接使用,如果想研究原理又看不懂带参宏定义的朋友们请参考谭浩强的《C程序设计》预处理命令一章内容(第三版在P204-P211)。 #define LongToBin(n) \ (\ ((n >> 21) & 0x80) | \ ((n >> 18) & 0x40) | \ ((n >> 15) & 0x20) | \ ((n >> 12) & 0x10) | \ ((n >> 9) & 0x08) | \ ((n >> 6) & 0x04) | \ ((n >> 3) & 0x02) | \ ((n ) & 0x01) \ ) #define Bin(n) LongToBin(0x##n##l) void main(void) { unisigned char c; c = Bin(10101001); //相当于c = 0xA9 } 上面预处理指令中使用了反斜杠\,这里解释一下:每一条预处理语句总是以"#"字符开始,并且不能超过一行,一旦遇到换行符语句就被当做结束,唯一的一种能将预处理语句扩展到多行的办法就是在换行符之前加一个反斜杠('\')。 以上便是此次小编带来的“单片机编程软件”相关内容,通过本文,希望大家对keil c51的双数据指针以及代码生成等知识具备一定的认知。如果你喜欢本文,不妨持续关注我们网站哦,小编将于后期带来更多精彩内容。最后,十分感谢大家的阅读,have a nice day!

    时间:2019-12-27 关键词: 二进制 单片机编程软件 双数据指针

  • 单片机编程软件很简单(二),keil单片机编程软件心得秘笈

    单片机编程软件很简单(二),keil单片机编程软件心得秘笈

    单片机编程软件为常用软件之一,单片机开发人员均用过多款单片机编程软件。那么,用单片机编程软件进行开发时,大家是否有独特新得呢?本文对单片机编程软件的讲解基于Keil C51,主要为大家介绍使用这款单片机编程软件开发单片机时积攒的一些开发心得体悟,以供大家参考。如果你对本文即将要讲解的内容感兴趣,或者你正在学习单片机编程软件,都请继续往下阅读哦。 用Keil写C51程序是最好不过的了,用伟福也可以写,但伟福的编辑能力就相差太远了。个人喜欢用Keil写代码,然后用伟福硬件仿真(只有WAVE的仿真头)。不过Keil是好用,但写代码关键还是C51水平,也就是编程能力,写C程序就离不开模块化这个词了。C51和A51,要扬长避短,发挥C的长处,就得将C模块化好。刚刚开始的时候就只是熟悉C51的语法规则了,熟悉了这个然后再追求程序的可读性和可移植性。 下面是使用Keil C51的一点心得: 1、程序可读性的提高 要提高程序的可读性,就得养成一良好的编程习惯了,例如变量用小写,常量用大写,函数第一个字母用大写等等。这样成习惯以后,自己看代码就会一目了然。另外还要灵活的在KEIL中使用TAB键对对齐文本,而不要敲空格代替(优势,试了就知道了)。 2、程序的可移植性的提高 程序的可移值性是C51的优势所在,要做到移植方便,就得熟悉C51的编译过程有一定的了解,合理组织文件。可以将一个功能模块(如显示驱动,端口读写)放在一个C文件中,作为一个函数调用,然后在主程序中申明该函数,就可以随便调用了。 移值的时候也只要把当前的C文件加入到新的项目中,同样的方法调用它就可以。 另外模块化程序要善用C里面的“#IFDEF”、“#ENDIF”、“#DEFINE”等专为模块设计提供的功能。例如设计一个外面带的晶振的驱动模块,在不同的晶振频率下,该项模块的设置位可能不同。如果就直接在程序中写设置位,晶振改变,这些设置位也要逐一修改,这个程序也就不通用了,也就是可移值性不好。要解决这个问题怎么办 ,“#IFDEF”、“#ENDIF”可以帮你解决问题。这两个命令的功能就不具体说了,书上面讲得很清楚。知道这些功能你就知道该怎样使用它们进行模块化设计了。 3、Keil C51的debug技巧 A51的程序执行时间可能通过指令周期计算出来,而C51的却无从下手,很多程序员为了得到精确的执行时间而研读反汇编代码,何等的悲哀。巧妙的使用Keil中的debug功能,问题就迎刃而解了。 下面举例说明:   该程序为一个延时程序,在12M的晶振下,调用一次的时间为16uS ,执行一次循环的时间为9uS(延时范围(25us~589.831ms))。这样来,假设有语句Delay(N);那么该语句的精确延时的计算公式就是(9*N+16)uS了.这个公式可以理解吧! 如何得到程序的调用时间和执行一次循环的时间了。接着看下面:   在主程序MAIN()函数下添加上面两条语句,当前的SEC栏为执行到DELAY(1);语句所花的时间。T(0-)   上面的SEC栏为执行完DELAY(1)所花的时间,这样就可以得到DEALY(1)这条语句的执行时间为595-570=25uS.   上面的SEC栏为执行完DELAY(2)所花的时间,这样就可以得到DEALY(2)这条语句的执行时间为629-595=34uS. 结果:T[DELAY(2)]-T[DELAY(1)]不就是执行一次循环的时间嘛,而T[DELAY(1)]减去执行一次循环的时间就是调用一次要花的时间了。精确到1uS! 以上便是此次小编带来的“单片机编程软件”相关内容,通过本文,希望大家对使用这款单片机编程软件开发单片机时积攒的一些开发心得体悟有所了解,并可应用到大家的实际开发当中去。如果你喜欢本文,不妨持续关注我们网站哦,小编将于后期带来更多精彩内容。最后,十分感谢大家的阅读,have a nice day!

    时间:2019-12-27 关键词: keil 单片机编程软件 心得体悟

  • 单片机编程软件很简单(一),keil单片机编程软件忽略警告+全局替换

    单片机编程软件很简单(一),keil单片机编程软件忽略警告+全局替换

    单片机编程软件很多,但主要以Keil单片机编程软件和IAR单片机编程软件为主。本文对单片机编程软件的讲解基于Keil,主要内容为:keil单片机编程软件忽略特定警告的方法以及如何使用keil单片机编程软件全局替换字符串。如果你对本文即将要讲解的内容存在一定兴趣,不妨继续往下阅读哦。 一、keil中忽略特定警告的方法 Keil C51是美国Keil Software公司出品的51系列兼容单片机C语言软件开发系统,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。Keil提供了包括C编译器、宏汇编、链接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境(μVision)将这些部分组合在一起。 运行Keil软件需要WIN98、NT、WIN2000、WINXP等操作系统。如果你使用C语言编程,那么Keil几乎就是你的不二之选,即使不使用C语言而仅用汇编语言编程,其方便易用的集成环境、强大的软件仿真调试工具也会令你事半功倍。 keil优点 ·Keil C51生成的目标代码效率非常之高,多数语句生成的汇编代码很紧凑,容易理解。在开发大型软件时更能体现高级语言的优势。 ·与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。用过汇编语言后再使用C来开发,体会更加深刻。Keil C51开发系统基本知识 ⒈系统概述 Keil C51软件提供丰富的库函数和功能强大的集成开发调试工具,全Windows界面。另外重要的一点,只要看一下编译后生成的汇编代码,就能体会到Keil的优势。下面详细介绍Keil C51开发系统各部分功能和使用。 ⒉Keil C51单片机软件开发系统的整体结构 C51工具包的整体结构,μVision与Ishell分别是C51 for Windows 和for Dos 的集成开发环境(IDE),可以完成编辑、编译、连接、调试、仿真等整个开发流程。开发人员可用IDE本身或其它编辑器编辑C或汇编源文件。然后分别由C51及C51编译器编译生成目标文件(.obj)。目标文件可由LIB51 创建生成库文件,也可以与库文件一起经L51 连接定位生成绝对目标文件(.abs)。abs文件由OH51 转换成标准的hex 文件,以供调试器dScope51 或tScope51 使用进行源代码级调试,也可由仿真器使用直接对目标板进行调试,也可以直接写入程序存贮器如EPROM中。 使用独立的Keil仿真器时,注意事项 *仿真器标配11.0592MHz的晶振,但用户可以在仿真器上的晶振插孔中换插其他频率的晶振。 *仿真器上的复位按钮只复位仿真芯片,不复位目标系统。 * 仿真芯片的31脚(/EA)已接至高电平,所以仿真时只能使用片内ROM,不能使用片外ROM;但仿真器外引插针中的31脚并不与仿真芯片的31脚相连,故该仿真器仍可插入到扩展有外部ROM(其CPU的/EA引脚接至低电平)的目标系统中使用。 keil中忽略特定警告的方法 因为在STM32F4上使用了jlink自带的RTT功能 而RTT的代码经过编译会产生一个特定的警告 只需在工程中这样设置 添加 --diag_suppress=num 此处num等于警告代码的数字 例如111 二、keil如何全局替换字符串 相信大多数人在使用keil的时候,都会出现同一个问题,那就是keil如何全局替换字符串,目前小编仅使用过keil 3和keil4 ,下面就以keil 3 和keil4 为例,说说它们是如何替换全局字符的。 进入到keil 3和keil4 中,菜单进入 edit-》Replace-》replace all ,如下图即可: 三、keil软件程序字体大小设置 1、打开软件进入主界面,在工具栏中找到“扳手”图标点击确定。如下图所示 2、进入到设置窗口如下图所示 3、把设置窗口切换到“Color&Front”一栏中。如下图所示 4、再“Color&Front”列表中选中“8051:EditCflies”再选中右边的“Text”进入到编辑窗口。如下图所示 5、再Front栏中点击“CourierNew”进入到到字体设置窗口 6、在这我们看到原来的字体大小是12,那么我们设置成14看看效果怎样,点击确定设置完成。如下图 7、回到编辑窗口看小效果如何 8、看到字体明显比以前大很多。就这简单几步完成设置 以上便是小编此次为大家带来的所有内容,希望大家喜欢。

    时间:2019-12-27 关键词: keil 单片机编程软件 忽略警告

  • 如何使用单片机编程软件

    如何使用单片机编程软件

    什么是单片机? 简单地说,单片机就是一个小计算机系统。为了说明清楚这个问题,得要从计算机说起。提到计算机,大家可能马上会想到“显示器、鼠标、键盘”,不过,这不是一个计算机的核心和关键,计算机的核心部分在一边的机箱里呢。打开机箱,可以看到,机箱里有主板、硬盘、光驱等。仔细观察主板,这上面有CPU、内存条、BIOS芯片,通常还有25针的打印机接口等,这些部件都是通过主板上的连线相互连接。 单片机的工作过程就是一个不断“取指令-分析指令-执行指令”的过程。单片机的程序以一条一条指令的形式存放在程序存储器中,单片机开始工作后,就从程序存储器的特定位置开始取指令,然后由单片机内部的控制器对指令进行分析,根据指令要求,进行“取数、送数、算术运算、逻辑运算、跳转”等基本操作中的一种或几种,这些操作都在一个规定的周期中完成,执行完了以后,到下一个存储器单元中取指令,重复刚才的操作(当然,这些要执行的操作具体内容可能跟上一次不一样了),如此不断重复,直到断电为止。 单片机开发中除必要的硬件外,同样离不开软件,我们写的汇编语言源程序要变为CPU可以执行的机器码有两种方法,一种是手工汇编,另一种是机器汇编,目前已极少使用手工汇编的方法了。机器汇编是通过汇编软件将源程序变为机器码,用于MCS-51单片机的汇编软件有早期的A51,随着单片机开发技术的不断发展,从普遍使用汇编语言到逐渐使用高级语言开发,单片机的开发软件也在不断发展。 单片机编程软件简述 单片机编程软件的选择常以使用的单片机为准,目前较为流行的单片机编程软件为keil和IAR,这两款单片机编程软件的应用对象存在一些不同。本文,主要向大家介绍keil和IAR单片机编程软件,并对每个过程进行讲解,同时整理出单片机编程软件的使用方法和软件下载等。 单片机编程软件有很多,这些编程软件有什么区别呢? Keil单片机编程软件 Keil C51是单片机C语言软件开发系统,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。Keil提供了包括C编译器、宏汇编、链接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境(μVision)将这些部分组合在一起。运行Keil软件需要WIN98、NT、WIN2000、WINXP等操作系统。如果你使用C语言编程,那么Keil几乎就是你的不二之选,即使不使用C语言而仅用汇编语言编程,其方便易用的集成环境、强大的软件仿真调试工具也会令你事半功倍。 用keil软件编写单片机程序的步骤: 1、首先是打开keil软件,打开后显示的界面如下 2、如下第一张图所示点击project-》new project,点击后将会出现如下第二张图所示界面;在文件框中填写你的工程名,名字可以是任意英文字符组成的(在此时你最好在你所希望存储该工程的地方新建一文件夹,如第二张图所示就是在桌面上建立了一个测试文件夹来存储新建的工程) 3、输入工程名后会出现如下图所示的芯片选择对话框,选择你开发板上的型号即可(相信要看这张帖子的读者一定是在学51单片机,此时只需选择Atmel-》AT89c52即可。如下第二张图所示 4、一路点击确认后回到如下图所示的主界面,并如下图所示点击新建程序输入文本 5、点击后出现如下第一张图所示界面,并点击保存按钮 6、点击保存按钮后出现下第一张图所示对话框,在箭头所指的地方输入源文件名称加后缀名(如果你是用C语言编写程序后缀名为*.c;如果你是用汇编语言编写程序则后缀名为*.asm)并点击确认保存。确认后界面如下第二张图所示,注意箭头所指地方的变化。 7、接下来的一步是将源文件加入到工程中,点击选中source group并右击将会出现如下图所示界面。 8、再点击Add files to.……;如下第一张图箭头所示处。点击后将会出现第二张图所示的对话框,在该对话框中只要点击选中第五歩保存的源文件并点击Add即可(注意点击选中源文件前后的变化,并且特别注意点击Add后界面没有任何变化,你只要关闭该对话框即可) 9、打开source group后将会出现如下图箭头所指处的变化 10、在右边的源文件输入框中写入程序,并点击如图所示的编译按钮(可以看到该程序没有错误,编译成功) 11、但我们点击进入工程的文件夹没有看到后缀名为.hex文件,如下图所示 12、所以我们需点击target按钮进行设置,如下第一张图所示。点击后出现第二张图所示对话框 13、在对话框中点击output选项如下图1处显示,并勾选create hex file如下图2处显示。勾选后关闭对话框并如第10步再编译一次。可以看到文件夹中生成了.hex文件 IAR单片机编程软件 IAR软件应该是目前支持单片机种类最多的一款软件了,几乎支持所有的主流单片机。但是针对某一款具体的单片机,IAR都有一个单独的安装包,所以,名义上IAR支持的单片机种类最多,但是实际上,它也是一款单片机一个配套软件,只不过对于所有的单片机来说,IAR的“长相”基本类似,所以只要知道了一种单片机在IAR下的使用方法,那么再用IAR开发另一种单片机的时候,按图索骥就能知道大致的使用方法,例如关于芯片选择,堆栈配置、仿真设置这些选项,基本上都是在某个具体选项卡下面,很容易就能上手。 IAR常用快捷键和使用小技巧 1.复制和粘贴几行的部分代码 需求:有时候我们需要复制几行代码的后半部分,不需要复制前半部分。 方法:按住Alt键,再用鼠标拖动就可以复制和粘贴后半部分 2.复制一行 复制一行的时候,我们一般是从最后开始往前面复制,在软件中我们可以从上一行的最后开始复制(如下图所示),这样粘贴的时候只需要从放在最后就可以粘贴到下一行了,可能说的比较绕口,大家试一试就知道方便之处了。(事实上,多行代码也可以这样操作,word中也是一样的!) 3.IAR中右键不能跳转函数的问题 我们应该放在函数前面然后单击右键跳转,而不是选中函数! 4.IAR显示行号 显示行号:在代码段点击右键,找到OpTIons-》Editor,将右面的Show Line Numbers 勾选上就可以了。 5.IAR显示所有的断点 调试代码的时候我们有时候会遇到打了断点但是忘掉的情况(虽然这不是一个好的习惯),因为我们需要找到所有的断点并将其关闭,我们可以在View——》Breakpoints中调用断点窗口。 关闭方式是单击右键,选择delete。 小编比较认可单片机编程软件就是上述两种,若是有更多更好的编程软件,欢迎补充。

    时间:2019-11-30 关键词: iar keil 单片机编程软件

  • 单片机编程软件实践篇,Keil 5单片机编程软件有关MDK的小技巧

    单片机编程软件实践篇,Keil 5单片机编程软件有关MDK的小技巧

    单片机编程软件的重要性不言而喻,而Keil单片机编程软件更是诸多单片机编程软件中的佼佼者之一。本文对Keil单片机编程软件的讲解基于Keil 5版本,主要为大家介绍这款单片机编程软件中有关MDK的一些功能小技巧,以帮助大家提高对Keil的掌握程度。 主要技巧点如下: 1.并不是所有源文件(.c)都需要加进工程中,只需要添加必要的源文件即可。无论是什么开发环境,只要是C/C++的工程,工程编译时间的决定因素就是工程中的源文件,以STM32 HAL库的工程为例,单片机外设的驱动文件一般是【stm32fxxx_hal_xxx.c】的格式,里面有多少个这样的源文件,就代表这个工程启用了多少个STM32单片机的外设。我们可以做个对比: 我们使用STM32CubeMX生成一个工程,工程用到了外部高频、低频晶振、SPI1、USART1,CubeMX自动生成的工程里面,源文件只有必要的十来个: 然后我们把一些不必要用到的源文件也加进去,我这里索性把CubeF1固件库里面的全部外设驱动都加进去了,甚至包括一些完全没有必要加进去的template.c模版: 可以看到,生成的Code大小差得非常远,我这里还是用ARMCCV6版本的编译器,还看不出前后两个工程的编译时间,如果是用ARMCCV5版本的,估计时间要差好几倍。实际上前后两个工程,实现的效果完全是一样的,那些原本没有必要加进去的源文件,除了浪费编译空间和编译时间以外,没有任何用处。 2.头文件(.h)可以随便加进工程中。在MDK的代码开发工程中,头文件是必不可少的。头文件在工程的作用是提供宏定义/常量、结构体声明、枚举量声明统一放置的地方、函数的声明(甚至可以直接把函数的实现写在头文件里面,没有任何问题)。在实际的开发过程中,经常要频繁修改宏定义,而传统MDK开发者的习惯一般是工程只添加源文件而不添加头文件,这样就使得修改宏定义变得非常麻烦了,我们应该摒弃这个习惯,把频繁使用的头文件加进工程中。 3.编译器版本选V6。在MDK 5.24和MDK 5.25中,有个非常重要的更新,那就是MDK开始逐步支持完善ARMCC_V6编译器了。在以前的5.20以下的版本中,时常听说大佬们有用ARMCC_V6编译器的,但大多都是放礼炮,按照例程走也是一大堆报错,真正能实现的没几个,而从5.24版本开始,MDK使用V6编译器一般不会再出现报错了。使用V6编译器的步骤: 1)添加cmsis_armcc_V6.h头文件进我们的工程中,并设置包含路径; 2)工程的Tatget选项卡的编译器版本选V6.9; 3)Misc Controls留空,C语言和C++语言都选gnu11版本,优化等级随意,没有关系; 这样,MDK使用V6编译器编译工程就没有任何问题了。 4.生成bin文件。MDK还有一个重要的功能就是生成bin文件,直接在工程的User选项卡下面的After Build里面添加一行【fromelf.exe --bin -o"$L@L.bin" "#L"】: 工程编译输出如下信息即代表bin文件成功生成: 在工程文件的目录下可看到与工程文件同名的bin文件: 5.注释与缩进快捷键 MDK Keil 5中一个非常实用的新功能:批量注释/取消注释和代码批量缩进/后退。如果需要把一大段代码全部注释掉,只需要点一个按钮便可。 6.一级文件目录 MDK的工程,说到底是由众多的头文件和源文件组成的,这些头文件和源文件被分装在了不同的目录,MDK工程通过链接这些文件夹目录来找到对应的源文件和头文件。可是,在ST官方的例程中,头文件,源文件,库文件,启动文件放在了多层混乱的目录中,虽说官方这样做的目的是为了更好地对驱动文件进行分类和管理,但对于我们开发者来说,要移植他们官方的例程,真的不是一件容易的事,我就放几张截图看看官方的例程是怎么存放工程文件和驱动文件的: 反观原子的例程,除了个别第三方库如DSP和FATFS是二级目录外,只有一级目录,结构清晰: 我们应该提倡在MDK里面只使用一级目录,无论是文件查找还是例程移植,都非常方便: 7.使能MicroLIB 在MDK中有一个跟标准C库非常接近的功能,那就是MicroLIB,在工程配置菜单里面可以找到这个设置: 这个库是缺省标准C库的备选库,选上这个之后,可以用标准C库的一些经过简化的库函数,如fputc memcpy等等,其中最常用的当然是fputc了,这个函数写好之后可以直接用printf函数打印数据,外设可以是串口,也可以是显示屏。 8.手动KeilKill 大家应该都知道MDK有个KeilKill脚本,这个脚本的作用是把编译生成的obj等中间文件删掉,这样工程要进行复制黏贴或是打包的时候就不会太过于占用空间,中间文件生成的大小与工程中的源文件代码量直接相关。实际上KeilKill是可以手动进行的,就是把与工程文件(.uvprojx)同一目录下的其它文件全部删除,效果与KeilKill脚本完全一样。 以上便是小编此次为大家带来的相关内容,希望大家有所收获。

    时间:2019-11-22 关键词: keil mdk 单片机编程软件

首页  上一页  1 2 下一页 尾页
发布文章

技术子站

更多

项目外包