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)。)

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

    关注

    6001

    文章

    43973

    浏览量

    620836
  • 编译器
    +关注

    关注

    1

    文章

    1577

    浏览量

    48614
收藏 人收藏

    评论

    相关推荐

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

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

    单片机中断是指什么?怎样去编写中断服务程序

    数码管的显示原理是什么?如何去使用PROTEUS、Keil uVision5等软件?单片机中断是指什么?中断优先级原理是什么?中断过程是怎样的?怎样去
    发表于 07-01 06:11

    如何去编写linux下的中断服务程序?有哪些步骤?

    中断单片机程序中为什么如此重要?对linux下中断程序的格式有什么要求?如何去编写linux下
    发表于 07-08 06:01

    利用C语言编写PIC单片机程序的方法是什么

    PIC单片机C语言程序设计1 7学电子跟我来FOLLOW MEPIC 单片机C 语言程序设计(1)◆丁锦滔编者按:为了帮助具有PI C
    发表于 07-15 08:40

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

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

    按键和PIC单片机的物理连接与检测

    目录按键和PIC单片机、按键二、按键的物理连接与检测三、PIC16F18854单片机按键检测及显示实验按键排布预期效果总体流程
    发表于 11-24 06:39

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

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

    PIC单片机中断总结

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

    PIC8位单片机程序编写方法

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

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

    本文档的主要内容详细介绍的是PIC单片机定时器的外设中断的使用程序免费下载。
    发表于 07-31 17:35 6次下载
    <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只有一个中断入口地址(为04H),而51有多个中断源。这样对
    发表于 10-28 16:45 2396次阅读
    在处理<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.7w次阅读
    <b class='flag-5'>单片机</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>

    单片机课设-中断程序

    proteus单片机中断程序利用单片机的P0口做输出接8只发光二极管,P3.2引脚接独立按键产生外部中断信号。
    发表于 01-13 15:02 2次下载
    <b class='flag-5'>单片机</b>课设-<b class='flag-5'>中断</b><b class='flag-5'>程序</b>

    如何在PICC中使用中断

    问:我应该如何为一个PIC单片机编写中断服务程序
    的头像 发表于 01-22 16:16 419次阅读