51单片机之循环移位

51单片机之循环移位函数

今天在看书的时候看到了循环移位函数,想跟大家分享下,呵呵,大牛们不要嘲笑,由于本人刚起步,莫笑。

如果你使用keil软件编写C51程序的话,那么你可以打开Keil下的C51下的HLP文件,里面有个C51lib文件,这是个帮助文件。在这个文件里面就有关于移位函数的原型。

之前,如果我想移位的话(做流水灯的程序时),我会 P2 = (P2 << 1) | 1;你会发现后面需要或上一个1,以控制补0带来的麻烦。不过在移位函数中是可以不需要的,它自动补1。

下面来介绍下这俩个移位函数--_crol_与_cror_(包含在头文件intrins.h中)

_crol_:

比如,移位前是:01110110,那么移位后便是11101100。这个意思就是整体左移一位,之后将原本的首位移到最后一位。

_cror_:

比如,移位前是:01110110,那么移位后便是00111011。道理跟上面的相似。

附上一个简单的程序以说明问题:

#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);
}


你可能感兴趣的:(嵌入式,51单片机快速移位,循环移位)