0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何为一个PIC单片机编写中断服务程序

麦辣鸡腿堡 来源:Microchip微芯 作者:Microchip微芯 2023-01-22 15:16 次阅读

问:我应该如何为一个PIC单片机编写中断服务程序?

答:仅仅是用一个'interrupt'关键词声明一个函数就好了。编译器会把它放到合适的位置,并且会注意所有的寄存器保护和恢复。

这里有一个中档PIC单片机使用中断的例子;

#include

/*

  • Interrupt demo for PIC; wait for button press on RB0/INT,
    
  • turn on a relay on another port bit for a period of time.
    
  • For simplicity here, literal constants are used, usually these
    
  • should be calculated with compile-time arithmetic.
    

*/

static bit RELAY @ (unsigned)&PORTB*8+7;// 使用这个位来驱动一个继电器

static unsigned int relay_timer; //继电器驱动器的定时值

void

main(void)

{

RELAY = 1; // 确保继电器在使能前是关闭的

TRISB = 0x3F; // Port B的第7、6位是输出

T0CS = 0; // 定时器是以指令周期累加

T0IE = 1; // 使能TMR0溢出中断

INTEDG = 0; // INT中断是下降沿触发

INTE = 1; // 使能INT中断

GIE = 1; // 全局中断使能

for(;;)

CLRWDT(); // 闲时喂一下狗

}

static void interrupt

isr(void) // 这里是中断服务函数

// isr是函数名,并不重要,可任意命名

{

if(T0IF) { //如果是定时器0中断

TMR0 -= 250; //重载定时器,每250uS中断一次

T0IF = 0; //清中断标志位

if(relay_timer != 0) //继电器定时到了吗?

relay_timer--; //定时值减一

if(relay_timer == 0) //如果定时时间到了

RELAY = 1; //关闭继电器

PORTB ^= 0x40;//翻转一个端口来指示程序还是在正常工作的

}

if(INTF) { //有没有一个按键按下?

RELAY = 0; //打开继电器

relay_timer = 4000;//启动定时器-4000个时间片=约1秒钟

INTF = 0; //清中断标志位

}

}

(译者注:建议在if条件中,同时检查中断标志位和中断使能位,如:if(T0IF && T0IE)。)

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 单片机
    +关注

    关注

    6030

    文章

    44482

    浏览量

    631770
  • 编译器
    +关注

    关注

    1

    文章

    1615

    浏览量

    49007
收藏 人收藏

    评论

    相关推荐

    如何与PIC单片机建立PICKit3程序编写电路?

     在本文中,主要解释如何与PIC单片机建立PICKit3程序编写电路,以下图电路为例,组装在试验板上的程序
    的头像 发表于 07-10 11:19 2420次阅读
    如何与<b class='flag-5'>PIC</b><b class='flag-5'>单片机</b>建立PICKit3<b class='flag-5'>程序</b><b class='flag-5'>编写</b>电路?

    pic单片机汇编程序实例

    以下是简单的PIC单片机汇编程序示例,这个程序将实现
    的头像 发表于 12-14 11:01 1701次阅读

    小白求助,求PIC单片机中断服务程序

    小白求助,求PIC单片机中断服务程序
    发表于 10-19 06:51

    PIC单片机引脚中断程序的设计技巧

    PIC单片机引脚中断程序的设计技巧   所有的中档系列PIC单片机,PORTB端口最
    发表于 10-30 08:07 1501次阅读

    PIC单片机中断总结

    PIC单片机中断总结 与51或者其他系列的单片机相比,PIC单片机
    发表于 10-30 08:15 2772次阅读

    PIC单片机程序设计基础格式

    PIC单片机程序设计基础格式 为了快速掌握PIC单片机程序的基本结构,这里给出
    发表于 05-17 09:07 936次阅读

    PIC单片机循环程序实例

    在这里介绍种定时程序,说明循环程序PIC单片机上的应用。笔者仍以PIC16F84
    发表于 04-26 10:25 3119次阅读

    PIC8位单片机程序编写方法

    PIC系列单片机的源程序是指PIC的助记符指令编写程序(汇编语言
    发表于 06-27 13:43 2769次阅读

    51单片机有几个中断单片机中断号对应的中断类型说明

    51单片机通常有5个中断,当中断发生时,程序会跳到相应的中断服务
    发表于 08-06 17:34 5次下载
    51<b class='flag-5'>单片机</b>有几个<b class='flag-5'>中断</b>?<b class='flag-5'>单片机</b>的<b class='flag-5'>中断</b>号对应的<b class='flag-5'>中断</b>类型说明

    PIC单片机定时器的外设中断的使用程序免费下载

    本文档的主要内容详细介绍的是PIC单片机定时器的外设中断的使用程序免费下载。
    发表于 07-31 17:35 7次下载
    <b class='flag-5'>PIC</b><b class='flag-5'>单片机</b>定时器的外设<b class='flag-5'>中断</b>的使用<b class='flag-5'>程序</b>免费下载

    在处理PIC单片机中断服务程序时需要注意哪些问题

    PIC与51系列单片机显著的区别就是:PIC只有个中断
    发表于 10-28 16:45 2587次阅读
    在处理<b class='flag-5'>PIC</b><b class='flag-5'>单片机</b>的<b class='flag-5'>中断</b><b class='flag-5'>服务</b><b class='flag-5'>程序</b>时需要注意哪些问题

    单片机程序如何编写

    设计编写单片机程序渐进的过程不可蹴而就,毕竟单片机
    的头像 发表于 02-12 14:38 3.8w次阅读
    <b class='flag-5'>单片机</b><b class='flag-5'>程序</b>如何<b class='flag-5'>编写</b>

    pic单片机程序

    pic单片机c语言程序,同时用了串口接收中断和定时中断
    发表于 11-16 11:36 4次下载
    <b class='flag-5'>pic</b><b class='flag-5'>单片机</b><b class='flag-5'>程序</b>

    用C语言编写PIC单片机适用程序

    单片机c语言的程序,最重要的点就是考虑到单片机的运行内存和实时性,因为单片机内存小,且要求程序
    发表于 11-16 12:06 8次下载
    用C语言<b class='flag-5'>编写</b><b class='flag-5'>PIC</b><b class='flag-5'>单片机</b>适用<b class='flag-5'>程序</b>

    PIC单片机 按键检测识别

    目录按键和PIC单片机、按键二、按键的物理连接与检测三、PIC16F18854单片机按键检测及显示实验按键排布预期效果总体流程
    发表于 11-16 12:36 12次下载
    <b class='flag-5'>PIC</b><b class='flag-5'>单片机</b> 按键检测识别