汇编读取文件内容片外ROM内容送到片内时,用到A之前为什么要把A清零?请大神解答。

已知片外ROM的0302H单元中有一常数,现欲把它取到累加器A中,请编写相应的程序,并进行必要的分析。_百度知道
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。
已知片外ROM的0302H单元中有一常数,现欲把它取到累加器A中,请编写相应的程序,并进行必要的分析。
请单片机高手来看看:已知片外ROM的0302H单元中有一常数,现欲把它取到累加器A中,请编写相应的程序,并进行必要的分析。
我有更好的答案
#0;目标单元地址偏移量0MOVC A,@A+DPTRMOV DPTR,#0302H;目标单元地址0302HMOV A
采纳率:38%
补充一下,ROM寻址必须使用变址寻址方式。该问题在《单片机原理及其接口技术》第三版的87页。
MOV DPTR,#0302H;目标单元地址0302H MOV A,#0;目标单元地址偏移量0
详细补充下1楼的:第一条指令因为是16位的所以只能用DPTR寄存器!第二条指令A清零!第三条指令MOVX 是将片外的DPTR中的内容存放到A中
其他1条回答
为您推荐:
其他类似问题
累加器的相关知识
换一换
回答问题,赢新手礼包89C51单片机访问外部数据存储器RAM、ROM,应该使用什么指令?_百度知道
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。
89C51单片机访问外部数据存储器RAM、ROM,应该使用什么指令?
汇编:读写外部RAM用 MOVXMOVX A,@DPTR ;读外部RAMMOVX @DPTR,A ;写外部RAM其中DPTR代表地址MOVC片内片外都可以访问MOVC A,@A+DPTR当地址超过内部ROM地址后自动读取外部ROMC语言:包含&absacc.h&使用XBYTE读写外部RAMXBYTE[0x001f]=0//把0xff写入外部RAM 0x001f地址i=XBYTE[0x001f];//读取外部RAM 0x001f地址的数据 使用CBYTE读写内/外部ROM用法跟读写RAM一样
采纳率:70%
汇编指令:外部RAM用MOVX指令,例如:MOVX A,@DPTRROM不分片内片外一律用MOVC指令,例如:MOVC A,@A+DPTR
本回答被提问者采纳
为您推荐:
其他类似问题
您可能关注的内容
存储器的相关知识
换一换
回答问题,赢新手礼包单片机编程;将片外RAM中30H单元开始的20个数据送到片内RAM40H 开始的单元中_百度知道
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。
单片机编程;将片外RAM中30H单元开始的20个数据送到片内RAM40H 开始的单元中
我有更好的答案
#20MOV R0,#30HMOV R1,#40HLOOP: MOVX AMOV R2
采纳率:35%
来自团队:
#30HMOV R1,#40HLOOP;for(i=0C:char xdata* ptr1=0x30;char* ptr2=0x40;i++){
*ptr1++ = *ptr2++;
}汇编如楼上:MOVX A,@DPTRMOV
R2;i&20,但片外RAM我喜欢用DPTR,把P2口也控制住MOV R2,#20MOV DPTR
为您推荐:
其他类似问题
单片机的相关知识
换一换
回答问题,赢新手礼包51单片机资源扩展:从片内ROM跳转到片外ROM - 51单片机 - 电子工程世界网
51单片机资源扩展:从片内ROM跳转到片外ROM
14:12:30来源: eefocus
& & 源于一年前想自己动手给51写个OS,编译选Large模式,调试时整个流程都跑的好好的,可是烧写到片上后得不到预期的效果,后来查书才知道片上只有4KRom,如果没有扩展片外Rom,当访问4K以外的程序空间,程序指针又会回到最开始执行。参考手册扩展片外Rom后,能访问达64K的程序空间。网上能搜索到的扩展方式都是将EA引脚接地,让MCU上电后从外部ROM开始执行。但查看芯片手册,明明说EA为高时,程序从执行,当执行到0x1000以上地址时(标准51),会跳转到执行。按网上的做法,为了扩展个片外ROM,片内的基本ROM都不用了,有点浪费了,于是开始找资料如何从片内跳转到片外执行。
&& 射人先射马,发帖先上图,仿真图如下:
此处EA脚没有接地。如果想简单粗暴的加电时从片外ROM执行,EA引脚接地,双击U2(27C64)Image File选Hex然后就可以了,这不是本文的重点,略过,后面可能会写到。
跳转,最简单的方式用LJMP,当然也可以用把跳转地址压入栈,然后ret过去,不过这种方式我没尝试成功。
考虑到汇编写代码太苦逼,写规模大一点的代码还得靠C,因此程序的效果是:main函数在片内执行,代码存放在片外Rom,main函数跳转到流水灯中执行。
因为是一种尝试,所以从写汇编代码开始(加载地址容易控制:ORG指定即可)
1)用汇编代码跳转:
AT89C51中的代码:
&& &LJMP 1000H
#####################
27C64中代码:
ORG& 1000H
&&&&&&& MOV& A,#0AAH
&& &MOV& P1,A
&& &MOV A,#55H
&& &MOV& P1,A
&&&&&&& SJMP STAR
程序运行起来后,PC寄存器指向0x0000处的LJMP 0x1000,然后跳到27C64处执行。起初,在27C64 0x0000处搜索编码,没找到,查阅手册后知,当PC超过0FFFH时,会转向片外程序存储空间1000H-FFFFH执行程序。
[27C64处的内容]
2)用C代码跳转:
int main()
&& &int i=0;
执行一些初始化逻辑,或者接受交互内容,按不同的输入,跳转到片外ROM
#pragma asm
&LJMP 0x1000
#pragma endasm&& &
C代码中嵌入汇编,做跳转。
这个连接中有相关的设置 /BLOG_ARTICLE_1721.HTM 如果不做设置,连接时会有警告找不到C_STARTUP,也不会运行到代码中。
调试运行,由于KEIL C加了启动代码,在protues仿真时有一长段麻烦的初始化堆栈的过程,因为没有源码,连设置断点都不行,只能按着F11傻等着。最终当然也是能跳转到片外ROM执行的。
3)片外ROM存放由KEIL C编写的HEX文件
这个摸索了很久才摸索出来!代码如下:
int main()
&& &while(1)
&& &&& &P1 = 0x33;
&& &&& &P1 = 0
首先,由于KEIL C创建的新工程会添加启动代码(stap.a51),这个前面说过用来初始化C语言运行的堆栈。因为我的程序是从片内ROM跳转过来运行的,至少已经被初始化了一次,再初始化一次,原本保留的变量全没了,因此在创建工程的时候,跳过添加startup.a51这个文件。带来的不便是:程序没有C环境,想要在调试是不可能了。
hex文件是生成了,加载,但是从片内ROM跳转过来后,P1口的内容不是0x33/0xCC而是上一次运行时的0x55/0xAA,why?代码写错了?
查看27C64的内存印象:
0x0000H的内容是:
75 90 33和75 90 CC是往P1端口写入0x33/0xCC---就是现在的代码
再查看0x1000H的内容:
74 AA对应MOV A,#0AAH,F5 90 对应MOV 90,A,明显是上次仿真时的结果!
好吧,现在得想办法把代码加载到0x1000的位置,ORG是用不上了,得用其他办法。
在我的另一篇文章 中提到,INTEL HEX文件格式中每个规则开始处都有地址,那好先看看这段代码的地址:
:0CFE4F6D8FDF3D
08是这行的长度8字节,后面的0000是这行加载位置,从0x0000开始。shit,难怪加载补上。先手动修改地址,修改玩以后,protues提示HEX校验码不对,仿真失败。无奈,只能想其他办法了。加载地址一般是由连接器在连接阶段确定的(一书中有提到),既然这样,看看 c在链接时有没有什么参数可以设置:
BL51是KEIL C的连接器,Code这个位置好像是,那就试试填入0x1000,然后再编译连接:
:0CFE4F6D8FDC23
这次生成的HEX文件,链接地址部分已经被改为0x100C。再仿真一次,不过这次仿真前要把片内ROM的跳转地址改为LJMP 0x1003,要不然指不准执行了非法指令。
27C64 0x100C处的内容75 90 33对应汇编语句 MOV 90,#33H 75 90 CC对应汇编语句MOV 90,#0CCH这正是c代码的内容,而且P1口的内容也是CC。
至此,从片内ROM跳转到片外ROM结束。另外估计ISP烧写器可能也是类似的工作原理
关键字:&&&&&&
编辑:什么鱼 引用地址:
本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。
微信扫一扫加关注 论坛活动 E手掌握
微信扫一扫加关注
芯片资讯 锐利解读
大学堂最新课程
汇总了TI汽车信息娱乐系统方案、优质音频解决方案、汽车娱乐系统和仪表盘参考设计相关的文档、视频等资源
热门资源推荐
频道白皮书
何立民专栏
北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。您所在位置: &
&nbsp&&nbsp&nbsp&&nbsp
单片机原理与应用基于汇编C及混合编程章习题解答解决方案.doc 63页
本文档一共被下载:
次 ,您可全文免费在线阅读后下载本文档。
下载提示
1.本站不保证该用户上传的文档完整性,不预览、不比对内容而直接下载产生的反悔问题本站不予受理。
2.该文档所得收入(下载+内容+预览三)归上传者、原创者。
3.登录后可充值,立即自动返金币,充值渠道很便利
需要金币:300 &&
你可能关注的文档:
··········
··········
1.什么是单片机?
单片机全称单片微型计算机。它是把计算机中的微处理器、只读存储器(ROM)、随机访问存储器(RAM)、I/O接口、串行接口、中断系统、定时/计数器等基本功能部件微型化并集成到一块芯片上构成的小而完善的计算机。
2.单片机的主要用途是什么?
单片机有体积小、功耗低、面向控制、抗干扰能力强、性价比高等优点,被广泛应用于家用电器、办公自动化、工业控制、智能仪器仪表与集成智能传感器、汽车电子与航空航天电子系统等各种控制系统中。
2-1.STC12C5A60S2单片机的内部集成了哪些功能部件?各个功能部件的具体功能是什么?
在STC12C5A60S2单片机内部,其基本结构主要有中央处理器CPU、程序存储器、数据存储器、定时/计数器、UART串行口、I/O接口、高速A/D转换、同步串行外围接口、PCA、看门狗WDT及片内RC振荡器和外部晶体震荡电路等模块组成。
各部件功能:
中央处理器CPU:负责运算控制和调度,使整个系统协调工作。
程序存储器:用于存放用户程序、数据和表格等信息。
数据存储器:用于存放单片机运行过程中的运算数据及运算地址等。
定时/计数器:常用定时器时钟来实现定时检测、定时控制;还可以用定时器产生毫秒宽的脉冲,来驱动步进电机一类的电器机械。计数器主要用于外部事件的计数。
看门狗WDT:在单片机出现运行紊乱时,可以使单片机重新启动,恢复正常运行。
I/O接口:单片机通过I/O引脚进行输入,输出操作。
振荡器:产生单片机运行所需要的时钟信号。
2-2.封装模式为LQFP-48、PDIP-40的STC12C5A60S2单片机的I/O引脚各有多少?P0、P2口各有什么功能?
封装模式为LQFP-48的STC12C5A60S2单片机有48个引脚,44个I/O引脚。封装模式为PDIP-40的STC12C5A60S2单片机有40个引脚,36个I/O引脚。
P0口和P2口都可以作为通用的I/O口使用;当单片机访问外部扩展电路或设备时,P0口可以作为地址总线的低8位及数据总线接口,地址/数据分时复用,P2口作为地址总线的高8位。
2-3.简述PSW寄存器各位的作用。若寄存器A中的内容为63H,P标志位为何值?
CY:进位或借位标志位,简称C。在执行8位的加、减法指令时,用于记录最高位的进位或借位。有进位或借位时则置位,否则清零。
AC:辅助进位标志位,在执行加减法时,若D3向D4有进位或借位时,AC置位,否则AC清零。
OV:溢出标志位。在执行加减法运算时,若运算的结果超出8位有符号数表示的范围-128-+127,表示溢出,OV置1,否则OV清零。
P:奇偶校验标志位。用于记录A寄存器中的1的个数的奇偶性。若A寄存器中1的个数为奇数,则P置位,为偶数则清零。
RS1、RS0:寄存器组选择位,用来选择当前的工作寄存器组。
F0、F1:用户标志位。
若寄存器A中的内容为63H(B),A中“1”的个数为4,所以P=0。
2-4.STC12C5A60S2单片机内部有哪几类存储器?中断服务程序的入口地址分布在哪个区域?
STC12C5A60S2单片机内部有程序存储器、数据存储器RAM、特殊功能寄存器、扩展RAM。
中断服务程序的入口地址位于程序存储器的首部。
2-5.STC系列单片机系统复位后,程序存储器指针PC的值是多少?当单片机正在执行某一条指令时,PC指向哪里?
STC系列单片机系统复位后,程序存储器指针PC的值是 0000H。
当单片机正在执行某一条指令时,PC指向下一条指令的地址。
2-6.片内RAM中,数据存储器的低128字节、高128字节和特殊功能寄存器可以使用什么寻址方式?哪些单元可作为工作寄存器区,那些单元可以位寻址?
访问低128字节RAM时,既能采用寄存器直接寻址,又可寄存器间接寻址。访问高128字节RAM时,只能采用寄存器间接寻址,但可以作为堆栈区。访问特殊功能寄存器,只能直接寻址。
00H-1FH为工作寄存器组区;片内RAM中20H-2FH单元为位寻址区。
2-7.在片内RAM中,位地址为30H的位属于字节地址为多少的单元?
字节地址为26H。
2-8.STC系列单片机复位后,使用了哪一工作寄存器组?当CPU使用的工作寄存器组为2组时,R2对应的RAM地址是多少?
STC系列单片机复位后,所使用的工作寄存器组为0组;当CPU使用的工作寄存器组为2组时,R2对应的RAM地址是12H。
2-9.什么是堆栈?简述STC12C5A60S2单片机的堆栈处理过程。
堆栈是在RAM中开辟的一片数据缓冲区,常用于保护CPU现场及临时数据,其操作遵循先进后出、后进先出的原则。
STC12C5A60S2单片机的堆栈处理过程:数据入栈时,S
正在加载中,请稍后...

我要回帖

更多关于 itunes安装汇编时出错 的文章

 

随机推荐