PICC可以实现C语言的中断服务程序。中断服务程序有一个特殊的定义方法:

voidinterruptISR(void);

其中的函数名“ISR”可以改成任意合法的字母或数字组合,但其入口参数和返回参数类型必须是“void”型,亦即没有入口参数和返回参数,且中间必须有一个关键词“interrupt”。

中断函数可以被放置在原程序的任意位置。因为已有关键词“interrupt”声明,PICC在最后进行代码连接时会自动将其定位到0x0004中断入口处,实现中断服务响应。编译器也会实现中断函数的返回指令“retfie”。一个简单的中断服务示范函数如下:

voidinterruptISR(void)//中断服务程序

{

if(T0IE&&T0IF) //判TMR0中断

{

T0IF=0; //清除TMR0中断标志

//在此加入TMR0中断服务

}

if(TMR1IE&&TMR1IF)//判TMR1中断

{

TMR1IF0; //清除TMR1中断标志

//在此加入TMR1中断服务

}

}

//中断结束并返回

PICC会自动加入代码实现中断现场的保护,并在中断结束时自动恢复现场,所以编程员无需象编写汇编程序那样加入中断现场保护和恢复的额外指令语句。但如果在中断服务程序中需要修改某些全局变量时,是否需要保护这些变量的初值将由编程员自己决定和实施。

用C语言编写中断服务程序必须遵循高效的原则:

1. 代码尽量简短,中断服务强调的是一个“快”字。

2. 避免在中断内使用函数调用。

虽然PICC允许在中断里调用其它函数,但为了解决递归调用的问题,此函数必须为中断服务独家专用。既如此,不妨把原本要写在其它函数内的代码直接写在中断服务程序中。

3. 避免在中断内进行数学运算。

数学运算将很有可能用到库函数和许多中间变量,就算不出现递归调用的问题,光在中断入口和出口处为了保护和恢复这些中间临时变量就需要大量的开销,严重影响中断服务的效率。

中档系列PIC单片机的中断入口只有一个,因此整个程序中只能有一个中断服务函数。

c语言t0中断方式编程,PIC C语言编程_PICC中断函数的实现相关推荐

  1. ARM7键盘工作原理及中断方式实现(C语言)

    一般键盘结构如图所示. 图中的每个行列交叉处为一个按键.当键盘上没有任何按键动作,整个行列线均处于断开状态,此时列线输出为高电平,当某个按键被按下,则与此按键相连的行线被连通,此时对应列线电平输出则取 ...

  2. c语言数据输入方式scanf,【C语言】-数据输入-scanf( )和getchar( )

    格式化输入函数scanf( ) scanf( )功能: 按照指定的格式读入键盘上输入的若干个任意类型的数据,存入到argument参数所指向的内存单元,函数返回值为读入并赋给argument的数据个数 ...

  3. 静态语言采用什么方式执行 如c语言,编程语言的两种执行方式

    1.概述 编程语言按执行方式来划分,分为:编译和解释两种.在介绍两种方式的概念以前,先介绍如下几种概念:程序员 源代码:采用某种编程语言编写的计算机程序,人类可读,例如:res = 1 + 1:编程 ...

  4. 查询方式中断方式_【每日“一”题】中断方式

    ↑ 点击上方"计算机考研说"关注我们 1. 某磁盘的转速为10 000转/分,平均寻道时间是6  ms,磁盘传输速率是20  MB/s,磁盘控制器延迟为0.2 ms,读取一个4 K ...

  5. c语言文件打开方式字符串,C语言打开文件-C语言打开文件的方式-C语言以只读方式打开文件-C语言以读写方式打开文件-嗨客网...

    C语言打开文件教程 在 在 C 语言中,打开文件使用 fopen C语言fopen函数详解 语法 FILE *fopen(char *filename, char *mode); 参数 参数 描述 f ...

  6. STM32CubeMX实现串口通信(中断方式)

    目录 一.STM32CubeMX工程创建 1.题目要求 2.配置STM32CubeMX工程 2.1 时钟的设置 2.2 USART的配置 二.Keil工程的创建 三.效果展示 总结 一.STM32Cu ...

  7. 【2】中断方式和查询方式的区别

    1.中断方式: 接收数据时,MCU转入中断服务程序,再处理接收到的数据: CMT2300A接收数据的中断: 检测RX_FIFO_TH 中断,一旦有效表示FIFO 已经被填入预设的数据长度,就可以开始读 ...

  8. 【应用C】C语言实现基于中断方式的旋转编码器方向识别(编码器有空闲状态)

    文章目录 01 - 编码器旋转波形 02 - 编程思路 03 - 源代码   编码器类型是有空闲状态,当没有旋转的时候,AB相都为高电平,而且当旋转旋钮后无动作,AB相会恢复到高电平,所以方向的一个方 ...

  9. 51单片机——中断系统、外部中断、定时器中断、串口通信C语言入门编程

    目录 中断系统: 外部中断: 1.外部中断0.1:当触发时,LED状态取反 定时器中断: 1.定时器0.1:LED以1S为周期闪烁 串口通信: 1.串口中断:通过串口发送什么数据给单片机,单片机再通过 ...

最新文章

  1. 使用pinchzoom实现头像剪裁
  2. 华为服务器MLC硬盘ID号,RH2288H RH5885H V3 3.5寸 SAS SATA华为服务器硬盘架子 支架
  3. 对比2个表mailbox_id字段的差集,然后做插入操作
  4. 测试与CMMI质量体系
  5. Django中六个常用的自定义装饰器
  6. moead算法流程步骤_数据聚类(一)常见聚类算法的基本原理[图解]
  7. hdu 1026 Ignatius and the Princess I(优先队列+bfs+记录路径)
  8. 3种常见的Class级别的错误
  9. python怎么添加按钮_在Python QProcess示例中添加按钮和单独的窗口
  10. od怎么解java打包的exe_关于打包java文件并生成可执行文件的问题
  11. Selenium 三种等待
  12. SQL字符串转化数字
  13. 904-线程池项目死锁问题分析
  14. 有一个8位机,采用单总线结构......(计算机组成原理课后习题)
  15. FreeRTOS记录(八、用软件定时器?还是硬件定时器?)
  16. 视频监控发展的技术难点在哪里?
  17. mysql_slow_详解MySQL中SlowLog的实际配置
  18. NLP实践九:HAN原理与文本分类实践
  19. android elevation 白色,Android Elevation设置_安卓动态设置elevation_android elevation设置透明度...
  20. 视觉生理学基础(人眼结构)

热门文章

  1. asp.net在发送邮件时出现服务器响应为: You are not authorized to send mail, authentication is required 解决方案...
  2. Bailian2734 十进制到八进制(POJ NOI0113-45)【进制】
  3. 计算最大子段(分治法)
  4. Linux shell —— 数组与关联数组
  5. 生成式模型(generative) vs 判别式模型(discriminative)
  6. 算法求解方法与思路的总结
  7. 面向项目(一) —— 代码编写
  8. word的使用(二)
  9. mysql my.ini设置root密码_mysql 5.7设置root密码 windows
  10. 屏幕为什么要正负压供电_焦炉煤气脱硫为什么要选择负压脱硫工艺?