<intrins.h> ——Intrinsic functions for C51
常用函数:
_nop_() 空操作8051 NOP 指令
_crol_() 字符循环左移
_cror_() 字符循环右移
_irol_() 整数循环左移
_iror_() 整数循环右移
_lrol_() 长整数循环左移
_lror_() 长整数循环右移
函数原型:
说明:
#ifndef _A_H // “if not define a.h” 如果不存在a.h
#define _A_H // “define a.h” 就引入a.h
#endif // 否则不需要引入
此代码为避免头文件重复包含的固定格式
/*--------------------------------------------------------------------------
INTRINS.H
Intrinsic functions for C51.
Copyright (c) 1988-2010 Keil Elektronik GmbH and ARM Germany GmbH
All rights reserved.
--------------------------------------------------------------------------*/
#ifndef __INTRINS_H__
#define __INTRINS_H__
#pragma SAVE
#if defined (__CX2__)
#pragma FUNCTIONS(STATIC)
/* intrinsic functions are reentrant, but need static attribute */
#endif
extern void _nop_ (void);
/* 空操作指令:延时一个机器周期————直接执行NOP指令; */
extern bit _testbit_ (bit);
/* _testbit_产生一个JBC 指令,该函数测试一个位,当置位时返回1,否则返回0。
如果该位置为1,则将该位复位为0。8051 的JBC 指令即用作此目的。
_testbit_只能用于可直接寻址的位;在表达式中使用是不允许的。*/
extern unsigned char _cror_ (unsigned char, unsigned char);
/* 字符循环右移函数————需要位移的变量———循环右移的位数————
将char型变量循环右移,移动指定位数后返回; */
extern unsigned int _iror_ (unsigned int, unsigned char);
/* 整数循环右移函数———需要位移的变量——循环右移的位数————
将int型变量循环右移,移动指定位数后返回; */
extern unsigned long _lror_ (unsigned long, unsigned char);
/* 长整数循环右移函数———需要位移的变量——循环右移的位数————
将long型变量循环右移,移动指定位数后返回; */
extern unsigned char _crol_ (unsigned char, unsigned char);
/* 字符循环左移函数————需要位移的变量———循环左移的位数————
将char型变量循环左移,移动指定位数后返回; */
extern unsigned int _irol_ (unsigned int, unsigned char);
/* 整数循环左移函数———需要位移的变量——循环左移的位数————
将int型变量循环左移,移动指定位数后返回; */
extern unsigned long _lrol_ (unsigned long, unsigned char);
/* 长整数循环左移函数———需要位移的变量——循环左移的位数————
将long型变量循环左移,移动指定位数后返回; */
extern unsigned char _chkfloat_(float);
#if defined (__CX2__)
extern int abs (int);
extern void _illop_ (void);
#endif
#if !defined (__CX2__)
extern void _push_ (unsigned char _sfr);
extern void _pop_ (unsigned char _sfr);
#endif
#pragma RESTORE
#endif