C51函数声明对ANSI C作了扩展,具体包括:
1.中断函数声明:
中断声明方法如下:
void serial_ISR () interrupt 4 [using 1]
{
/* ISR */
}
为提高代码的容错能力,在没用到的中断入口处生成iret语句,定义没用到的中断。
/* define not used interrupt, so generate “IRET” in their entrance */
void extern0_ISR() interrupt 0{}/* not used */
void timer0_ISR () interrupt 1{}/* not used */
void extern1_ISR() interrupt 2{}/* not used */
void timer1_ISR () interrupt 3{}/* not used */
void serial_ISR () interrupt 4{}/* not used */
2.通用存储工作区
3.选通用存储工作区由using x声明,见上例。
4.指定存储模式
由small compact 及large说明,例如:
void fun1(void) small {}
提示:small说明的函数内部变量全部使用内部RAM。关键的经常性的耗时的地方可以这样声明,以提高运行速度。
5.#pragma disable
在函数前声明,只对一个函数有效。该函数调用过程中将不可被中断。
6.递归或可重入函数指定
在主程序和中断中都可调用的函数,容易产生问题。因为51和PC不同,PC使用堆栈传递参数,且静态变量以外的内部变量都在堆栈中;而51一般使用寄存器传递参数,内部变量一般在RAM中,函数重入时会破坏上次调用的数据。可以用以下两种方法解决函数重入:
a、在相应的函数前使用前述“#pragma disable”声明,即只允许主程序或中断之一调用该函数;
b、将该函数说明为可重入的。如下:
void func(param.。。) reentrant;
KeilC51编译后将生成一个可重入变量堆栈,然后就可以模拟通过堆栈传递变量的方法。
由于一般可重入函数由主程序和中断调用,所以通常中断使用与主程序不同的R寄存器组。
另外,对可重入函数,在相应的函数前面加上开关“#pragma noaregs”,以禁止编译器使用绝对寄存器寻址,可生成不依赖于寄存器组的代码。
7.指定PL/M-51函数
关键字:C51 单片机 中断函数
引用地址:
C51单片机中断函数的定义及应用
推荐阅读最新更新时间:2024-11-11 10:55
基于51单片机设计的简易电子琴
下面直接给出proteus仿真电路 代码如下: #include reg51.h #define uint unsigned int #define uchar unsigned char #define output P1 #define input P1 //方便移植在其他电路板上,我的电路使用P1口做键盘输入接口 //定义16个按键 enum KEY{key0,key1,key2,key3,key4,key5,key6,key7,key8,key9,key10,key11,key12,key13,key14,key15}; uchar code table ={ //数组定义,显示数码管 0x3f,0x0
[单片机]
单片机中C语言的程序与数据存储
一、五大内存分区: 内存分成5个区,它们分别是堆、栈、自由存储区、全局/静态存储区和常量存储区。 1、栈区(stack):FIFO就是那些由编译器在需要的时候分配,在不需要的时候自动清除的变量的存储区。里面的变量通常是局部变量、函数参数等。 2、堆区(heap):就是那些由new分配的内存块,它们的释放编译器不去管,由我们的应用程序去控制,一般一个new就要对应一个delete。如果程序员没有释放掉,那么在程序结束后,操作系统会自动回收。 3、自由存储区:就是那些由malloc等分配的内存块,它和堆是十分相似的,不过它是用free来结束自己的生命。 4、全局/静态存储区:全局变量和静态变量被分配到同一块内存中,在以前的C语言中,全
[单片机]
单片机C语言程序设计师试题
一、选择题 1、C语言中最简单的数据类型包括( B )。 A、整型、实型、逻辑型 B、整型、实型、字符型 C、整型、字符型、逻辑型 D、整型、实型、逻辑型、字符型 2、当MCS-51单片机接有外部存储器,P2口可作为 ( C )。 A、数据输入口 B、数据的输出口 C、准双向输入/输出口 D、输出高8位地址 3、下列描述中正确的是( D )。 A、程序就是软件 B、软件开发不受计算机系统的限制 C、软件既是逻辑实体,又是物理实体 D、软件是程序、数据与相关文档的集合 4、下列计算机语言中,CPU能直接识别的是( D )。 A、 自然语言 B、高级语言
[单片机]
单片机的广泛选择
用中的单片机品种繁多,现拣几种主要的单片机及相应公司的网址介绍如下: ATMEL公司的AVR单片机,是增强型RISC内载Flash的单片机,芯片上的Flash存储器附在用户的产品中,可随时编程,再编程,使用户的产品设计容易,更新换代方便.AVR单片机采用增强的RISC结构,使其具有高速处理能力,在一个时钟周期内可执行复杂的指令,每MHz可实现1MIPS的处理能力.AVR单片机工作电压为2.7~6.0V,可以实现耗电最优化.AVR的单片机广泛应用于计算机外部设备,工业实时控制,仪器仪表,通讯设备,家用电器,宇航设备等各个领域. Motorola单片机: Motorola是世界上最大的单片机厂商.从M6800开始,开发了广泛
[单片机]
51单片机多路抢答器设计
高校是个院系、部门较多的单位 ,且学校的活动多 ,而抢答的活动精彩而又有趣 ,市面上8 路以上的抢答器很少 ,且价格贵 ,4 路的抢答器至少要800 元以上。如果我们能带领学生自己设计一个多路抢答器的话 ,这样一来既降低了成本 ,又引发了学生的兴趣。 1 基本功能 (1) 可同时供16 个代表队参加比赛 (2) 给节目主持人一个控制开关 ,用来控制系统清零和抢答开始。 (3) 可显示优先抢答代表队的编号 ,同时给出提示 ,并封锁输入 ,禁止其他选手抢答。 (4) 具有定时抢答功能 ,抢答时间可由主持人设定。 (5) 在设定时间内抢答有效 ,定时器停止工作。 (6) 定时时间已到 ,无人抢答 ,本次抢答无效。 基于单片机的多
[单片机]
51单片机超声波测距程序代码
51单片机超声波测距程序代码 /超声波模块ME007显示程序 //晶振=8M //MCU=STC10F04XE //P0.0-P0.6共阳数码管引脚 //Trig = P1^0 //Echo = P3^2 #include reg52.h //包括一个52标准内核的头文件 #define uchar unsigned char //定义一下方便使用 #define uint unsigned int #define ulong unsigned long //*********************************************** sfr CLK_DIV = 0x9
[单片机]
GigaDevice推出GD32F450系列高性能200MHz主频Cortex®-M4 MCU
GigaDevice GD32F450系列全新32位通用 MCU基于200MHz Cortex®-M4内核,持续以业界领先的强大处理效能与低功耗、高集成度、高可靠性和易用性的最佳组合,为工业控制与物联网等高性能计算需求提供高性价比解决方案。
2016年9月12日 — 日前,业界领先的半导体供应商GigaDevice (兆易创新)全新推出基于ARM® Cortex®-M4内核的GD32F450系列高性能微控制器,并以200MHz的工作主频在业界首次将ARM® Cortex®-M4内核的处理能力发挥到极致。
作为GD32 MCU家族Cortex®-M4内核的首个旗舰产品系列,GD32
[手机便携]
【GD32 MCU 入门教程】二、GD32 MCU 烧录说明(1)ISP 烧录
GD32 MCU提供了多种烧录方法,可在调试和生产等阶段进行便捷的烧录。GD32目前主要烧录方法有ISP烧录、SWD/JTAG在线下载、脱机烧录三种类型。 ISP烧录:使用串口或USB即可烧录,无需特殊工具支持。可根据协议自行定制下载方式,需要控制BOOT0引脚电平选择启动模式。 SWD/JTAG在线下载:无需切换MCU启动方式,使用仿真器等可进行下载。需使用仿真器和上位机进行操作。 脱机烧录:适用于大批量的产线生产,烧录过程无需PC和软件,可脱机进行烧录,批量烧录效率高。 本章对三种烧录方法有以下三个方面介绍。 1 烧录工具和硬件连接:介绍各烧录方法需使用的工具,以及硬件所需接口。 2 软件操作和烧录流程:介绍烧录软件的
[单片机]