<intrins.h>库函数

<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
  • 9
    点赞
  • 66
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
循环移动设计流水灯(顺时针方向)的C51语言程序如下: ``` #include <reg52.h> // 引入51单片机寄存器头文件 #include <intrins.h> // 引入C51库函数头文件 void delay(unsigned int time); // 延时函数声明 void main() { unsigned char led = 0x01; // 定义一个变量,用来控制LED灯的亮灭 while(1) // 无限循环 { P1 = led; // 将变量led的值赋给P1口,控制LED灯的亮灭 led = _crol_(led, 1); // 将变量led左移1位,实现顺时针方向的循环移动 delay(500); // 延时一段时间,让LED灯闪烁起来 } } void delay(unsigned int time) { unsigned int i, j; for(i = time; i > 0; i--) { for(j = 110; j > 0; j--); } } ``` 在这个程序中,我们使用了C51库函数`_crol_()`来实现循环移位的功能。函数的第一个参数是需要移位的变量,第二个参数是移位的位数。我们将变量`led`左移1位,实现顺时针方向的循环移动。同时,我们使用了一个简单的延时函数`delay()`来控制LED灯的闪烁频率。 LED灯右移跑马灯的C51语言程序如下: ``` #include <reg52.h> // 引入51单片机寄存器头文件 #include <intrins.h> // 引入C51库函数头文件 void delay(unsigned int time); // 延时函数声明 void main() { unsigned char led = 0x80; // 定义一个变量,用来控制LED灯的亮灭 while(1) // 无限循环 { P1 = led; // 将变量led的值赋给P1口,控制LED灯的亮灭 led = _crol_(led, 1); // 将变量led左移1位,实现LED灯的右移跑马灯效果 delay(500); // 延时一段时间,让LED灯闪烁起来 } } void delay(unsigned int time) { unsigned int i, j; for(i = time; i > 0; i--) { for(j = 110; j > 0; j--); } } ``` 在这个程序中,我们同样使用了C51库函数`_crol_()`来实现循环移位的功能。不同的是,我们将变量`led`右移1位,实现LED灯的右移跑马灯效果。同时,我们同样使用了一个简单的延时函数`delay()`来控制LED灯的闪烁频率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Jeni成长小栈

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值