Keil C51 库函数 Keil C51库函数参考
C51强大功能及其高效率的重要体现之一在于其丰富的可直接调用的库函数,多使用库函数使程序代码简单,结构清晰,易于调试和维护,下面介绍C51的库函数系统。
第一节 本征库函数(intrinsic routines)和非本征库函数
C51提供的本征函数是指编译时直接将固定的代码插入当前行,而不是用ACALL和LCALL语句来实现,这样就大大提供了函数访问的效率,而非本征函数则必须由ACALL及LCALL调用。
C51的本征库函数只有9个,数目虽少,但都非常有用,列如下:
_crol_,_cror_:将char型变量循环向左(右)移动指定位数后返回
_iror_,_irol_:将int型变量循环向左(右)移动指定位数后返回
_lrol_,_lror_:将long型变量循环向左(右)移动指定位数后返回
_nop_: 相当于插入NOP
_testbit_: 相当于JBC bitvar测试该位变量并跳转同时清除。
_chkfloat_: 测试并返回源点数状态。
使用时,必须包含#inclucle 一行。
如不说明,下面谈到的库函数均指非本征库函数。
第二节 几类重要库函数
1. 专用寄存器include文件
例如8031、8051均为REG51.h其中包括了所有8051的SFR及其位定义,一般系统都必须包括本文件。
2. 绝对地址include文件absacc.h
该文件中实际只定义了几个宏,以确定各存储空间的绝对地址。
3. 动态内存分配函数,位于stdlib.h中
4. 缓冲区处理函数位于“string.h”中
其中包括拷贝比较移动等函数如:
memccpy memchr memcmp memcpy memmove memset
这样很方便地对缓冲区进行处理。
5. 输入输出流函数,位于“stdio.h”中
流函数通8051的串口或用户定义的I/O口读写数据,缺省为8051串口,如要修改,比如改为LCD显示,可修改lib目录中的getkey.c及putchar.c源文件,然后在库中替换它们即可。
关键字:Keil C51 库函数
引用地址:
Keil C51库函数参考
推荐阅读最新更新时间:2024-03-16 15:21
单片机C语言教程:C51数组的使用
数组不过就是同一类型变量的有序集合。形象的能这样去理解,就像一个 学校在操场上排队,每一个级代表一个数据类型,每一个班级为一个数组,每一个学生就是 数组中的一个数据。数据中的每个数据都能用唯一的下标来确定其位置,下标能是一维 或多维的。就如在学校的方队中要找一个学生,这个学生在 I 年级 H 班 X 组 Y 号的,那么 能把这个学生看做在 I 类型的 H 数组中(X,Y)下标位置中。数组和普通变量一样,要 求先定义了才能使用,下面是定义一维或多维数组的方式: “数据类型”是指数组中的各数据单元的类型,每个数组中的数据单元只能是同一数据 类型。“数组名”是整个数组的标识,命名方法和变量命名方法是一样的。在编译时系统会 根据数
[单片机]
STM32-自学笔记(12.通过串口与PC通信,发Hello,程序用到的库函数介绍)
1.USART_Init 函数原型:void USART_Init (USART_TypeDef*USARTx , USART_InitTypeDef*USART_InitStruct) 功能:根据USART_InitStruct中指定的参数初始化外设USARTx 参数: USARTx:x可以是1、2、3来选择USART。 USART_InitStruct:指向结构USART_InitTypeDef的指针,包含了外设USART的配置信息。 返回值:无 参数描述:USART_InitTypeDef structure typedef struct { u32 USART_BaudRate; u16 USART_Wo
[单片机]
Keil的ERROR L107:ADDRESS SPACE OVERFLOW问题
ERROR L107: ADDRESS SPACE OVERFLOW问题原因分析及解决 用KEIL选用small模式编译一个程式时老时出错,信息如下。 *** ERROR L107: ADDRESS SPACE OVERFLOW ... ... Program Size: data=217.6 xdata=0 code=5314 Target not created 芯片我选的是AT89C52,RAM有256呀,怎么会OVERFLOW呢? 但是如果编译模式选用Compact或large时就一切正常。 ... ... Program Size: data=110.6 xdata=111 co
[单片机]
C51---2.2 LED闪烁
原理图 mian函数 #include REGX52.H #include INTRINS.H void Delay500ms() //@12.000MHz { unsigned char i, j, k; _nop_(); i = 4; j = 205; k = 187; do { do { while (--k); } while (--j); } while (--i); } void main() { while(1) { P2=0XFE;//1111 1110 Delay500ms(); P2=0XFF;//
[单片机]
Keil调试STM32中解析main开始前的工作
Cortex M3的内核有三种启动方式,其分别是: A.通过boot引脚设置可以将中断向量表定位于SRAM区,即起始地址为0x2000000,同时复位后PC指针位于0x2000000处; B.通过boot引脚设置可以将中断向量表定位于FLASH区,即起始地址为0x8000000,同时复位后PC指针位于0x8000000处; C.通过boot引脚设置可以将中断向量表定位于内置Bootloader区, Cortex-M3内核规定,起始地址必须存放堆顶指针,而第二个地址则必须存放复位中断入口向量地址,这样在Cortex-M3内核复位后,会自动从起始地址的下一个32位空间取出复位中断入口向量,跳转执行复位中断服务程序。Co
[单片机]
Keil MDK编译器(V4.03)与J-LINK使用
前几天进手了一个J-LINK,因为H-JTAG毕竟对MDK支持的不是太完美,比如用keil mdk上面的下载按钮烧录程序,不是直接就能烧录进去,而是弹出H-Flash软件,再手工选择文件烧录;而且用H_JTAG单步调试还容易莫名其妙的跑飞。好在J-LINK不是太贵(我是说国内仿制的),mdk又能比较完美的支持J-link,今天就将我使用mdk和J-link的情况做一下记录。 我把MDK升级到了V4.10,之前使用的V4.01,当然这个V4.10也不是最新版,最新版应该到了V4.12。 首先需要安装mdk编译器,可以到 http://www.embedinfo.com/down-class.asp?lx=big&an
[单片机]
单片机解码万能红外遥控器的C51程序
使用方法:打开串口调试助手,设置为9600 bps 单片机 这边用11.0592M Hz 的 晶振 ,使用sm0038或者其他型号的红外接收头按下面的 电路 连接好,其中out直接与单片机的p3.2脚相连.按下 遥控器 ,串口调试助手便会出现 解码 值. /******************************************************************/ /* 本程序的蓝本从网上搜集,经修改并注释,万能遥控器解码成功 */ /* 晶振:11.0592MHz */ /************************* 说 明 ***********************
[单片机]
一种C51单片机并行口扩展设计及应用
1 引言 C51单片机是我们生活中最常用的系列,MCS-51系列单片机有4个并行口(P0,P1,P2,P3口),但对一个稍微复杂的应用系统来说,真正可供用户使用的并行口,只有P1口可用,况且常常因扩展I2C和SPI的器件需占用某些P1口,迫使用户不得不扩展并行口以满足实际的需要。习惯上,常用的并行口接口芯片有8255、8155,这两种芯片功能比较齐全,可以使用在相对比较复杂的系统中,但如是对一般的系统而言,这些功能往往闲置不用。那么就可以选用一些本来闲置不用的口线作为选通信号来进行并行口的扩展,这样就能充分利用单片机有限的I/O资源,在本设计中是将P1口扩展成一个或几个8位并行口,在每一个八位口上接入8个发光二极管做为输出,二
[单片机]