加入VIP
  • 专属下载特权
  • 现金文档折扣购买
  • VIP免费专区
  • 千万文档免费下载

上传资料

关闭

关闭

关闭

封号提示

内容

首页 Keil反汇编HEX文件资料

Keil反汇编HEX文件资料.pdf

Keil反汇编HEX文件资料

bylon
2013-04-17 0人阅读 举报 0 0 暂无简介

简介:本文档为《Keil反汇编HEX文件资料pdf》,可适用于IT/计算机领域

Keil软件实例教程(三)Keil程序调试窗口上一讲中我们学习了几种常用的程序调试方法这一讲中将介绍Keil提供各种窗口如输出窗口、观察窗口、存储器窗口、反汇编窗口、串行窗口等的用途以及这些窗口的使用方法并通过实例介绍这些窗口在调试中的使用。一、程序调试时的常用窗口Keil软件在调试程序时提供了多个窗口主要包括输出窗口(OutputWindows)、观察窗口(WatchCallStatckWindows)、存储器窗口(MemoryWindow)、反汇编窗口(DissamblyWindow)串行窗口(SerialWindow)等。进入调试模式后可以通过菜单View下的相应命令打开或关闭这些窗口。图是输出窗口、观察窗口和存储器窗口各窗口的大小可以使用鼠标调整。进入调试程序后输出窗口自动切换到Command页。该页用于输入调试命令和输出调试信息。对于初学者可以暂不学习调试命令的使用方法。、存储器窗口存储器窗口中可以显示系统中各种内存中的值通过在Address后的编缉框内输入“字母:数字”即可显示相应内存值其中字母可以是C、D、I、X分别代表代码存储空间、直接寻址的片内存储空间、间接寻址的片内存储空间、扩展的外部RAM空间数字代表想要查看的地址。例如输入D:即可观察到地址开始的片内RAM单元值、键入C:即可显示从开始的ROM单元中的值即查看程序的二进制代码。该窗口的显示值可以以各种形式显示如十进制、十六进制、字符型等改变显示方式的方法是点鼠标右键在弹出的快捷菜单中选择该菜单用分隔条分成三部份其中第一部份与第二部份的三个选项为同一级别选中第一部份的任一选项内容将以整数形式显示而选中第二部份的Ascii项则将以字符型式显示选中Float项将相邻四字节组成的浮点数形式显示、选中Double项则将相邻字节组成双精度形式显示。第一部份又有多个选择项其中Decimal项是一个开关如果选中该项则窗口中的值将以十进制的形式显示否则按默认的十六进制方式显示。Unsigned和Signed后分别有三个选项:Char、Int、Long分别代表以单字节方式显示、将相邻双字节组成整型数方式图调试窗口(命令窗口、存储器窗口、观察窗口)图存储器数值各种方式显示选择xiaoQ高亮Keil软件实例教程(三)显示、将相邻四字节组成长整型方式显示而Unsigned和Signed则分别代表无符号形式和有符号形式究竟从哪一个单元开始的相邻单元则与你的设置有关以整型为例如果你输入的是I:那么H和H单元的内容将会组成一个整型数而如果你输入的是I:H和H单元的内容全组成一个整型数以此类推。有关数据格式与C语言规定相同请参考C语言书籍默认以无符号单字节方式显示。第三部份的ModifyMemoryatX:xx用于更改鼠标处的内存单元值选中该项即出现如图所示的对话框可以在对话框内输入要修改的内容。、工程窗口寄存器页图是工程窗口寄存器页的内容寄存器页包括了当前的工作寄存器组和系统寄存器系统寄存器组有一些是实际存在的寄存器如A、B、DPTR、SP、PSW等有一些是实际中并不存在或虽然存在却不能对其操作的如PC、Status等。每当程序中执行到对某寄存器的操作时该寄存器会以反色(蓝底白字)显示用鼠标单击然后按下F键即可修改该值。、观察窗口观察窗口是很重要的一个窗口工程窗口中仅可以观察到工作寄存器和有限的寄存器如A、B、DPTR等如果需要观察其它的寄存器的值或者在高级语言编程时需要直接观察变量就要借助于观察窗口了。其它窗口将在以下的实例中介绍。一般情况下我们仅在单步执行时才对变量的值的变化感兴趣全速运行时变量的值是不变的只有在程序停下来之后才会将这些值最新的变化反映出来但是在一些特殊场合下我们也可能需要在全速运行时观察变量的变化此时可以点击View>PeriodicWindowUpdata(周期更新窗口)确认该项处于被选中状态即可在全速运行时动态地观察有关值的变化。但是选中该项将会使程序模拟执行的速度变慢。二、各种窗口在程序调试中的用途以下通过一个高级语言程序来说明这些窗口的使用。例:#include"regh"sbitP=P^定义PvoidmDelay(unsignedcharDelayTime){unsignedintj=for(DelayTime>DelayTime){for(j=j<j){}}}voidmain(){unsignedintifor(){mDelay()延时毫秒iif(i==){P=!Pi=}}}这个程序的工作过程是:不断调用延时程序每次延时毫秒然后将变量I加随后对变量I进行判断如果I的值等于那么将P取反并将I清最终的执行效果图工程窗口寄存器页图存储器的值的修改xiaoQ高亮Keil软件实例教程(三)是P每S取反一次。输入源程序并以examc为文件名存盘建立名为exam的项目将examc加入项目编译、连接后按CtrlF进入调试按F单步执行。注意观察窗口其中有一个标签页为Locals这一页会自动显示当前模块中的变量名及变量值。可以看到窗口中有名为I的变量其值随着执行的次数而逐渐加大如果在执行到mDelay()行时按F跟踪到mDelay函数内部该窗口的变量自动变为DelayTime和j。另外两个标签页Watch#和Watch#可以加入自定义的观察变量点击“typeFtoedit”然后再按F即可输入变量试着在Watch#中输入I观察它的变化。在程序较复杂变量很多的场合这两个自定义观察窗口可以筛选出我们自己感兴趣的变量加以观察。观察窗口中变量的值不仅可以观察还可以修改以该程序为例I须加次才能到为快速验证是否可以正确执行到P=!P行点击I后面的值再按F该值即可修改将I的值改到再次按F单步执行即可以很快执行到P=!P程序行。该窗口显示的变量值可以以十进制或十六进制形式显示方法是在显示窗口点右键在快捷菜单中选择如图所示。点击View>DissamblyWindow可以打开反汇编窗口该窗口可以显示反汇编后的代码、源程序和相应反汇编代码的混合代码可以在该窗口进行在线汇编、利用该窗口跟踪已找行的代码、在该窗口按汇编代码的方式单步执行这也是一个重要的窗口。打开反汇编窗口点击鼠标右键出现快捷菜单如图所示其中MixedMode是以混合方式显示AssemblyMode是以反汇编码方式显示。程序调试中常使用设置断点然后全速运行的方式在断点处可以获得各变量值但却无法知道程序到达断点以前究竟执行了哪些代码而这往往是需要了解的为此Keil提供了跟踪功能在运行程序之前打开调试工具条上的允许跟踪代码开关然后全速运行程序当程序停止运行后点击查看跟踪代码按钮自动切换到反汇编窗口如图所示其中前面标有“”号的行就是中断以前执行的代码可以按窗口边的上卷按钮向上翻查看代码执行记录。利用工程窗口可以观察程序执行的时间下面我们观察一下该例中延时程序的延时时间是否满足我们的要求即是否确实延时毫秒展开工程窗口Regs页中的Sys目录树其中的Sec项记录了从程序开始执行到当前程序流逝的秒数。点击RST按钮以复位程序Sec的值回零按下F键程序窗口中的黄色箭头指向mDelay()行此时记录下Sec值为然后再按F执行完该段程序再次查看Sec的值为两者相减大约是秒所以延时时间大致是正确的。读者可以试着将延时程序中的unsignedint改为unsignedchar试试看时间是否仍正确。注意使用这一功能的前提是在项目设置中正确设置晶振的数值。Keil提供了串行窗口我们可以直接在串行窗口中键入字符该字符虽不会被显示出来但却能传递到仿真CPU中如果仿真CPU通过串行口发送字符那么这些字符会在串行窗口显示出来用该窗口可以在没有硬件的情况下用键盘模拟串口通讯。下面通过一个例子说明Keil串行窗口的应用。该程序实现一个行编缉功能每键入一个字母会立即回显到窗图设定观察窗的显示方式图反汇编窗口Keil软件实例教程(三)口中。编程的方法是通过检测RI是否等于来判断串行口是否有字符输入如果有字符输入则将其送到SBUF这个字符就会在串行窗口中显示出来。其中serinit是串行口初始化程序要使用串行口必须首先对串行口进行初始化。例:MOVSP,#FH堆栈初始化CALLSERINIT串行口初始化LOOP:JBCRI,NEXT如果串口接收到字符转JMPLOOP否则等待接收字符NEXT:MOVA,SBUF从SBUF中取字符MOVSBUF,A回送到发送SBUF中SEND:JBCTI,LOOP发送完成转LOOPJMPSEND否则等待发送完SERINIT:中断初始化MOVSCON,#HORLTMOD,#HORLPCON,#HMOVTH,#FDH设定波特率SETBTR定时器开始运行SETBREN允许接收SETBSMRETEND输入源程序并建立项目正确编译、连接进入调试后全速运行点击串行窗口按钮即在原源程序窗口位置出现一个空白窗口击键相应的字母就会出现在该窗口中。在窗口中击鼠标右键出现一个弹出式菜单选择“AsciiMode”即以Ascii码的方式显示接收到的数据选择“HexMode”以十六进制码方式显示接收到的数据选择“ClearWindow”可以清除窗口中显示的内容。由于部份CPU具有双串口故Keil提供了两个串行窗口我们选用的C芯片只有一个串行口所以Serial串行窗口不起作用。小技巧:凡是鼠标单击然后按F的地方都可以用鼠标连续单击两次(注意:不是双击)来替代。Keil软件实例教程(四)Keil的辅助工具和部份高级技巧在前面的几讲中我们介绍了工程的建立方法常用的调试方法除此之外Keil还提供了一些辅助工具如外围接口、性能分析、变量来源分析、代码作用分析等帮助我们了解程的性能、查找程序中的隐藏错误快速查看程序变量名信息等这一讲中将对这些功工具作一介绍另外还将介绍Keil的部份高级调试技巧。一、辅助工具这部份功能并不是直接用来进行程序调试的但可以帮助我们进行程序的调试、程序性能的分析同样是一些很有用的工具。、外围接口为了能够比较直观地了解单片机中定时器、中断、并行端口、串行端口等常用外设的使用情况Keil提供了一些外围接口对话框通过Peripherals菜单选择该菜单的下拉菜单内容与你建立项目时所选的CPU有关如果是选择的C这一类“标准”的机那么将会有Interrupt(中断)、IOPorts(并行IO口)、Serial(串行口)、Timer(定时计数器)这四个外围设备菜单。打开这些对话框列出了外围设备的当前使用情况各标志位的情况等可以在这些对话框中直观地观察和更改各外围设备的运行情况。下面我们通过一个简单例子看一看并行端口的外围设备对话框的使用。例:MOVA,#FEHLOOP:MOVP,ARLACALLDELAY延时毫秒JMPLOOP其中延时毫秒的子程序请自行编写。编译、连接进入调试后点击Peripherals>IOPorts>Port打开如图所示全速运行可以看到代表各位的勾在不断变化(如果看不到变化请点击View>PeriodicWindowUpdata)这样可以形象地看出程序执行的结果。注:如果你看到的变化极快甚至看不太清楚那么说明你的计算机性能好模拟执行的速度快你可以试着将加长延时程序的时间以放慢速度。模拟运行速度与实际运行的速度无法相同是软件模拟的一个固有弱点。点击Peripherals>IOPorts>Timer即出现图所示定时计数器的外围接口界面可以直接选择Mode组中的下拉列表以确定定时计数工作方式四种工作方式图外围设备之并行端口图外围设备之定时器xiaoQ高亮Keil软件实例教程(四)设定定时初值等点击选中TRstatus后的stop就变成了run如果全速运行程序此时th,tl后的值也快速地开始变化(同样要求PeriodicWindowUpdata处于选中状态)直观地演示了定时计数器的工作情况(当然由于你的程序未对此写任何代码所以程序不会对此定时计数器的工作进行处理)。、性能分析Keil提供了一个性能分析工具利用该工具我们可以了解程序中哪些部份的执行时间最长调用次数最多从而了解影响整个程序中执行速度的瓶颈。下面通过一个实例来看一看这个工具如何使用例:#include"regh"sbitP=P^定义PvoidmDelay(unsignedcharDelayTime){unsignedintj=for(DelayTime>DelayTime){for(j=j<j){}}}voidmDelay(unsignedcharDelayTime){unsignedintj=for(DelayTime>DelayTime){for(j=j<j){}}}voidmain(){unsignedintifor(){mDelay()延时毫秒iif(i==){P=!Pi=mDelay()}}}编译连接。进入调试状态后使用菜单View>PerformanceAnalyzerWindow打开性能分析对话框进入该对话框后只有一项unspecified点鼠标右键在快捷菜单中选择SetupPA即打开性能分析设置对话框对于C语言程序该对话框右侧的“FunctionSymbol”下的列表框给出函数符号双击某一符号该符号即出现在DefinePerformanceAnalyzer下的编缉框中每输入一个符号名字点击Define按钮即将该函数加入其上的分析列表框。对于汇编语言源程序FunctionSymbol下的列表框中不会出现子程序名可以直接在编缉框中输入子程序名点击Close关闭窗口回到性能分析窗口此时窗口共有个选项。全速执行程序可以看到mDelay和mDelay后出现一个蓝色指示条配合上面的标尺可以直观地看出每个函数占整个执行时间的比例点击相应的函数名可以在该窗口的状态栏看到更详细的数据其中各项的含义如下:Min:该段程序执行所需的最短时间Max:该段程序执行所需的最长时间Avg:该段程序执行所花平均时间Total:该段程序到目前为目总共执行的时间:占整个执行时间的百分比count:被调用的次数。本程序中函数mDelay和mDelay每次被调用都花费同样的时间看不出Min、Max、和Avg的意义实际上由于条件的变化某些函数执行的时间不一定是一个固定的值借助于这些信息可以对程序有更详细的了解。下面将mDelay函数略作修改作一演示。voidmDelay(unsignedcharDelayTime){staticunsignedcharkunsignedintj=for(DelayTime>DelayTime){for(j<kj){}}k}程序中定义了一个静态变量K每次调用该变量加而j的循环条件与k的大小有关Keil软件实例教程(四)这使每次执行该程序所花的时间不一样。编译、执行该程序再次观察性能分析窗口可以看出Min、Max、Avg的意义。、变量来源浏览该窗口用于观察程序中变量名的有关信息如该变量名在那一个函数中被定义、在哪里被调用共出现多少次等。在SourceBrowse窗口中提供了完善的管理方法如过滤器可以分门别类地列出各种类别的变量名可以对这些变量按Class(组)、Type(类型)、Space(所在空间)、Use(调用次数)排序点击变量名可以在窗口的右侧看到该变量名的更详细的信息。、代码作用范围分析在你写的程序中有些代码可能永远不会被执行到(这是无效的代码)也有一些代码必须在满足一定条件后才能被执行到借助于代码范围分析工具可以快速地了解代码的执行情况。进入调试后全速运行然后按停止按钮停下来后可以看到在源程序的左列有三种颜色灰、淡灰和绿其中淡灰所指的行并不是可执行代码如变量或函数定义、注释行等等而灰色行是可执行但从未执行过的代码而绿色则是已执行过的程序行。使用调试工具条上的CodeCoverageWindow可打开代码作用范围分析的对话框里面有各个模块代码执行情况的更详细的分析。如果你发现全速运行后有一些未被执行到的代码那么就要仔细分析这些代码究竟是无效的代码还是因为条件没有满足而没有被执行到。二、部份高级调试技巧Keil内置了一套调试语言很多高级调试技巧与此有关但是全面学习这套语言并不现实这不是这么几期连载可以胜任的这里仅介绍部份较为实用的功能如要获得更详细的信息请参考Keil自带的帮助文件GSPDF。、串行窗口与实际硬件相连Keil的串行窗口除可以模拟串行口的输入和输出功能外还可以与PC机上实际的串口相连接受串口输入的内容并将输出送到串口。这需要在Keil中进行设置。方法是首先在输出窗口的Command页用MODE命令设置串口的工作方式然后用ASSIGN命令将串行窗口与实际的串口相关联下面我们通过一个实例来说明如何操作。例:ORGHJMPSTARTORG*串行中断入口JMPSERINTSTART:MOVSP,#FH堆栈初始化CALLSERINIT串行口初始化ASETBEASETBESJMP$主程序到此结束SERINT:JBCRI,NEXT如果串口接收到字符转JMPSEND否则转发送处理NEXT:MOVA,SBUF从SBUF中取字符xiaoQ高亮Keil软件实例教程(四)MOVSBUF,A回送到发送SBUF中JMPOVERSEND:clrtiOVER:retiSERINIT:中断初始化MOVSCON,#HORLTMOD,#HORLPCON,#HMOVTH,#FDH设定波特率SETBTR定时器开始运行SETBREN允许接收SETBSMRETEND这个程序使用了中断方式编写串行口输入输出程序它的功能是将接串行口收到的字符回送即再通过串行口发送出去。正确输入源文件、建立工程、编译连接没有错后可进行调试使用Keil自带的串行窗口测试功能是否正确如果正确可以进行下一步的连机试验。为简单实用我们不借助于其它的硬件而是让PC机上的两个串口互换数据即COM发送COM接收而COM发送则由COM接收为此需要做一根连接线将这两个串口连起来做法很简单找两个可以插入PC机串口的DIN插座(母)然后用一根芯线将它们连起来连线的方法是:接好线把两个插头分别插入PC机上的串口与串口。找一个PC机上的串口终端调试软件如串口精灵之类运行该软件设置好串口参数其中串口选择串口参数设置为:n其含义是波特率为无奇偶校验位数据位停止位。在Keil调试窗口的command页中输入:>modecom,,,>assigncom<sin>sout注意两行最前面的“>”是提示符不要输入第二行中的“<”和“>”即“小于”和“大于”符号中间的是字母“s”和“input”的前两个字母最后是字母“s”和“output”的前三个字母。第一行命令定义串口的波特率为无奇偶校验位数据位停止位。第二行是将串口(com)分配给串行窗口。全速运行程序然后切换串口精灵开始发送会看到发送后的数据会立即回显到窗口中说明已接收到了发送过来的数据。切换到uVison查看串行窗口会看到这里的确接收到了串口精灵送来的内容。、从端口送入信号程序调试中如果需要有信号输入比如数据采集类程序需要从外界获得数据由于Keil的调试完全是一个软件调试工具没有硬件与之相连所以不可能直接获得数据为此必须采用一些替代的方法例如某电路用P口作为数据采集口那么可以使用的一种方法是利用外围接口打开PORT用鼠标在点击相应端口位使其变为高电平或低电平就能输入数据。显然这种方法对于要输获得数据而不是作位处理来说太麻烦了另一种方法是直接在command页输入port=数值以下是一个小小的验证程序。例:LOOP:MOVA,PKeil软件实例教程(四)JZNEXTMOVR,#HJMPLOOPNEXT:MOVR,#AAHJMPLOOPEND该程序从P口获得数据如果P口的值是那么就让R的值为AAH否则让R的值为H。输入源程序并建立工程进入调试后在观察窗口加入R然后全速运行程序注意确保View>PeriodicWindowUpdata处于选中状态然后在Command后输入PORT=回车后可以发现观察窗口中的R的值变成了AAH然后再输入PORT=或其它非零值则R的值会变为H。同样的道理可以用port、port、port分别向端口、、输入信号。、直接更改内存值在程序运行中另一种输入数据的方法是直接更改相应的内存单元的值例如某数据采集程序使用H和H作为存储单元采入的数据由这两个单元保存那么我们更改了H和H单元的值就相当于这个数据采集程序采集到了数据这可以在内存窗口中直接修改(参考上一讲)也可以通过命令进行修改命令的形式是:WBYTE(地址,数据)其中地址是指待写入内存单元的地址而数据则是待写入该地址的数据。例如WBYTE(x,)会将值写入内存地址十六进制H单元中。Keil软件实全教程(五)其于Keil的实验仿真板的使用前面介绍了Keil软件的使用从中我们可以看到Keil的强大功能不过对于初学者来说还有些不直观调试过程中看到的是一些数值并没有看到这些数值所引起的外围电路的变化例如数码管点亮、发光管发光等。为了让初学者更好地入门笔者利用Keil提供的AGSI接口开发了两块仿真实验板。这两块仿真板将枯燥无味的数字用形象的图形表达出来可以使初学者在没有硬件时就能感受到真实的学习环境降低单片机的入门门槛。图是键盘、LED显示实验仿真板的图从图中可以看出该板比较简单有在P口接有个发光二极管在P口接有个按钮图的右边给出了原理图。图是另一个较为复杂的实验仿真板。在该板上有个数码管个按键(接成*的矩阵式)另外还有P口接的个发光管两个外部中断按钮一个带有计数器的脉冲发生器等资源显然这块板可以完成更多的实验。一、实验仿真板的安装这两块仿真实验板实际上是两个dll文件名称分别是ledkeydll和simboarddll安装时只要根据需要将这两个或某一个文件拷贝到keil软件的cbin文件夹中即可。二、实验仿真板的使用要使用仿真板必须对工程进行设置设置的方法是点击Project>OptionforTarget‘Target’打开对话框然后选中Debug标签页在Dialog:Parameter:后的编缉框中输入d文件名。例如要用ledkeydll(即第一块仿真板)进行调试就输入dledkey如图所示输入完毕后点击确定退出。编译、连接完成后按CTRLF进入调试此时点击菜单Peripherals即会多出一项“键盘LED仿真板(K)”选中该项即会出现如图的界面键盘、LED显示实验仿真板图单片机实验仿真板xiaoQ高亮xiaoQ高亮Keil软件实全教程(五)同样在设置时如果输入dsimboard则能够调出如图的界面。第一块仿真板的硬件电路很简单电路图已在板上第二块板实现的功能稍复杂其键盘和数码显示管部份的电路原理图如图所示。下表给出了常用字形码读者也可以根据图中的接线自行写出其它如A、B、C、D、E、F等的字形码。除了键盘和数码管以外P口同样也接有个发光二极管连接方式与图相同脉冲发生器是接入T即P引脚。chfhahbhhhhfhhhFFH消隐三、实例调试以下以一个稍复杂的程序为例说明键盘、LED显示实验仿真板的使用。该程序实现的是可控流水灯接P的键为开始键按此键则灯开始流动(由上而下)接P的键为停止键按此键则停止流动所有灯暗接P的键为向上键按此键则灯由上向下流动接P的键为向下键按此键则灯由下向上流动。例:UpDownBITH上下行标志StartEndBITH起动及停止标志LAMPCODEEQUH存放流动的数据代码ORGHAJMPMAINORGHMAIN:MOVSP,#FHMOVP,#FFHCLRUpDown启动时处于向上的状态hgfePPPPPPabcdPPPPPPPPPPPPPP驱动PPPPPPPPBAFECDVCCC图实验仿真板数码管和键盘部份的电路图图实验仿真板的设置xiaoQ高亮Keil软件实全教程(五)CLRStartEnd启动时处于停止状态MOVLAMPCODE,#H单灯流动的代码LOOP:ACALLKEY调用键盘程序JNBF,LNEXT如果无键按下,则继续ACALLKEYPROC否则调用键盘处理程序LNEXT:ACALLLAMP调用灯显示程序AJMPLOOP反复循环,主程序到此结束延时程序,键盘处理中调用DELAY:MOVR,#D:MOVR,#DJNZR,$DJNZR,DRETKEYPROC:MOVA,B从B寄存器中获取键值JBACC,KeyStart分析键的代码,某位被按下,则该位为JBACC,KeyOverJBACC,KeyUpJBACC,KeyDownAJMPKEYRETKeyStart:SETBStartEnd第一个键按下后的处理AJMPKEYRETKeyOver:CLRStartEnd第二个键按下后的处理AJMPKEYRETKeyUp:SETBUpDown第三个键按下后的处理AJMPKEYRETKeyDown:CLRUpDown第四个键按下后的处理KEYRET:RETKEY:CLRF清F,表示无键按下。ORLP,#B将P口的接有键的四位置MOVA,P取P的值ORLA,#B将其余位置CPLA取反JZKRET如果为则一定无键按下CALLDELAY否则延时去键抖ORLP,#BMOVA,PORLA,#BKeil软件实全教程(五)CPLAJZKRETMOVB,A确实有键按下,将键值存入B中SETBF设置有键按下的标志以下的代码是可以被注释掉的如果去掉注释就具有判断键是否释放的功能否则没有KRET:ORLP,#B此处循环等待键的释放MOVA,PORLA,#BCPLAJZKRET读取的数据取反后为说明键释放了AJMPKRETKRET:CALLDELAY消除后沿抖动RETDMS:流水灯的延迟时间MOVR,#D:MOVR,#DJNZR,$DJNZR,DRETLAMP:JBStartEnd,LampStart如果StartEnd=,则启动MOVP,#FFHAJMPLAMPRET否则关闭所有显示,返回LampStart:JBUpDown,LAMPUP如果UpDown=,则向上流动MOVA,LAMPCODERLA实际就是左移位而已MOVLAMPCODE,AMOVP,ALCALLDMSLCALLDMSAJMPLAMPRETLAMPUP:MOVA,LAMPCODERRA向下流动实际就是右移MOVLAMPCODE,AMOVP,ALCALLDMSLAMPRET:RETEND将程序输入并建立工程文件设置工程文件在Debug标签页中加入“dledkey”汇编、连接文件按CtrlF开始调试打开仿真板使用F功能键全速运行可以看到所Keil软件实全教程(五)有灯均不亮点击最上面的按钮立即会看到灯流动起来了点击第二个按键灯将停止流动再次点击第一个按钮使灯流动起来点击第三个按钮可以发现灯流动的方向变了点击第四个按钮灯的流动方向又变回来了。如果没有出现所描述的现象可以使用单步、过程单步等调试手段进行调试在进行调试时实验仿真板会随时显示出当前的情况是不是非常的直观和方便呢?下面的一个例子是关于第二块实验仿真板的演示点亮位数码管。例:ORGhJMPMAINORGHMAIN:MOVSP,#FHMOVR,#HMOVR,#H显示缓冲区首地址MOVA,#INIT:MOVR,A初始化显示缓冲区INCAINCRDJNZR,INIT将送显示缓冲区LOOP:CALLDISPLAYJMPLOOP主程序到此结束DISPLAY:MOVR,#FH列选择MOVR,#H共有个字符MOVR,#H显示缓冲区首地址AGAIN:MOVA,RMOVDPTR,#DISPTABLEMOVCA,ADPTRMOVP,AMOVP,RMOVA,RRRAMOVR,AINCRDJNZR,AGAINRETDISPTABLE:DBch,fh,ah,bh,h,h,h,fh,h,h,FFH字形码表END这一程序内部RAM中H到FH被当成是显示缓冲区主程序中用填充该显示区然后调用显示程序显示。这里是用了最简单的逐位显示的方式编写的显示程序。最后介绍一个小小技巧将鼠标移入按钮区域按下左键按钮显示被按下不要放开Keil软件实全教程(五)鼠标左键将光标移出按钮区域松开左键可以看到按钮仍处于按下状态利用这一功能在需要IO口长期处于低电平时你就不必一直用手按着鼠标的左键啦。Keil实例教程(一)Keil工程文件的建立、设置与目标文件的获得单片机开发中除必要的硬件外同样离不开软件我们写的汇编语言源程序要变为CPU可以执行的机器码有两种方法一种是手工汇编另一种是机器汇编目前已极少使用手工汇编的方法了。机器汇编是通过汇编软件将源程序变为机器码用于MCS单片机的汇编软件有早期的A随着单片机开发技术的不断发展从普遍使用汇编语言到逐渐使用高级语言开发单片机的开发软件也在不断发展Keil软件是目前最流行开发MCS系列单片机的软件这从近年来各仿真机厂商纷纷宣布全面支持Keil即可看出。Keil提供了包括C编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案通过一个集成开发环境(uVision)将这些部份组合在一起。运行Keil软件需要Pentium或以上的CPUMB或更多RAM、M以上空闲的硬盘空间、WIN、NT、WIN、WINXP等操作系统。掌握这一软件的使用对于使用系列单片机的爱好者来说是十分必要的如果你使用C语言编程那么Keil几乎就是你的不二之选(目前在国内你只能买到该软件、而你买的仿真机也很可能只支持该软件)即使不使用C语言而仅用汇编语言编程其方便易用的集成环境、强大的软件仿真调试工具也会令你事半功倍。我们将通过一些实例来学习Keil软件的使用在这一部份我们将学习如何输入源程序建立工程、对工程进行详细的设置以及如何将源程序变为目标代码。图所示电路图使用C单片机作为主芯片这种单片机性属于MCS系列其内部有K的FLASHROM,可以反复擦写非常适于做实验。C的P引脚上接个发光二极管P~P引脚上接个按钮开关我们的第一个任务是让接在P引脚上的发光二极管依次循环点亮。一、Keil工程的建立首先启动Keil软件的集成开发环境这里假设读者已正确安装了该软件可以从桌面上直接双击uVision的图标以启动该软件。UVison启动后程序窗口的左边有一个工程管理窗口该窗口有个标签分别是Files、Regs、和Books这三个标签页分别显示当前项目的文件结构、CPU的寄存器及部份特殊功能寄存器的值(调试时才出现)和所选CPU的附加说明文件如果是第一次启动Keil那么这三个标签页全是空的。、源文件的建立使用菜单“File>New”或者点击工具栏的新建文件按钮即可在项目窗口的右侧打开一个新的文本编缉窗口在该窗口中输入以下汇编语言源程序例:MOVA#FEHMAIN:MOVPARLALCALLDELAYAJMPMAINDELAY:MOVR,#D:MOVR,#DJNZR,$图简单的键盘、显示板Keil实例教程(一)DJNZR,DRETEND保存该文件注意必须加上扩展名(汇编语言源程序一般用asm或a为扩展名)这里假定将文件保存为examasm。需要说明的是源文件就是一般的文本文件不一定使用Keil软件编写可以使用任意文本编缉器编写而且Keil的编缉器对汉字的支持不好建议使用UltraEdit之类的编缉软件进行源程序的输入。、建立工程文件在项目开发中并不是仅有一个源程序就行了还要为这个项目选择CPU(Keil支持数百种CPU而这些CPU的特性并不完全相同)确定编译、汇编、连接的参数指定调试的方式有一些项目还会有多个文件组成等为管理和使用方便Keil使用工程(Project)这一概念将这些参数设置和所需的所有文件都加在一个工程中只能对工程而不能对单一的源程序进行编译(汇编)和连接等操作下面我们就一步一步地来建立工程。点击“Project>NewProject…”菜单出现一个对话框要求给将要建立的工程起一个名字你可以在编缉框中输入一个名字(设为exam)不需要扩展名。点击“保存”按钮出现第二个对话框如图所示这个对话框要求选择目标CPU(即你所用芯片的型号)Keil支持的CPU很多我们选择Atmel公司的C芯片。点击ATMEL前面的“”号展开该层点击其中的C然后再点击“确定”按钮回到主界面此时在工程窗口的文件页中出现了“Target”前面有“”号点击“”号展开可以看到下一层的“SourceGroup”这时的工程还是一个空的工程里面什么文件也没有需要手动把刚才编写好的源程序加入点击“SourceGroup”使其反白显示然后点击鼠标右键出现一个下拉菜单如图所示。选中其中的“AddfiletoGroup”SourceGroup”出现一个对话框要求寻找源文件注意该对话框下面的“文件类型”默认为Csourcefile(*c)也就是以C为扩展名的文件而我们的文件是以asm为扩展名的所以在列表框中找不到examasm要将文件类型改掉点击对话框中“文件类型”后的下拉列表找到并选中“AsmSourceFile(*a,*asm)这样在列表框中就可以找到examasm文件了。双击examasm文件将文件加入项目注图选择目标CPU图加入文件Keil实例教程(一)意在文件加入项目后该对话框并不消失等待继续加入其它文件但初学时常会误认为操作没有成功而再次双击同一文件这时会出现如图所示的对话框提示你所选文件已在列表中此时应点击“确定”返回前一对话框然后点击“Close”即可返回主界面返回后点击“SourceGroup”前的加号会发现examasm文件已在其中。双击文件名即打开该源程序。二、工程的详细设置工程建立好以后还要对工程进行进一步的设置以满足要求。首先点击左边Project窗口的Target然后使用菜单“Project>Optionfortarget‘target’”即出现对工程设置的对话框这个对话框可谓非常复杂共有个页面要全部搞清可不容易好在绝大部份设置项取默认值就行了。设置对话框中的Target页面如图所示Xtal后面的数值是晶振频率值默认值是所选目标CPU的最高可用频率值对于我们所选的ATC而言是M该数值与最终产生的目标代码无关仅用于软件模拟调试时显示程序执行时间。正确设置该数值可使显示时间与实际所用时间一致一般将其设置成与你的硬件所用晶振频率相同如果没必要了解程序执行的时间也可以不设这里设置为。MemoryModel用于设置RAM使用情况有三个选择项Small是所有变量都在单片机的内部RAM中Compact是可以使用一页外部扩展RAM而Larget则是可以使用全部外部的扩展RAM。CodeModel用于设置ROM空间的使用同样也有三个选择项即Small模式只用低于K的程序空间Compact模式单个函数的代码量不能超过K整个程序可以使用K程序空间Larget模式可用全部K空间。UseonchipROM选择项确认是否仅使用片内ROM(注意:选中该项并不会影响最终生成的目标代码量)Operating项是操作系统选择Keil提供了两种操作系统:Rtxtiny和Rtxfull关于操作系统是另外一个很大的话题了通常我们不使用任何操作系统即使用该项的默认值:None(不使用任何操作系统)OffChipCodememory用以确定系统扩展ROM的地址范围OffChipxDatamemory组用于确定系统扩展RAM的地址范围这些选择项必须根据所用硬件来决定由于该例是单片应用未进行任何扩展所以均不重新选择按默认值设置。设置对话框中的OutPut页面如图所示这里面也有多个选择项其中CreatHexfile用于生成可执行代码文件(可以用编程器写入单片机芯片的HEX格式文件文件的扩展名为HEX)默认情况下该项未被选中如果要写片做硬件实验就必须选中该项这一点是初学者易疏忽的在此特别提醒注意。选中Debuginformation将会产生调试信息这些信息用于调试如果需要对程序进行调试应当选中该项。Browseinformation是产生浏览信息该信息可以用菜单view>Browse来查看这里取默认值。按钮“SelectFolderforobjects”图重复加入文件的错误图对目标进行设置Keil实例教程(一)是用来选择最终的目标文件所在的文件夹默认是与工程文件在同一个文件夹中。NameofExecutable用于指定最终生成的目标文件的名字默认与工程的名字相同这两项一般不需要更改。工程设置对话框中的其它各页面与C编译选项、A的汇编选项、BL连接器的连接选项等用法有关这里均取默认值不作任何修改。以下仅对一些有关页面中常用的选项作一个简单介绍。Listing标签页用于调整生成的列表文件选项。在汇编或编译完成后将产生(*lst)的列表文件在连接完成后也将产生(*m)的列表文件该页用于对列表文件的内容和形式进行细致的调节其中比较常用的选项是“CCompileListing”下的“AssambleCode”项选中该项可以在列表文件中生成C语言源程序所对应的汇编代码。C标签页用于对Keil的C编译器的编译过程进行控制其中比较常用的是“CodeOptimization”组如图所示该组中Level是优化等级C在对源程序进行编译时可以对代码多至级优化默认使用第级一般不必修改如果在编译中出现一些

用户评价(0)

关闭

新课改视野下建构高中语文教学实验成果报告(32KB)

抱歉,积分不足下载失败,请稍后再试!

提示

试读已结束,如需要继续阅读或者下载,敬请购买!

文档小程序码

使用微信“扫一扫”扫码寻找文档

1

打开微信

2

扫描小程序码

3

发布寻找信息

4

等待寻找结果

我知道了
评分:

/13

Keil反汇编HEX文件资料

仅供在线阅读

VIP

在线
客服

免费
邮箱

爱问共享资料服务号

扫描关注领取更多福利