用c语言编辑单片机,C51单片机C语言函数编辑
三.中断函数
中断服务函数是编写
中断时才会被执行,这在处理突发事件和实时控制是十分有效的。例如:电路中一个按钮, 要求按钮后 LED 点亮,这个按钮何时会被按下是不可预知的,为了要捕获这个按钮的事件, 通常会有三种方法,一是用循环语句不断的对按钮进行查询,二是用定时中断在间隔时间内 扫描按钮,三是用外部中断服务函数对按钮进行捕获。在这个应用中只有单一的按钮功能, 那么第一种方式就能胜任了,程序也很简单,但是它会不停的在对按钮进行查询浪费了
CPU 的时间。实际应用中一般都会还有其它的功能要求同时实现,这个时候能根据需要选用第 二或第三种方式,第三种方式占用的 CPU 时间最少,只有在有按钮事件发生时,中断服务函 数才会被执行,其余的时间则是执行其它的任务。
如果你学习过汇编语言的话,刚开始写汇编的中断应用程序时,你一定会为出入堆栈的 问题而困扰过。单片机c语言 语言扩展了函数的定义使它能直接编写中断服务函数,你能不必考 虑出入堆栈的问题,从而提高了工作的效率。扩展的关键字是 interrupt,它是函数定义时 的一个选项,只要在一个函数定义后面加上这个选项,那么这个函数就变成了中断服务函数。
在后面还能加上一个选项 using,这个选项是指定选用 51 芯片内部 4 组工作寄存器中的
那个组。开始学习者能不必去做工作寄存器设定,而由编译器自动选择,避免产生不必要的错 误。定义中断服务函数时能用如下的形式。
函数类型 函数名 (形式参数) interrupt n [using n]
interrupt 关键字是不可缺少的,由它告诉编译器该函数是中断服务函数,并由后面的
n 指明所使用的中断号。n 的取值范围为 0-31,但具体的中断号要取决于芯片的型号,像 AT89c51 实际上就使用 0-4 号中断。每个中断号都对应一个中断向量,具体地址为 8n+3, 中断源响应后处理器会跳转到中断向量所处的地址执行程序,编译器会在这地址上产生一个 无条件跳转语句,转到中断服务函数所在的地址执行程序。下表是 51 芯片的中断向量和中 断号。
表 9-1 AT89c51 芯片中断号和中断向量
使用中断服务函数时应注意:中断函数不能直接调用中断函数;不能通过形参传速参数; 在中断函数中调用其它函数,两者所使用的寄存器组应相同。限于篇幅其它与函数相关的知 识这里不能一一加以说明,如变量的传递、存储,局部变量、全部变量等,有兴趣的朋友可 以访问笔者的网站 相关文章。
下面是简单的例子。首先要在前面做好的实验电路中加多一个按钮,接在 P3.2(12 引脚外 部中断 INT0)和地线之间。把编译好后的程序烧录到芯片后,当接在 P3.2 引脚的按钮接下 时,中断服务函数 Int0Demo 就会被执行,把 P3 当前的状态反映到 P1,如按钮接下后 P3.7
(之前有在这脚装过一按钮)为低,这个时候 P1.7 上的 LED 就会熄灭。放开 P3.2 上的按钮后,
P1LED 状态保持先前按下 P3.2 时 P3 的状态。
#include
unsigned char P3State(void); //函数的说明,中断函数不用说明
void main(void)
{
IT0 = 0; //设外部中断 0 为低电平触发
EX0 = 1; //允许响应外部中断 0
EA = 1; //总中断开关
while(1);
}
//外部中断 0 演示,使用 2 号寄存器组
void Int0Demo(void) interrupt 0 using 2
{
unsigned int Temp; //定义局部变量
P1 = ~P3State(); //调用函数取得 p2 的状态反相后并赋给 P1
for (Temp=0; Temp<50; Temp++); //延时 这里只是演示局部变量的使用
}
//用于返回 P3 的状态,演示函数的使用
unsigned char P3State(void)
{
unsigned char Temp;
Temp = P3; //读取 P3 的引脚状态并保存在变量 Temp 中
//这样只有一句语句实在没必要做成函数,这里只是学习函数的基本使用方法
[1] [2]
本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。
用c语言编辑单片机,C51单片机C语言函数编辑相关推荐
- keil集成环境c语言总结,Keil C51单片机集成开发环境编程与调试教程
同 VC 之类的通用 C 语言集成开发环境(IDE)一样,Keil 也采用"工程" (Project)的方式管理源代码及相关文件,这种管理方式为由多个源代码文件组 成的大型程序开发 ...
- C语言烧写C51单片机的线,51单片机烧写程序过程以及详细说明【图文】
Step 1:Keil软件的安装 1.选中文件夹中的C51V900安装程序并打开,如图: 2.在安装对话框里一直选择Next,直到Finish完成Keil的安装. Step 2: 安装USB转串口线的 ...
- 单片机r6/r7c语言怎么用,关于单片机C51中c语言函数(-nop-())?
实现延时通常有两种方法:一种是硬件延时,要用到定时器/计数器,这种方法可以提高CPU的工作效率,也能做到精确延时:另一种是软件延时,这种方法主要采用循环体进行. 1 使用定时器/计数器实现精确延时 ...
- 汉字点阵c语言程序,用c51单片机控制1616点阵显示汉字源代码
#include #define uchar unsigned char #define uint unsigned int #define out0 P0 #define out2 P2 #defi ...
- Proteus 8仿真以及C51单片机广告灯的设计(C语言)实例
Proteus 8仿真以及C51单片机广告灯的设计(C语言)实例 一. 广告灯程序编译 二. Proteus8 仿真 三. 开发板调试 四. 注意事项 一. 广告灯程序编译 打开Keil uVisio ...
- c51语言的设计步骤,第3章节单片机c51语言程序的设计基本.ppt
第3章节单片机c51语言程序的设计基本 第3章 单片机C51语言程序设计基础 3.1 语句与流程控制 3.2 函数 3.3 本章小结 3.4 实训三 简易十字路口交通信号灯控制 教学提示 教学要求 3 ...
- c51单片机有几个终端语言,吃过大亏,才知道要从51单片机入手
原标题:吃过大亏,才知道要从51单片机入手 在这里,我就不说什么是单片机了,而是说说怎样学单片机,就我个人而言先学51,因为这个单片机在中国市场上发展了几十年了,现在工程中用的比较多的也是MCS-51 ...
- c语言编程流水灯与交通灯实验,C51单片机实验报告_流水灯_交通灯_定时器_双机交互_时钟.doc...
C51单片机实验报告_流水灯_交通灯_定时器_双机交互_时钟 学 号: 班 级: 自动化10班 姓 名: 张 指导老师: 胡 2012.12 单片机核心板实验要求 流水灯实验 实验目的: 简单I/O引 ...
- C51单片机————汇编与C语言
C51单片机-----汇编与C语言 如有错误,请留言指正!!!
最新文章
- The 'Microsoft.Jet.OLEDB.4.0' provider is not registered on the local machine.
- 计算机工作原理 公开课,《计算机的基本工作原理》公开课材料(11页)-原创力文档...
- OpenShift 4 - 验证 Pod 内部容器 使用 CA 和 ServiceAccount Token访问API服务
- [serial]基于select/poll/epoll的串口操作
- detectron2 ImportError: cannot import name ‘_C‘ from ‘detectron2‘
- oracle 列名sql,SQL查询表名、列名、列属性-Oracle
- 几款重复文件查找工具对比
- 二维图片做出三维效果
- chm文档制作 java_自己动手制作chm格式开源文档
- 药方的量化方法笔记(学习与尝试):第二回 第一次 药方的拆解 量化方法的形式的发展 对药的量化分析
- 2016年上半年信息系统监理师考试感想
- IAR下载: Failed to get cpu status after 4 retrie 的解决方法
- 2022年双十一蓝牙耳机选哪款?便宜音质好的蓝牙耳机推荐
- spark开发及调优
- 炒作房地产对个人三观之扭曲
- 2020科目一考试口诀_2021驾考科目一必过口诀
- RT-Thread:在dfs中使用cat、cp等命令时拔掉U盘死机问题
- OSChina 周四乱弹 ——前两天BUG还没改完啊?老子不改了!
- c语言 输出所有水仙花数
- 监控数据库的作用是什么呢?