打印
[PIC®/AVR®/dsPIC®产品]

请问PIC18F25K80单片机的中断服务程序是一个吗

[复制链接]
4159|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 很给力!
5
hbqjcqg|  楼主 | 2014-4-20 21:16 | 只看该作者
两个中断函数怎么写,可以给个例子吗

使用特权

评论回复
6
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
7
hbqjcqg|  楼主 | 2014-5-4 21:38 | 只看该作者
怎么结贴老出错

使用特权

评论回复
8
yewuyi| | 2014-5-5 08:54 | 只看该作者
hbqjcqg 发表于 2014-5-4 21:38
怎么结贴老出错

结贴时,首先你不能给自己的帖子打分,其次你给其它网友回帖打分时,打分总和必须等于你的悬赏分,多和少都无法结贴.

使用特权

评论回复
9
hbqjcqg|  楼主 | 2014-5-5 15:14 | 只看该作者
yewuyi 发表于 2014-5-5 08:54
结贴时,首先你不能给自己的帖子打分,其次你给其它网友回帖打分时,打分总和必须等于你的悬赏分,多和少都无 ...

20分每人分配了几分还是出错

使用特权

评论回复
10
hbqjcqg|  楼主 | 2014-5-5 15:16 | 只看该作者
yewuyi 发表于 2014-5-5 08:54
结贴时,首先你不能给自己的帖子打分,其次你给其它网友回帖打分时,打分总和必须等于你的悬赏分,多和少都无 ...

20分分配完了还是出错

使用特权

评论回复
11
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
}
我添加这个函数的时候为什么会提示出错哈,,不能内嵌汇编吗?

使用特权

评论回复
12
heqiaosheng| | 2014-12-31 15:53 | 只看该作者
lskam 发表于 2014-12-26 14:54
你好,我编译的时候
大哥你好。
void InterruptVectorLow(void)

你有声明吗?

使用特权

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

本版积分规则

7

主题

18

帖子

0

粉丝