[技术问答] 请问MS51这个单片机进中断到底需不需要加_push_(SFRS)?

[复制链接]
2336|11
 楼主| probedog 发表于 2024-3-26 10:23 | 显示全部楼层 |阅读模式
#include "MS51_16K.H"

/* if define tiMER0_FSYS_DIV12, timer = (0x1FFF-0x1000)*12/24MHz = 4.08ms */
/* if define TIMER0_FSYS, timer = (0x1FFF-0x0010)/24MHz = 340us */
#define TH0_INIT        0x00
#define TL0_INIT        0x10

/************************************************************************************************************
*    TIMER 0 interrupt subroutine
************************************************************************************************************/
void Timer0_ISR (void) interrupt 1           /*interrupt address is 0x000B */
{
    _push_(SFRS);

    TH0 = TH0_INIT;
    TL0 = TL0_INIT;
    TF0 = 0 ;
    P12 = ~P12;                              /* GPIO toggle when interrupt  */

    _pop_(SFRS);
}

/************************************************************************************************************
*    Main function
************************************************************************************************************/
void main (void)
{

    P12_PUSHPULL_MODE;

    ENABLE_TIMER1_MODE0;                           /* Timer 0 mode configuration */
    TIMER0_FSYS_DIV12;

    TH0 = TH0_INIT;
    TL0 = TL0_INIT;

    ENABLE_TIMER0_INTERRUPT;                       /* enable Timer0 interrupt  */
    ENABLE_GLOBAL_INTERRUPT;                       /* enable interrupts */

    set_TCON_TR0;                                  /* Timer0 run */

    while(1);

}
jasontu 发表于 2024-3-27 10:05 | 显示全部楼层
要加,迈出中断时,将sfrs复原,避免优先权低及main中写暂存器的sfrs page被切走,没有还原
夜阑风雨 发表于 2024-4-21 09:11 | 显示全部楼层
在使用MS51单片机时,进入中断时通常需要保存中断现场,以便在中断服务程序执行完毕后能够正确恢复现场,所以要加
光辉梦境 发表于 2024-4-21 12:00 | 显示全部楼层
我觉得SFRS算是一个保存寄存器吧,保存一些寄存器的值,以免中断服务程序对这些寄存器的修改影响到原来的程序。
淡漠安然 发表于 2024-4-21 14:00 | 显示全部楼层
在MS51的编程手册中,可能会提到使用_push_(SFRS)指令来保存特殊功能寄存器(SFRs)。
江河千里 发表于 2024-4-21 16:00 | 显示全部楼层
因为在中断服务程序中,可能会修改一些特殊功能寄存器的值,为了确保中断服务程序执行完毕后能够正确恢复这些寄存器的值,需要在进入中断时保存这些寄存器的值
冰春彩落下 发表于 2024-4-21 18:00 | 显示全部楼层
一般情况下,在MS51的中断服务程序中,需要使用_push_(SFRS)指令来保存特殊功能寄存器的值。这样可以确保中断服务程序执行完毕后,能够正确恢复中断前的状态
一秒落纱 发表于 2024-4-21 20:00 | 显示全部楼层
当然,具体的操作还需要根据您的具体应用和中断服务程序的需求来确定。如果您有特定的中断处理需求,建议查阅MS51的编程手册,以获取更详细的信息
远山寻你 发表于 2024-4-21 22:00 | 显示全部楼层
我觉得是需要有的哈,其实这就是个保存寄存器的特殊寄存器喽
三生万物 发表于 2024-4-22 02:00 | 显示全部楼层
其实你可以参考官方的例程啊,看例程来操作多好啊
暖了夏天蓝了海 发表于 2024-4-22 06:00 | 显示全部楼层
一般是需要加的,我觉得是这样
别乱了阵脚 发表于 2024-4-22 09:00 | 显示全部楼层
因为中断需要这种特殊寄存器的操作,所以需要加,而且加完之后才能恢复中断前的状态]
您需要登录后才可以回帖 登录 | 注册

本版积分规则

511

主题

3502

帖子

4

粉丝
快速回复 在线客服 返回列表 返回顶部