关于C51单片机单片机的几个问题

1、徐汉斌版单片机微型计算机原理教材P144上说“中断服务程序最后一条指令必须是中断返回指令RETI“,这句话是不是错了?如果最后一句话是跳转指令不是也可以么,只不过程序... 1、徐汉斌版单片机微型计算机原理教材P144上说“中断服务程序最后一条指令必须是中断返回指令RETI“,这句话是不是错了?如果最后一句话是跳转指令不是也可以么,只不过程序不会回到断点处罢了,PC也会填充跳转处PC地址
2、在方式0定时器T0的初值为1E0CH,则TH0,TL0的初值分别为()
这题答案给的居然是F0H、0CH,我觉得分明是1EH、0CH啊,是不是答案错了
3、”MCS 51的程序计数器PC不能被用户使用,因为他没有地址“,首先,不能被用户使用指的收拾什么?其次,它没有地址那他到底在哪?
4、MOV 20H,@DPTR 这个语句错了是因为DPTR只能用于片外寻址么
5、”80C51单片机子程序调用时能自动保护断点和现场“,这句话错了是不是因为只能自动保护断点不能自动保护现场?
6、MOV A,#33H 是把33H当成无符号数吧?那么如果我想移入一个带符号数呢
7、向前转移的偏移量为什么等于(目的地址+0100H)-(原地址+3),0100H是什么?
展开
 我来答
做而论道
高能答主

2013-11-17 · 把复杂的事情简单说给你听
知道大有可为答主
回答量:3万
采纳率:80%
帮助的人:1.2亿
展开全部
1、徐汉斌版单片机微型计算机原理教材P144上说“中断服务程序最后一条指令必须是中断返回指令RETI”,
这句话是不是错了?
如果最后一句话是跳转指令不是也可以么,只不过程序不会回到断点处罢了,PC也会填充跳转处PC地址

--写跳转指令、或者写其它什么指令,都行,随你便。单片机都会执行。
--只是,单片机没有执行 RETI 指令,中断程序就没有结束。
--如果,你不写 RETI,中断后,单片机就永远处于中断程序之内。

2、在方式0定时器T0的初值为1E0CH,则TH0,TL0的初值分别为()
这题答案给的居然是F0H、0CH,我觉得分明是1EH、0CH啊,是不是答案错了

--写成二进制:1E0CH = 0001 1110 0000 1100B
--取其低 13 位,写成高八位、低五位:11110000、01100
--方式0的初值,就应该是:F0、0C。

3、”MCS 51的程序计数器PC不能被用户使用,因为他没有地址“,
首先,不能被用户使用指的收拾什么?其次,它没有地址那他到底在哪?
--PC 的数值,时时刻刻,在自动加一,这个特点,用户对其,不可控制。
--但是,用户,可以用 JMP 指令,改变 PC 的数值。
--说 PC 不能被用户使用,实际上是他不会用。
--51 单片机里面,确实没有 PC 的地址,因为,谁都不需要这个地址。

4、MOV 20H,@DPTR 这个语句错了是因为DPTR只能用于片外寻址么
--这个指令,并不存在。
DPTR只能用于片外寻址么
--查一下指令表,就知道了。

5、”80C51单片机子程序调用时能自动保护断点和现场“,
这句话错了是不是因为只能自动保护断点不能自动保护现场?
--中断时,51 单片机,采用压栈的方法,自动的保护断点地址。

--保护现场 ?
--单片机,不知道你的现场是什么。
--把单片机和保护现场联系在一起,就是狗戴嚼子,胡勒!

6、MOV A,#33H 是把33H当成无符号数吧?那么如果我想移入一个带符号数呢

就写上负号即可。
MOV A, #-33H
这就行了。

7、向前转移的偏移量为什么等于(目的地址+0100H)-(原地址+3),0100H是什么?
--编写程序,现在都用编译软件来进行编译。
--编译软件,会自动计算程序中的偏移量。
--编程人,根本不用讨论偏移量的计算,以及推导公式。
--有些教材,作者的思维,还停留在人工编译的阶段,抱残守缺,不用理他。
--0100H,是256。
追问
果真大神啊。。。先感谢
还想问一下,2中低五位少的前三位是直接补0么
6中,首先,如果我想表示负的01H,那么最高位运算时是自动改成1么
其次,我想表示正数是是应该加+吗?
追答
--取其低 13 位,写成高八位、低五位:11110000、XXX01100
--方式0的初值,就应该是:F0、0C。
2中低五位少的前三位是直接补0么
--这前三位,写什么都不起作用,单片机并不接受这三位。

6中,首先,如果我想表示负的01H,那么最高位运算时是自动改成1么,
其次,我想表示正数是是应该加+吗?
负一,你就直接写-1,即可。
在编译时,负数就变成了补码。于是,-1就成了255。
正数,符号就可以省略。

~~~~~~~~~~~~~~~~~~~~~~~以上是在 2013-11-17 22:06 做出的回答。

后来发现,提问者采纳了错误的答案,就此又补充了一些。

下面,对错误的答案,逐条的加以分析:

1. 如果没有reti指令,...多次中断...把堆栈挤满溢出...

--如果没有reti指令,本次中断就没有结束,也就不会有多次中断。

--即使再发生了高优先级的中断,最多会也只会发生两次中断,谈何溢出?

--中断嵌套,最多只有两层。
--认为可以出现多次中断,这是基本概念不清。

2....TH0=E1H,TL0=F4H

--错误。
--正确数值可见题目给出的数值,推导过程可见做而论道的回答。

3. PC不能直接读取或改变其数值

--错误。
--去看看JMP指令的功能,就知道能不能改变 PC 了。

4.使用指针时,另外一个参数不能使用直接寻址方式

--基本概念不清。汇编语言里面,没有指针的说法。

--另外一个参数,可以使用直接寻址方式,如下:
--MOV B,@R0 这里的B,是不是直接寻址?

5.中断程序会自动保护...

--错误。
--保护断点,这是主程序干的。

--中断程序不会自动保护任何东西。

6. 51单片机只有无符号数,...

--错误。
--可以使用补码,即带符号数。
--也可以直接写上符号:-、+。

7.表达不清。为什么向前转移的偏移量等于...,并没有答出来。

============================================

提问者采纳了满篇错误的回答,还不忘贬低自己的老师,

不仅是水平太低,人品,更差。呵呵
siduestc
2013-11-17 · TA获得超过527个赞
知道小有建树答主
回答量:655
采纳率:100%
帮助的人:144万
展开全部
  1. 书上说的是正常完善的中断程序最后需要reti结束。你用其他方式结束当然程序也能继续执行。但是我不建议您这样使用。首先中断程序响应前会保护现场,向堆栈中存入一些数据,如果没有reti指令,堆栈数据不会释放,多次中断执行下来会把堆栈挤满,溢出,会发生不可预料的执行结果。有的人不知道自己的程序为什么会莫名跑飞,往往就是不注意这些细节造成的,个性化程序需要巧妙使用,才能避免灾难性故障

  2. TH0=1EH,TL0=0CH,但是如果他的初值的意思是设定的定时时间的话,TH0=E1H,TL0=F4H

  3. PC不能直接读取或改变其数值

  4. 使用指针时,另外一个参数不能使用直接寻址方式

  5. 中断程序会自动保护,子程序不会自动保护,若需要必须在子程序中自行安排指令进行

  6. 51单片机只有无符号数,若是你要把它作为有符号数处理,你需要在程序中自行转换和识别数值。当然如果你使用C语言编写程序,编译器(比如KeilC)会自动处理你的各种数据类型

  7. 单片机里只有加法器,减法也是用加法器完成的,被减数-减数=被减数+减数的补码。100H是为了求负数的补码时数据转换的方法

本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
zhxiufan
2013-11-17 · 知道合伙人软件行家
zhxiufan
知道合伙人软件行家
采纳数:14923 获赞数:38385
国家科技进步奖

向TA提问 私信TA
展开全部
1、这句话是对的,如果是跳转那么就会出现SP堆栈混乱,进入中断时有一个保护现场的操作,也就是讲地址压栈,你执行完后跳转回去就不会有出栈操作,要不来多少次就会使SP爆满的。何况你知道什么时候进入中断的吗?

2、应该是TH0=1EH,TL0=0CH,答案有错。
3、PC是可以使用的,只是不能赋值而已,当然它确实没有物理地址,一般而言是程序执行过程中靠硬件自动改变值大小的。使用方法如下:
MOVC A,@A+PC
4、MOV 20H,@DPTR是没有这个指令的,DPTR只能通过MOVC或MOVX来访问,而且只能传送到累加器A。
5、是的,只能保护断点地址,不能保护现场比如PSW状态等。
6、可以呀,有无符号是靠你自己的决定的,一般而言,最高位为1位负数,位0 为正数这就是有符号数,没有特别说明和设定,一般都是做无符号数处理。
7、我感觉你的0100H应该是当前转移指令的地址,也即是SJMP的地址。
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式