一般编译器的堆栈用于保存局部变量、函数的参数、函数的返回值、中断上下文信息等。但Keil对局部变量、函数参数预先分配空间(放在静态全局变量区),Keil的堆栈只是用于保存函数嵌套调用的PC、中断上下文信息。
从主程序进入中断需要入栈字节数:13+PC=15 Byte(ACC,PSW,B,DPH,DPL,R0~R7)
Keil支持2级中断15×2=30 Byte。
主程序中每级调用需要消耗2字节保存PC,如调用深度6级,需要6×2=12字节堆栈空间。
Keil51 编译后会生成M51文件,查找?Stack地址,为堆栈起始地址,向上增长到0xff,溢出则导致单片机复位。
关键字:51单片机 stack堆栈
引用地址:
51单片机stack堆栈
推荐阅读最新更新时间:2024-03-16 16:17
51单片机,C语言编程,控制指示灯闪烁的频率
c51单片机,c语言编程,关于指示灯定时闪烁的。 P1.0 P1.1 P1.2 P1.3上面各接有一个指示灯,P2.0接一个外接按键。 要求: 按一下按键P1.0以1Hz的频率闪烁 半周期为500ms 第二次按下按键P1.1以2Hz的频率闪烁 半周期为250ms 第三次按下按键P1.2以3Hz的频率闪烁 半周期为165ms 第四次按下按键P1.3以4Hz的频率闪烁 半周期为125ms 第五次按下按键P1.0以1Hz的频率闪烁 半周期为500ms 如此循环。 单片机外接6MHz晶振,如何写这个程序? 悬赏分:30 本程序有实用价值,在不同的工作状态,以不同的速度闪烁,可表现出不同的紧急程度。 系统的晶振是6MHz,则机器周
[单片机]
51单片机时钟电路原理图解
时钟电路就是一个振荡器,给单片机提供一个节拍,单片机执行各种操作必须在这个节拍的控制下才能进行。因此单片机没有时钟电路是不会正常工作的。时钟电路本身是不会控制什么东西,而是你通过程序让单片机根据时钟来做相应的工作。 在MCS-51单片机片内有一个高增益的反相放大器,反相放大器的输入端为XTAL1,输出端为XTAL2,由该放大器构成的振荡电路和时钟电路一起构成了单片机的时钟方式。根据硬件电路的不同,单片机的时钟连接方式可分为内部时钟方式和外部时钟方式,如图1所示。 (a)内部方式时钟电路 (b)外接时钟电路 图1时钟电路 内部时钟原理图 (就是一个自激振荡电路) 在内部方式时钟电路中,必须在XTAL1和XTAL2引脚两端
[单片机]
51单片机多字节的除法
;(四字节除四字节,被除数或者除数小于四字节,则前面填0即可) ; 后面还有一个双字节除双字节的程序,如果除数是单字节,则字高位填为00即可) ;51单片机多字节的除法 ;R4R5R6R7放被除数 R0R1R2R3放除数 ;当除数的长度为4字节时 R3R4R5R6是余数 R7是商 ;当除数的长度为3字节时 R3R4R5是余数 R6R7是商 ;当除数的长度为2字节时 R3R4是余数 R5R6R7是商 ;当除数的长度为1字节时 R3是余数 R4R5R6R7是商 ;被除数是双字时,将R4R5置为0即可,这个程序包打天下 ;用一个单元来放中间值 单元名为danyuan danyuan equ 3BH MOV R7,#0ffh MOV R6,
[单片机]
51单片机RS485通讯程序仿真与MODBUS RTU静止时间详解
仿真原理图如下 由于MODBUS-RTU 要求每帧信息中的数据间隔时间不得超过1.5字符的静止时间。 因此: (1)、当串口产生接收中断后,立即重装“超时定时器”的初始值。(注:超时定时器的初始值和波特率有关) 问题如下: (a)、由于要求在串口接收中断中重装超时定时器初始值,那么,该超时定时器就只能采用“溢出模式”,而不能采用“CTC模式” (b)、超时定时器必须在程序初始化时就一直开启。 我的理解对吗? (2)两帧之间的3.5字符的静止时间该如何实现呢? 接收到每个字节的时候,初始化定时器就行,最后一个字节后,定时器就溢出了 利用单独的软件定时器,来判断一帧接收报文结束,可以防止若报文接收不完整,该帧通信任务无
[单片机]
基于51单片机之16个阵列式键盘驱动程序
#define KEY P1 //键盘所连接的I/O接口组定义 ********************************************************* 函数名:16个阵列式键盘驱动程序 调 用:? = Key (); 参 数:无 返回值:unsigned char 键值0~16 结 果:有键按下时返回值为键值1~16,无键按下时返回值为0 备 注:在主函数中不断调用 ***********************************************************/ unsigned char Key (void){ //4*4阵列键盘处理程序 unsigned
[单片机]
51单片机模拟串口的三种方法解析
随着单片机的使用日益频繁,用其作前置机进行采集和通信也常见于各种应用,一般是利用前置机采集各种终端数据后进行处理、存储,再主动或被动上报给管理站。这种情况下下,采**需要一个串口,上报又需要另一个串口,这就要求单片机具有双串口的功能,或者做点阵驱动时,又需上机位串口。但我们知道一般的51系列只提供一个串口,那么另一个串口只能靠程序模拟。 本文所说的模拟串口, 就是利用51的两个输入输出引脚如P1.0和P1.1,置1或0分别代表高低电平,也就是串口通信中所说的位,如起始位用低电平,则将其置0,停止位为高电平,则将其置1,各种数据位和校验位则根据情况置1或置0。至于串口通信的波特率,说到底只是每位电平持续的时间,波特率越高,持续的
[单片机]
51单片机的引脚分布与内部功能结构
51单片机引脚分布 51系列单片机,包括后面增强型52系列,他们的外观基本都是通用的,无论那家生产的大致都可以相互替换,当然是插件的替换插件的,贴片的替换贴片的!下面使用最基础的版本来介绍一些它是引脚分布。 它的40pin引脚按功能分可分为4种: 1、电源引脚,由VCC(+5V)和GND(接地)提供电源。 2、时钟信号引脚,由XTAL0和XTAL1接晶振产生系统时钟。 3、控制信号引脚,RESET,ALE/PROG ,PSEN 和EA /VPP。 RESET是复位信号输入端,高电平时触发芯片复位。 ALE/PROG为地址锁存允许信号端,在使用外部存储器时通过输出脉冲信号作为锁存低8位地址的控制信号,它也可以用作为带有片内EPR
[单片机]
一文详解80C51单片机的指令集
数据传送类指令 数据传送是单片机最基本的操作。数据传送的一般功能是将源操作数传送到指令所指定的目的操作数,指令执行后,源操作数不变。 数据传送类指令一般不影响标志位。数据传送类指令共29条,可以分为两大类。一是采用MOV操作符,称为一般传送指令,共16条;二是采用非MOV操作符,称为特殊传送指令,共13条。 一般传送指令的 汇编 指令格式为: MOV是传送指令的操作助记符。其功能是将源操作数传送到目的操作数,源操作数内容不变。 该类指令的助记符,操作数,功能,字节数及执行时长(机器周期数),按目的操组数归类如下。 1)内部8位数据传送指令 内部 RAM 区是数据传送最活跃的区域,8位内部数据传送指令共15条,用于 单片机
[单片机]