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是什么?
果真大神啊。。。先感谢
还想问一下,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.表达不清。为什么向前转移的偏移量等于...,并没有答出来。
============================================
提问者采纳了满篇错误的回答,还不忘贬低自己的老师,
不仅是水平太低,人品,更差。呵呵
书上说的是正常完善的中断程序最后需要reti结束。你用其他方式结束当然程序也能继续执行。但是我不建议您这样使用。首先中断程序响应前会保护现场,向堆栈中存入一些数据,如果没有reti指令,堆栈数据不会释放,多次中断执行下来会把堆栈挤满,溢出,会发生不可预料的执行结果。有的人不知道自己的程序为什么会莫名跑飞,往往就是不注意这些细节造成的,个性化程序需要巧妙使用,才能避免灾难性故障
TH0=1EH,TL0=0CH,但是如果他的初值的意思是设定的定时时间的话,TH0=E1H,TL0=F4H
PC不能直接读取或改变其数值
使用指针时,另外一个参数不能使用直接寻址方式
中断程序会自动保护,子程序不会自动保护,若需要必须在子程序中自行安排指令进行
51单片机只有无符号数,若是你要把它作为有符号数处理,你需要在程序中自行转换和识别数值。当然如果你使用C语言编写程序,编译器(比如KeilC)会自动处理你的各种数据类型
单片机里只有加法器,减法也是用加法器完成的,被减数-减数=被减数+减数的补码。100H是为了求负数的补码时数据转换的方法
51单片机C51语言的几个问题。
问题二:sbit在问题1中说的很清楚了,就是为某一位起别名,sfr 这个关键字在reg52.h头文件中出现很多 它是单片机开发商把特殊功能寄存器的物理地址映射到一个宏上面,这样的话就可以对寄存器操作了,你自己可以改动,比如reg52.h中的sfr P0 = 0x80;你改为sfr PP=0X80; 那么单片机上的P1口(...
关于C51单片机单片机的几个问题
--写跳转指令、或者写其它什么指令,都行,随你便。单片机都会执行。--只是,单片机没有执行 RETI 指令,中断程序就没有结束。--如果,你不写 RETI,中断后,单片机就永远处于中断程序之内。2、在方式0定时器T0的初值为1E0CH,则TH0,TL0的初值分别为()这题答案给的居然是F0H、0CH,我觉得...
c51单片机程序运行顺序的问题?
任何单片机在强电磁干扰下都可能会出问题,所以从设计上要把隔离和抗辐射做足。A、当程序进入外部中断1时断开加热,这个时候只有等待到启动加热信号才跳出外部中断,那么其他程序都不执行了吗?比如这个时候收到启动语句6(异步电机正转信号)。是的,主循环在中断执行期间是不会得到执行的。问题:B、怎么...
51单片机的问题
7.定时\/计数器工作于定时方式时,是通过89C51片内振荡器输出经12分频后的脉冲进行计数,--对。直至溢出。--这要看你的软件,也可以让它永远不溢出。8.80C51单片机的扩展程序存储器与片内程序存储器存储空间重叠。--可以重叠,也可以不重叠。--这要看,是谁设计电路了。9.在中断响应时断点地址...
51单片机的编程问题?
51单片机一个显著优点就是指令执行时间固定,因此可以适应时序要求严格的场合。例如符合ISO7816协议的cpu卡的读写,对时序要求比较严格。其实就是用io脚做出来的同步半双工串口。支持cpu卡的程序一般比较庞大,需要用c51来组织,但是由于c编译的不确定性,必须把底层程序封装成汇编语言模块嵌入到工程中。这就...
急!C51单片机I\/O口默认高电平问题!!!
1. 在C51单片机中,P0、P1、P2、P3端口的寄存器地址分别为0x80、0x90、0xA0、0xB0。这些地址指的是端口寄存器的地址,并非端口的默认高电平或低电平值。2. 如果发光二极管(LED)是高电平驱动的,当P0口输出值为0xFF(二进制为11111111)时,LED会亮起。然而,这个值不是直接从头文件中获得的,...
89c52系列的c51单片机开发版刚买来的,烧入代码后没有写蜂
刚入手的89c52系列C51单片机开发版,尝试烧入代码后却并未实现预期功能,如蜂鸣器的激活。这反映出开发过程中的几个关键问题,需深入探讨。首先,硬件知识的缺失是入门单片机开发的一大障碍。对于蜂鸣器的接线位置、所连接的P口引脚等基本硬件配置,若不清楚,将直接影响到后续代码的正确性。因此,熟悉硬件...
谁能帮我检查下,这个C51单片机的汇编语言有什么错误!
存在以下几个问题:1. 在按键的延时去抖动后,没有重新读取按键键值,即:L8: ACALL DELAY CJNE A,#0FFH,SAVE 这两条指令中间应插入:MOV A, P1,否则你用来比较的A还是第一次读到的A 2. 你在检测到按键按下后,没有等待键释放再去检测下一个按键。从你的程序中看,检测到按键按下后,...
C51 单片机 局部变量 问题
同样可以得出一个结论,正是因为单片机的RAM有限,才会导致局部变量不清除。对于电脑来说,空间近乎无限的,随时随地你都可以分配空间给变量用。但是51单片机就那么128字节,必须详细策划好如何分配,所以局部变量才有了自己固定的地盘。说到这里,我相信你的问题我已经找到答案了,虽然都是我推测的,但是十...
c51单片机问题C语言
单片机支持汇编编程的C51编程。1、汇编编程,传统的汇编代码。缺点:可读性不强,优点:代码精简 2、C51编程,使用专用C语言编程。缺点:代码不精简,优点:可读性强。KeilC和IAR等编译软件,同时支持C51和汇编代码。