MCS-51单片机复位后,第一次压入到堆栈操作的数据被保存到_地址单元

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MCS-51单片机复位后,第一次压入到堆栈操作的数据被保存到_地址单元相关的知识,希望对你有一定的参考价值。

在于你给SP的赋值地址,比如程序开始你有mov sp,#5fh,之后出现压栈,那么就是60H,如果你开始没有给SP赋值,缺省状态下SP=07H,所以就是08H。追问

那有两个答案啊,但是题目只给了我08H的表达,为什么会这样呢?还有第一个我不太理解,为啥就到60H了...

追答

一般而言,在汇编编程上,开始都会重设SP的,不然会影响到寄存器工作区的运用,因为很多场合,需要用到多个工作寄存器区,所以缺省时SP=07H就不能满足要求了,对于52单片机因为有256个寄存器可用,一般设置SP都在7FH之后这些不能直接访问的区域。对51而言寄存器进栈是加地址的,所以栈顶初值为5FH的话,第一个压入的地址就为5F+1 了。

参考技术A 如果没有给SP赋值, 默认是08H地址 参考技术B 08H地址单元。

单片机复位后高电平输出问题(收集别人的)

有些电路我需要使用高电平输出有效,但是通电自动复位时单片机IO口会有短时间输出高电平导致继电器误动作怎么办?程序中要求高电平输出有效的我已经将它置位低电平。

解决方案
51单片机复位期间,IO口呈高电平状态,万一IO口控制的设备是使用高电平触发的话,在复位的瞬间会造成设备触发。解决方法: 
1、把MCU换成别的体系的,譬如AVR、PIC等,这些单片机复位时IO口呈浮空高阻状态,不会造成触发。 
2、使用反相驱动,MCU输出低电平反相成高电平再去控制设备。复位时的高电平反相后变成低电平,不会触发。这是比较常用的方法,稳定,但布线复杂了不少。 
3、使用光耦隔离。光耦隔离后MCU也是输出低电平打开光耦再驱动被控设备,复位时的高电平不会打开光耦,不会造成误触发。 
4、使用多余的IO口锁定,这种方法比较奇怪,在没用的IO口里挑一个出来接到NPN管的基极,再把NPN管的发射极接到被控的IO口,复位时所有的IO口呈高电平,NPN管导通,把被控的IO口强行拉低,相当于把被控IO口的电平锁定为低,避免触发被控的设备。这种方法必须配合软件,复位完毕后必须软件把接NPN管基极的那根IO置低电平,释放被控的IO口。这种方法比较少用,毕竟需要有多余的IO口,还必须加上三极管、电阻,布线复杂了不少,成本也增加不少。 
5、使用滤波电容。在被控IO口对地之间接一uF级电容及K级电阻,类似缓冲作用。开机瞬间IO口通过电阻向电容充电,电平有一个逐渐上升的过程。只要电容及电阻的参数选择得当,那么复位时由于缓冲作用IO口还没来得及触发设备时那么MCU已经复位完毕把电平拉低了,这样也就避免了误触发。这种方法有一定限制,会造成设备的响应速度变慢,因此被控的IO口电平不能变化太快,否则由于电容的缓冲作用,设备无法有效控制。

 

以上是关于MCS-51单片机复位后,第一次压入到堆栈操作的数据被保存到_地址单元的主要内容,如果未能解决你的问题,请参考以下文章

单片机成长之路(51基础篇)- 002 STC单片机冷启动和复位有什么区别

MCS-51系列单片机是属于啥体系结构

为啥MCS-51单片机的程序存储器和数据存储器共处同一地址空间而不会发生总线冲突

MCS51和8051和C51单片机啥联系?

MCS-51单片机汇编语言程序设计

MCS-51单片机拓展存储器的设计