打印
[技术问答]

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

[复制链接]
1720|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算是一个保存寄存器吧,保存一些寄存器的值,以免中断服务程序对这些寄存器的修改影响到原来的程序。

使用特权

评论回复
5
淡漠安然| | 2024-4-21 14:00 | 只看该作者
在MS51的编程手册中,可能会提到使用_push_(SFRS)指令来保存特殊功能寄存器(SFRs)。

使用特权

评论回复
6
江河千里| | 2024-4-21 16:00 | 只看该作者
因为在中断服务程序中,可能会修改一些特殊功能寄存器的值,为了确保中断服务程序执行完毕后能够正确恢复这些寄存器的值,需要在进入中断时保存这些寄存器的值

使用特权

评论回复
7
冰春彩落下| | 2024-4-21 18:00 | 只看该作者
一般情况下,在MS51的中断服务程序中,需要使用_push_(SFRS)指令来保存特殊功能寄存器的值。这样可以确保中断服务程序执行完毕后,能够正确恢复中断前的状态

使用特权

评论回复
8
一秒落纱| | 2024-4-21 20:00 | 只看该作者
当然,具体的操作还需要根据您的具体应用和中断服务程序的需求来确定。如果您有特定的中断处理需求,建议查阅MS51的编程手册,以获取更详细的信息

使用特权

评论回复
9
远山寻你| | 2024-4-21 22:00 | 只看该作者
我觉得是需要有的哈,其实这就是个保存寄存器的特殊寄存器喽

使用特权

评论回复
10
三生万物| | 2024-4-22 02:00 | 只看该作者
其实你可以参考官方的例程啊,看例程来操作多好啊

使用特权

评论回复
11
暖了夏天蓝了海| | 2024-4-22 06:00 | 只看该作者
一般是需要加的,我觉得是这样

使用特权

评论回复
12
别乱了阵脚| | 2024-4-22 09:00 | 只看该作者
因为中断需要这种特殊寄存器的操作,所以需要加,而且加完之后才能恢复中断前的状态]

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

385

主题

2085

帖子

3

粉丝