文章目录
- 摘要
- 源代码
- 说明
- 举个栗子
摘要
这是关于C51中使用循环移位等函数的头文件定义的分析
源代码
/*--------------------------------------------------------------------------
INTRINS.H
Intrinsic functions for C51.
Copyright (c) 1988-2004 Keil Elektronik GmbH and Keil Software, Inc.
All rights reserved.
--------------------------------------------------------------------------*/
#ifndef __INTRINS_H__ //条件编译,未定义则编译,到#endif之间都是程序段
#define __INTRINS_H__ //使别的条件编译知道__INTRINS_H__已经定义
//空操作(相当于8051 NOP 指令PC=PC+1)
//NOP
extern void _nop_(void);
//测试并清零位(相当于8051 JBC 指令)
//JBC bit, rel
//若(bit) = 1, 则PC ← (PC)+3+rel, bit←0
//若(bit) = 0, 则PC ← (PC)+3
extern bit _testbit_(bit);
//字符 循环 右移,低位补高位
extern unsigned char _cror_(unsigned char, unsigned char);
//整数 循环 右移,低位补高位
extern unsigned int _iror_(unsigned int, unsigned char);
//长整数 循环 右移,低位补高位
//RR A
extern unsigned long _lror_(unsigned long, unsigned char);
//字符 循环 左移,高位补低位
extern unsigned char _crol_(unsigned char, unsigned char);
//整数 循环 左移, 高位补低位
extern unsigned int _irol_(unsigned int, unsigned char);
//长整数 循环 左移, 高位补低位
//RL A
extern unsigned long _lrol_(unsigned long, unsigned char);
//测试并返回源点数状态,就是汇编中的子函数�
extern unsigned char _chkfloat_(float);
//特殊功能寄存器 入栈
extern void _push_(unsigned char _sfr);
//特殊功能寄存器 出栈
extern void _pop_(unsigned char _sfr);
#endif
说明
- extern作用是声明这是外部函数,定义是在别的地方进行的。
- 或者说这是C语言嵌入汇编语言中声明引用了汇编语言子程序;
举个栗子
//举个例子
#include
#include
#define uint unsigned int
#define uchar unsigned char
void delay(uchar);
uchar temp;
void main()
{
temp = 0xfe;
while(1)
{
P1 = temp;
delay(100);
temp = _crol_(temp,1);
}
}
void delay(uchar time)
{
uchar i,j;
for(i = time;i > 0;--i)
for(j = 110;j > 0;--j);
}