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

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

3天内不再提示

如何在PICC中使用中断

麦辣鸡腿堡 来源:Microchip微芯 作者:Microchip微芯 2023-01-22 16: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)。)

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

    关注

    0

    文章

    23

    浏览量

    13933
  • 编译器
    +关注

    关注

    1

    文章

    1577

    浏览量

    48614
收藏 人收藏

    评论

    相关推荐

    何在bash中使用条件语句

    今天我们介绍一下如何在 bash 中使用条件语句。
    的头像 发表于 12-09 17:27 1854次阅读
    如<b class='flag-5'>何在</b>bash<b class='flag-5'>中使</b>用条件语句

    何在Linux中使用htop命令

    本文介绍如何在 Linux 中使用 htop 命令。
    的头像 发表于 12-04 14:45 551次阅读
    如<b class='flag-5'>何在</b>Linux<b class='flag-5'>中使</b>用htop命令

    PICC——函数

    的包含头文件中,再在每个原程序模块中引用。PICC 可以实现 C 语言的中断服务程序。中断服务程序有一个特殊的定义方法:void interrupt ISR(void); 其中的函数名“ISR”可以改成
    发表于 06-21 11:37

    PICC安装与PICC中的变量定义

    目录:一、PICC安装二、PICC 中的变量定义三、PICC对数据寄存器bank的管理四、PICC的其它变量修饰关键词1、extern — 外部变量声明2、volatile — 易变型
    发表于 11-23 07:01

    在伟福集成环境下使用PICC

    在伟福集成环境下使用PICC.讲述在伟福集成环境如可设置PICC, 简单的调试步骤. 更详细的说明请参阅伟福仿真器使用手册.关于如何在MPLAB 下使用PICC C 语言, 请参阅Mi
    发表于 01-18 09:31 22次下载

    何在VxWorks系统中使用TrueType字库

    何在VxWorks系统中使用TrueType字库
    发表于 03-29 12:25 19次下载

    何在java代码中使用HTTP代理IP

    何在java代码中使用HTTP代理IP。
    的头像 发表于 08-04 15:38 1916次阅读

    何在python代码中使用HTTP代理IP

    何在python代码中使用HTTP代理IP。
    的头像 发表于 08-04 15:46 1037次阅读

    何在PHP代码中使用HTTP代理IP

    何在PHP代码中使用HTTP代理IP。
    的头像 发表于 08-04 16:08 2107次阅读

    何在Arduino中使用伺服电机

    电子发烧友网站提供《如何在Arduino中使用伺服电机.zip》资料免费下载
    发表于 10-24 09:46 3次下载
    如<b class='flag-5'>何在</b>Arduino<b class='flag-5'>中使</b>用伺服电机

    何在Arduino中使用LDR

    电子发烧友网站提供《如何在Arduino中使用LDR.zip》资料免费下载
    发表于 10-31 09:50 0次下载
    如<b class='flag-5'>何在</b>Arduino<b class='flag-5'>中使</b>用LDR

    何在Arduino中使用Modbus

    电子发烧友网站提供《如何在Arduino中使用Modbus.zip》资料免费下载
    发表于 11-22 11:21 11次下载
    如<b class='flag-5'>何在</b>Arduino<b class='flag-5'>中使</b>用Modbus

    何在Arduino中使用微型伺服

    电子发烧友网站提供《如何在Arduino中使用微型伺服.zip》资料免费下载
    发表于 11-28 09:50 0次下载
    如<b class='flag-5'>何在</b>Arduino<b class='flag-5'>中使</b>用微型伺服

    何在PIC16F877A微控制器中使中断

    在本教程中,我们将学习如何 在PIC微控制器中使用外部中断 ,以及为什么/在哪里需要它们。
    的头像 发表于 01-25 15:32 1234次阅读
    如<b class='flag-5'>何在</b>PIC16F877A微控制器<b class='flag-5'>中使</b>用<b class='flag-5'>中断</b>

    何在测试中使用ChatGPT

    Dimitar Panayotov 在 2023 年 QA Challenge Accepted 大会 上分享了他如何在测试中使用 ChatGPT。
    的头像 发表于 02-20 13:57 372次阅读