《单片机技术及 仿真与应用》_4.pptVIP

  • 1
  • 0
  • 约9.97千字
  • 约 47页
  • 2026-01-29 发布于广东
  • 举报

4.7C51函数C语言允许有空函数,空函数的定义形式为:类型标识符函数名(){}调用空函数表示什么工作也不做。例:voiddummy()上一页下一页返回4.7C51函数作用:在程序设计中往往根据需要确定若干个模块,分别由一些函数来实现。而在第1阶段只设计最基本的模块,即先把架子搭起来,细节留待进一步的完善。以这样的方式编写程序时,可以在将来准备扩充功能的地方定上一个空函数,表示这些函数未编写好,只是先占一个位置,以后用一个编写好的函数替代它。这样做可使程序的结构清楚,可读性好,以便以后扩充新功能,而对程序结构影响不大。4.7.2C51的中断服务函数中断是指当计算机执行正常程序时,由于系统中出现某些需要紧急处理的情况或特殊请求时,计算机打断当前正在运行的程序,转而对这些紧急情况进行处理,处理完毕后,再返回继续执行被打断的程序。上一页下一页返回4.7C51函数一、中断服务函数程序的定义KeilC51支持在C语言源程序中直接编写51单片机的中断服务程序,为此KeilC51对函数的定义进行了扩展,增加了一个扩展关键字interrupt。其定义形式为:类型标识符函数名(形式参数)[interruptm][usingn](1)函数名可以是任意合法的字母或数字组合。(2)m:关键字interrupt后面的中断号,取值范围是0~4或0~5。KeilC51编译器从8m+3处产生中断向量,即当响应中断申请时,程序会根据中断号自动转入地址为8m+3处,执行相对应的中断服务子程序。51单片机的中断号、中断源和中断入口地址如表4.6所示。上一页下一页返回4.7C51函数(3)n:51系列单片机可以在内部RAM中使用4个不同的工作寄存器组,称为第0~3组。每个寄存器组都包含有8个工作寄存器(R0~R7)。我们可以通过关键字using来选择不同的工作寄存器组。using后面的n取值为0~3之间的整数,分别代表4个不同的工作寄存器组。二、规定编制中断函数时应遵循以下规定:(1)中断函数不能进行参数传递。(2)中断函数没有返回值。(3)中断服务函数不能被其他函数调用,只能由硬件产生中断后自动调用。上一页下一页返回4.7C51函数(4)如果中断函数中用到浮点运算,必须保存浮点寄存器的状态,当没有其他程序执行浮点运算时可以不保存。(5)在中断函数程序执行过程中,对其他可能在此产生的中断并不响应,因而为了系统能够及时地响应各种中断,提高实时性能,中断函数的执行时间不宜过长,因此中断函数应尽量简捷。4.7.3C51库函数库函数并不是C语言的一部分,它是由编译软件开发公司根据需要编制并提供给用户使用的。本节只介绍了C51提供的库函数的一小部分,其余库函数请查相应的手册。上一页下一页返回4.7C51函数一、C51库函数的测试方法不同类型的函数运行时要采用不同的方法观察其测试效果。(1)如果在测试函数中用到了print函数,首先要用#include<stdio.h>将头文件stdio.h包含到源程序中,其次要在main函数中设置串行口,利用Keil软件的串行窗口进行输出,以便于观察。(2)使用get、getchar之类的输入函数时,采用与上述相同的方法处理,可以在串行窗口中输入所需要的字符,这些字符可以被有关函数接收。(3)如果测试函数中有printf之类的输出函数,可以直接观察输出以确定结果,也可以观察变量窗口以确定函数的工作是否正常。上一页下一页返回4.7C51函数(4)部分函数测试时定义了大容量的数组,因此在设置工程时,必须将memorymodel由默认的SMALL模式改为LARGE模式,否则无法通过编译和链接。二、绝对地址访问absacc.h使用这一类函数时,应该把absacc.h头文件包含到源程序文件中。1.CBYTE,DBYTE,PBYTE,XBYTE函数原型:#defineCBYTE(unsignedcharvolatilecode?)0)#defineDBYTE(funsignedcharvolatileidata?)0)#definePBYTE(unsignedcharvolatilepdata?)0)上一页下一页返回4.7C51函数#defineXBYTE(funsignedcharvolatilexdata?)0)2.CW

文档评论(0)

1亿VIP精品文档

相关文档