[PIC®/AVR®/dsPIC®产品] 请问PIC18F25K80单片机的中断服务程序是一个吗

[复制链接]
4560|11
 楼主| hbqjcqg 发表于 2014-4-20 09:55 | 显示全部楼层 |阅读模式
中断服务程序是每个中断单独写一个,还是总共一个,是怎么和中断向量表对应的?
yklstudent 发表于 2014-4-20 10:06 | 显示全部楼层
两个 一个高  一个低

评分

参与人数 1威望 +1 收起 理由
hbqjcqg + 1 赞一个!

查看全部评分

 楼主| hbqjcqg 发表于 2014-4-20 10:12 | 显示全部楼层
要写两个中断服务程序吗
wangch_sh 发表于 2014-4-20 20:41 | 显示全部楼层
如果你只用到高优先级中断或者只用到低优先级中断则可只写一个,否则要写两个。

评分

参与人数 1威望 +1 收起 理由
hbqjcqg + 1 很给力!

查看全部评分

 楼主| hbqjcqg 发表于 2014-4-20 21:16 | 显示全部楼层
两个中断函数怎么写,可以给个例子吗
heqiaosheng 发表于 2014-4-20 22:22 | 显示全部楼层
本帖最后由 heqiaosheng 于 2014-4-20 22:24 编辑

void InterruptHandlerLow(void);// 低优先级中断处理程序声明
void InterruptHandlerHigh(void);// 高优先级中断处理程序声明

//=============================================================================
//【函数功能】中断处理子函数
//【参数说明】无
//【创建时间】
//【修改时间】
//=============================================================================

//----------------------------------------------------------------------------
// Low priority interrupt vector

#pragma code InterruptVectorLow = 0x18
void InterruptVectorLow(void)
{
  _asm
    goto InterruptHandlerLow //jump to interrupt routine
  _endasm
}

//----------------------------------------------------------------------------
// Low priority interrupt routine

#pragma code
#pragma interrupt InterruptHandlerLow

void InterruptHandlerLow(void)// 低优先级中断处理
{
        if(PIR1bits.TMR1IF == 1)// Timer1中断处理
        {                                                  
                TMR1H = 0xB4;// (65536-45536)/(1/4000000)
                TMR1L = 0x4C;//
                PIR1bits.TMR1IF = 0;// 清除中断标志
        }
}

//----------------------------------------------------------------------------
// High priority interrupt vector

#pragma code InterruptVectorHigh = 0x08
void InterruptVectorHigh(void)
{
  _asm
    goto InterruptHandlerHigh //jump to interrupt routine
  _endasm
}

//----------------------------------------------------------------------------
// High priority interrupt routine

#pragma code
#pragma interrupt InterruptHandlerHigh

// 注意此中断处理函数需要在开头声明
void InterruptHandlerHigh(void)// 高优先级中断处理
{
        if(INTCONbits.TMR0IF == 1)
        {
                TMR0H = 0x9E;// (65535-40536)*(1/(4000000/4/8))
                TMR0L = 0x58;//
                INTCONbits.TMR0IF = 0;
        }
}

评分

参与人数 2威望 +4 收起 理由
浪子Tomorrow + 3
hbqjcqg + 1 20

查看全部评分

 楼主| hbqjcqg 发表于 2014-5-4 21:38 | 显示全部楼层
怎么结贴老出错
yewuyi 发表于 2014-5-5 08:54 | 显示全部楼层
hbqjcqg 发表于 2014-5-4 21:38
怎么结贴老出错

结贴时,首先你不能给自己的帖子打分,其次你给其它网友回帖打分时,打分总和必须等于你的悬赏分,多和少都无法结贴.
 楼主| hbqjcqg 发表于 2014-5-5 15:14 | 显示全部楼层
yewuyi 发表于 2014-5-5 08:54
结贴时,首先你不能给自己的帖子打分,其次你给其它网友回帖打分时,打分总和必须等于你的悬赏分,多和少都无 ...

20分每人分配了几分还是出错
 楼主| hbqjcqg 发表于 2014-5-5 15:16 | 显示全部楼层
yewuyi 发表于 2014-5-5 08:54
结贴时,首先你不能给自己的帖子打分,其次你给其它网友回帖打分时,打分总和必须等于你的悬赏分,多和少都无 ...

20分分配完了还是出错
lskam 发表于 2014-12-26 14:54 | 显示全部楼层
heqiaosheng 发表于 2014-4-20 22:22
void InterruptHandlerLow(void);// 低优先级中断处理程序声明
void InterruptHandlerHigh(void);// 高优先 ...

你好,我编译的时候
大哥你好。
void InterruptVectorLow(void)
{
  _asm
    goto InterruptHandlerLow //jump to interrupt routine
  _endasm
}
我添加这个函数的时候为什么会提示出错哈,,不能内嵌汇编吗?
heqiaosheng 发表于 2014-12-31 15:53 | 显示全部楼层
lskam 发表于 2014-12-26 14:54
你好,我编译的时候
大哥你好。
void InterruptVectorLow(void)

你有声明吗?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

7

主题

18

帖子

0

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