#include <intrins.h>
void tst_crol (void) {
char a
char b
a = 0xA5
b = _crol_(a,3) /* b now is 0x2D */
}
你可以枯铅在你安装Keil的基败枯目录下找D:\Keil\C51\HLP内的C51lib.chm中搏洞有
_crol_ 字符循环左移_cror_ 字符循环右移闹差
_irol_ 整数循环左移
_iror_ 整数循环右移
_lrol_ 长整数循环左移
_lror_ 长整数循环右移
_nop_ 空 *** 作8051 NOP 指令
_testbit_ 测试并清零位8051 JBC 指令函数名: _crol_,_irol_,_lrol_
原 型: unsigned char _crol_(unsigned char val,unsigned char n)
unsigned int _irol_(unsigned int val,unsigned char n)
unsigned int _lrol_(unsigned int val,unsigned char n)
举例:
_crol_,_cror_:将char型变羡弯搏量循环向左(右)移动指兄祥定位数后返回
_testbit_: 相当于JBC bitvar测试该位变量并跳转同时清除。
_chkfloat_: 测试并返回源点数状态。
就是汇编中的子函数。
_crol_,_cror_:如果二进制数为01010101 那么_crol_(1) 左移1位后将高位补低位。
结果10101010。
功 能:_crol_,_irol_,_lrol_以位形式将val 左移n 位,该函数与8051“RLA”指令相关,上面几个函数不同于参数类型。
例:
#include <intrins.h>
main()
{
unsigned int y
C-5 1 程序设计 37
y=0x00ff
y=_irol_(y,4)
}
先发一个8 个灯的。#include<reg52.h>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char
uchar temp,num
void delay(uint)
void main()
{
temp=0xfe
while(1)
{
for(num=0num<8num++)
{
P1=temp
delay(100)
temp=_crol_(temp,1)
P1=0xff
delay(100)
}
}
}
void delay(uint z)
{
uint x,y
for(x=zx>0x--)
for(y=110y>0y--)
}
/****************************************************************************
再发一个10个灯的,不过函数中乱裂是IROL
*******************************************************************************/
_crol_不好实现,我用_irol_实现的。
//P2低卖闭两位,P1全部8位分别接LED,共十只LED
#include <reg51.h>
#include <intrins.h>
void delay(unsigned int z)
{
unsigned int x,y
for(x=zx>0x--)
for(y=110y>0y--)
}
main()
{
unsigned int j
unsigned char i
while(1)
{
j=0xfffe
for(i=0i<10i++)
{
P2=j/陪袜256
P1=j%256
delay(500)
j=_irol_(j,1)//整数循环左移
}
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)