wps安卓版怎么把一张wps幻灯片复制粘贴到另外一个ppt里面去,尝试了很久都弄不成。请实际操作过的告诉我。

keil中关于使用_at_绝对地址定位问题
10:27:54来源: eefocus
在网上看到有人提到在中使用_at_进行,我简单介绍一下它的用法。&
使用_at_关键字对存储器进行绝对地址定位程序如下
#i nclude
char xdata _Data[50] _at_ 0x8000;
& &LED_Data[0] = 0x23;
在keil中运行以上程序可以在存储器窗口中输入 x:0x8000 可以看到0x8000地址中的值为0x23.
值得指出的几点是
1.在给变量LED_Data[50]定位绝对地址空间时,不能对其赋初值。
2.char xdata LED_Data[50] _at_ 0x8000;这条语句不能主函数中。有些网友提到在按着keil说明中用_at_进行绝对地址定位时,编译会出现错误274,就是将这条语句放在主函数 中的原因。
3.keil中地址是自动分配的,所以除非特殊情况否则不提倡使用绝对地址定位。初学者因帖别注意。不要把c当作汇编使用。
关键字:&&&&
编辑:什么鱼
引用地址:
本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。
微信扫一扫加关注 论坛活动 E手掌握
微信扫一扫加关注
芯片资讯 锐利解读
大学堂最新课程
汇总了TI汽车信息娱乐系统方案、优质音频解决方案、汽车娱乐系统和仪表盘参考设计相关的文档、视频等资源
热门资源推荐
频道白皮书
何立民专栏
北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。keil的51单片机仿真调试中如何查看内存的内容
在Memory窗口中输入地址值,得到的结果是程序代码区的内容。由于51采用的是哈佛结构,程序指令存储和数据存储分开。要查看各种内存区域的内容,只要在Address框内输入&字母:地址&即可显示相应的内存值。其中字母可以是C、D、I、X,分别代表的意义是:
  C:代码存储空间
  D:直接寻址片内存储空间
  I :间接寻址片内存储空间
  X:扩展的外部RAM空间
如输入&d:0x30&就可显示直接寻址片内30H存储空间的内容了。
还可以使用右键&Modify Memory&选项修改指定内存的内容。
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!&&|&&
LOFTER精选
网易考拉推荐
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
阅读(550)|
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
历史上的今天
loftPermalink:'',
id:'fks_083074',
blogTitle:'[转载] ANSIC程序到KeilC51的移植心得',
blogAbstract:'李章林 &&&张立民
(& 南开大学信息技术科学学院, 天津& 300071& )
摘要:文章讲述了将ANSIC程序移植到KeilC51上应该注意的事项。文章在总结作者使用KeilC51编写程序和移植程序的基础上,讲述了存储类型、指针类型、重入函数、根据目标系统RAM的分布的段定位和仿真栈设置、函数指针、NULL指针问题、字节顺序、交叉汇编等移植时需要注意的事项。对存储类型、指针类型、重入函数对程序的效率的影响进行了分析,从而对如何进行高效的移植给出了指导。最后文章以将ucosii移植到KeilC51的小模式下为实例,讲述了移植的一般步骤,希望给读者正确而高效的移植ANSIC程序到KeilC51提供参考。',
blogTag:'函数,keilc,指针,移植,pdata',
blogUrl:'blog/static/',
isPublished:1,
istop:false,
modifyTime:3,
publishTime:5,
permalink:'blog/static/',
commentCount:0,
mainCommentCount:0,
recommendCount:0,
bsrk:-100,
publisherId:0,
recomBlogHome:false,
currentRecomBlog:false,
attachmentsFileIds:[],
groupInfo:{},
friendstatus:'none',
followstatus:'unFollow',
pubSucc:'',
visitorProvince:'',
visitorCity:'',
visitorNewUser:false,
postAddInfo:{},
mset:'000',
remindgoodnightblog:false,
isBlackVisitor:false,
isShowYodaoAd:false,
hostIntro:'[^_^]',
hmcon:'1',
selfRecomBlogCount:'0',
lofter_single:''
{list a as x}
{if x.moveFrom=='wap'}
{elseif x.moveFrom=='iphone'}
{elseif x.moveFrom=='android'}
{elseif x.moveFrom=='mobile'}
${a.selfIntro|escape}{if great260}${suplement}{/if}
{list a as x}
推荐过这篇日志的人:
{list a as x}
{if !!b&&b.length>0}
他们还推荐了:
{list b as y}
转载记录:
{list d as x}
{list a as x}
{list a as x}
{list a as x}
{list a as x}
{if x_index>4}{break}{/if}
${fn2(x.publishTime,'yyyy-MM-dd HH:mm:ss')}
{list a as x}
{if !!(blogDetail.preBlogPermalink)}
{if !!(blogDetail.nextBlogPermalink)}
{list a as x}
{if defined('newslist')&&newslist.length>0}
{list newslist as x}
{if x_index>7}{break}{/if}
{list a as x}
{var first_option =}
{list x.voteDetailList as voteToOption}
{if voteToOption==1}
{if first_option==false},{/if}&&“${b[voteToOption_index]}”&&
{if (x.role!="-1") },“我是${c[x.role]}”&&{/if}
&&&&&&&&${fn1(x.voteTime)}
{if x.userName==''}{/if}
网易公司版权所有&&
{list x.l as y}
{if defined('wl')}
{list wl as x}{/list}keil4_Keil软件实例教程_pdf_大学课件预览_高等教育资讯网
Keil软件实例教程:keil4
分类: 格式: 日期:日
Keil 软件实例教程(四)Keil的辅助工具和部份高级技巧在前面的几讲中我们介绍了工程的建立方法,常用的调试方法,除此之外,Keil还提供了一些辅助工具如外围接口、性能分析、变量来源分析、代码作用分析等,帮助我们了解程的性能、查找程序中的隐藏错误,快速查看程序变量名信息等,这一讲中将对这些功工具作一介绍,另外还将介绍Keil的部份高级调试技巧。一,辅助工具这部份功能并不是直接用来进行程序调试的,但可以帮助我们进行程序的调试、程序性能的分析,同样是一些很有用的工具。1、外围接口为了能够比较直观地了解单片机中定时器、中断、并行端口、串行端口等常用外设的使用情况,Keil提供了一些外围接口对话框,通过Peripherals菜单选择,该菜单的下拉菜单内容与你建立项目时所选的CPU有关,如果是选择的89C51这一类“标准”的51机,那么将会有Interrupt(中断)、I/O Ports(并行I/O口)、Serial(串行口)、Timer(定时/计数器)这四个外围设备菜单。打开这些对话框,列出了外围设备的当前使用情况,各标志位的情况等,可以在这些对话框中直观地观察和更改各外围设备的运行情况。下面我们通过一个简单例子看一看并行端口的外围设备对话框的使用。例4,MOV A,#0FEHLOOP,MOV P1,ARL ACALL DELAY ;延时100毫秒JMP LOP其中延时100毫秒的子程序请自行编写。编译、连接进入调试后,点击Peripherals-&I/O-Ports-&Port 1打开,如图1所示,全速运行,可以看到代表各位的勾在不断变化(如果看不到变化,请点击View-&Periodic Window Updata),这样可以形象地看出程序执行的结果。注:如果你看到的变化极快,甚至看不太清楚,那么说明你的计算机性能好,模拟执行的速度快,你可以试着将加长延时程序的时间以放慢速度。模拟运行速度与实际运行的速度无法相同是软件模拟的一个固有弱点。点击Peripherals-&I/O-Ports-&Timer0即出现图2所示定时/计数器0的外围接口界面,可以直接选择Mode组中的下拉列表以确定定时/计数工作方式,0-3四种工作方式,图1 外围设备之并行端口图2 外围设备之定时器Keil 软件实例教程(四)设定定时初值等,点击选中TR0,status后的stop就变成了run,如果全速运行程序,此时th0,tl0后的值也快速地开始变化(同样要求Periodic Window Updata处于选中状态),直观地演示了定时/计数器的工作情况(当然,由于你的程序未对此写任何代码,所以程序不会对此定时/计数器的工作进行处理)。2、性能分析Keil提供了一个性能分析工具,利用该工具,我们可以了解程序中哪些部份的执行时间最长,调用次数最多,从而了解影响整个程序中执行速度的瓶颈。下面通过一个实例来看一看这个工具如何使用,例5,#include &reg51.h&sbit P1_0=P1^0; //定义P1.0void mDelay(unsigned char DelayTime){ unsigned int j=0;for(;DelayTime&0;DelayTime--){ for(j=0;j&125;j++) {;} }}void mDelay1(unsigned char DelayTime){ unsigned int j=0;for(;DelayTime&0;DelayTime--){ for(j=0;j&125;j++) {;} }}void main(){for(;;){ mDelay(10); //延时10毫秒i++;if(i==10){ P1_0=!P1_0;i=0;mDelay1(10);}} }编译连接。进入调试状态后使用菜单View-&Performance 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){ stunsigned int j=0;for(;DelayTime&0;DelayTime--){ for(;j&k;j++){;}} k++; }程序中定义了一个静态变量K,每次调用该变量加1,而j的循环条件与k的大小有关,Keil 软件实例教程(四)这使每次执行该程序所花的时间不一样。编译、执行该程序,再次观察性能分析窗口,可以看出Min、Max、Avg的意义。3、变量来源浏览该窗口用于观察程序中变量名的有关信息,如该变量名在那一个函数中被定义、在哪里被调用,共出现多少次等。在Source Browse窗口中提供了完善的管理方法,如过滤器可以分门别类地列出各种类别的变量名,可以对这些变量按Class(组)、Type(类型)、Space(所在空间)、Use(调用次数)排序,点击变量名,可以在窗口的右侧看到该变量名的更详细的信息。4、代码作用范围分析在你写的程序中,有些代码可能永远不会被执行到(这是无效的代码),也有一些代码必须在满足一定条件后才能被执行到,借助于代码范围分析工具,可以快速地了解代码的执行情况。进入调试后,全速运行,然后按停止按钮,停下来后,可以看到在源程序的左列有三种颜色,灰、淡灰和绿,其中淡灰所指的行并不是可执行代码,如变量或函数定义、注释行等等,而灰色行是可执行但从未执行过的代码,而绿色则是已执行过的程序行。使用调试工具条上的Code Coverage Window可打开代码作用范围分析的对话框,里面有各个模块代码执行情况的更详细的分析。如果你发现全速运行后有一些未被执行到的代码,那么就要仔细分析,这些代码究竟是无效的代码还是因为条件没有满足而没有被执行到。二、部份高级调试技巧Keil内置了一套调试语言,很多高级调试技巧与此有关,但是全面学习这套语言并不现实,这不是这么几期连载可以胜任的,这里仅介绍部份较为实用的功能,如要获得更详细的信息,请参考Keil自带的帮助文件GS51.PDF。1、串行窗口与实际硬件相连Keil的串行窗口除可以模拟串行口的输入和输出功能外还可以与PC机上实际的串口相连,接受串口输入的内容,并将输出送到串口。这需要在Keil中进行设置。方法是首先在输出窗口的Command页用MODE命令设置串口的工作方式,然后用ASSIGN命令将串行窗口与实际的串口相关联,下面我们通过一个实例来说明如何操作。例6,ORG 0000HJMP STARTORG 3+4*8 ;串行中断入口JMP SER_INTSTART,MOV SP,#5FH ;堆栈初始化CALL SER_INIT ;串行口初始化ASETB EA ;SETB ES ;JMP $ ;主程序到此结束SER_INT,JBC RI,NEXT ;如果串口接收到字符,转JMP SEND ;否则转发送处理NEXT,MOV A,SBUF ;从SBUF中取字符Keil 软件实例教程(四)MOV SBUF,A ;回送到发送SBUF中JMP OVERSEND,clr tiOVER,retiSER_INIT,;中断初始化MOV SCON,#50HORL TMOD,#20HORL PCON,#80HMOV TH1,#0FDH ;设定波特率SETB TR1 ;定时器1开始运行SETB REN ;允许接收SETB SM2RETEND这个程序使用了中断方式编写串行口输入/输出程序,它的功能是将接串行口收到的字符回送,即再通过串行口发送出去。正确输入源文件、建立工程、编译连接没有错后,可进行调试,使用Keil自带的串行窗口测试功能是否正确,如果正确,可以进行下一步的连机试验。为简单实用,我们不借助于其它的硬件,而是让PC机上的两个串口互换数据,即COM1发送COM2接收,而COM2发送则由COM1接收,为此,需要做一根连接线将这两个串口连起来,做法很简单,找两个可以插入PC机串口的DIN9插座(母),然后用一根3芯线将它们连起来,连线的方法是,2――33――25――5接好线把两个插头分别插入PC机上的串口1与串口2。找一个PC机上的串口终端调试软件,如串口精灵之类,运行该软件,设置好串口参数,其中串口选择2,串口参数设置为,19200,n,8,1其含义是波特率为19200,无奇偶校验,8位数据,1位停止位。在Keil调试窗口的command页中输入,&mode com1 ,1&assign com1 &sin&sout注意两行最前面的“&”是提示符,不要输入,第二行中的“&”和“&”即“小于”和“大于”符号,中间的是字母“s”和“input”的前两个字母,最后是字母“s”和“output”的前三个字母。第一行命令定义串口1的波特率为19200,无奇偶校验,8位数据,1位停止位。第二行是将串口1(com1)分配给串行窗口。全速运行程序,然后切换串口精灵,开始发送,会看到发送后的数据会立即回显到窗口中,说明已接收到了发送过来的数据。切换到uVison,查看串行窗口1,会看到这里的确接收到了串口精灵送来的内容。2、从端口送入信号程序调试中如果需要有信号输入,比如数据采集类程序,需要从外界获得数据,由于Keil的调试完全是一个软件调试工具,没有硬件与之相连,所以不可能直接获得数据,为此必须采用一些替代的方法,例如,某电路用P1口作为数据采集口,那么可以使用的一种方法是利用外围接口,打开PORT 1,用鼠标在点击相应端口位,使其变为高电平或低电平,就能输入数据。显然,这种方法对于要输获得数据而不是作位处理来说太麻烦了,另一种方法是直接在command页输入port1=数值,以下是一个小小的验证程序。例7,LOOP,MOV A,P1Keil 软件实例教程(四)JZ NEXTMOV R0,#55HJMP LOOPNEXT,MOV R0,#0AAHJMP LOOPEND该程序从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单元中。
课件名称:课件分类:电气与自动化课件类型:实验案例文件大小:607.78KB下载次数:12评论次数:5用户评分:7.2
1. 2. 3. 4. 5.

我要回帖

更多关于 wps怎么复制幻灯片 的文章

 

随机推荐