单片机左右移位函数_单片机移位函数 - CSDN
  • 循环左右移算法

    千次阅读 2019-07-12 13:50:51
    /***************************************************************************** ...Function : 循环左右移_crol_和_cror_两个函数的原型 Author : mike Email : hxtiou@163.com Version : V1.0 Dat...

     

    /*****************************************************************************
    FileName : crox.c
    Function : 循环左右移_crol_和_cror_两个函数的原型
    Author   : mike
    Email    : hxtiou@163.com	
    Version  : V1.0
    Date     : 2019-07-12
    Note     : 来自C51
    *****************************************************************************/
    #define u8 					unsigned char
    
    u8 crol(u8 a,u8 b) //循环左移
    {
        u8 left = a<<b;
        u8 right=a>>( sizeof(u8)-b);
        u8 temp=left|right;
        return temp;
    }
    u8 cror(u8 a,u8 b) //循环右移
    {
        u8 right = a>>b;
        u8 left  = a<<( sizeof(u8)-b);
        u8 temp=left|right;
        return temp;
    }
    

     

     

     

     

     

     

    展开全文
  • 【intrins.h】 C51内部移位函数

    千次阅读 2010-06-14 07:23:00
    INTRINS.H:内部函数 函数名: _crol_,_irol_,_lrol_ 原 型: unsigned char _crol_(unsigned char val,unsigned char n); unsigned int _irol_(unsigned int val,unsigned char n); unsigned int _lrol_...
    INTRINS.H:内部函数
    
    函数名: _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_,_irol_,_lrol_以位形式将val 左移n 位,该函数与8051“RLA”指令相关,上面几个函数不同于参数类型。
    
    例:
    #include 
    main()
    {
       unsigned int y;
       y=0x00ff;
       y=_irol_(y,4);   /*y=0x0ff0*/
    }
     
     
    
    函数名: _cror_,_iror_,_lror_
    原 型: 
    unsigned char _cror_(unsigned char val,unsigned char n);
    unsigned int  _iror_(unsigned int  val,unsigned char n);
    unsigned int  _lror_(unsigned int  val,unsigned char n);  长整数循环右移
    功 能:
    _cror_,_iror_,_lror_以位形式将val 右移n 位,该函数与8051“RRA”指令相关,上面几个函数不同于参数类型。
     
    
    例:
    #include 
    main()
    {
    unsigned int y;
    y=0x0ff00;
    y=_iror_(y,4); /*y=0x0ff0*/
    }
     
    
    函数名: _nop_
    原 型: void _nop_(void);
    功 能:_nop_产生一个NOP 指令,该函数可用作C 程序的时间比较。C51 编译器在 _nop_ 函
    数工作期间不产生函数调用,即在程序中直接执行了NOP 指令。
    例:
    
    P()=1;
    _nop_();
    P()=0;
    
    函数名: _testbit_
    原 型:bit _testbit_(bit x);
    功 能:_testbit_产生一个JBC 指令,该函数测试一个位,当置位时返回1,否则返回0。
    如果该位置为1,则将该位复位为0。8051 的JBC 指令即用作此目的。
    _testbit_只能用于可直接寻址的位;在表达式中使用是不允许的。
    展开全文
  • 单片机中c语言 右移 和左移 与CY

    千次阅读 2019-03-03 18:08:19
    单片机中c语言“右移&gt;&gt;和左移&lt;&lt;”与CY 左移 &lt;&lt;0100 1111 &lt;&lt; 左移一位:1001 1110CY=0;第一位跑到CY上,最后一位补0;在keil c51中,内部函数库INTRINS.H...

    单片机中c语言“右移>>和左移<<”与CY

    左移 <<
    0100 1111 << 左移一位:1001 1110 CY=0 ;第一位跑到CY上,最后一位补0 ;

    在keil c51中,内部函数库INTRINS.H中_crol_(m,n)表示将m循环左移n位,第一位的跑到最后一位上。

    右移>>
    1000 1111 >> 右移一位   0
    100 0111 CY=1 ;第一位补0,最后一位跑到CY上
    展开全文
  • 1.汇编语言中: 对于51单片来说:  1.1 逻辑左移指令  RLA:将A中的值逻辑左移,将A中最高位D7位移动到最低位D0位,D0位送到D1位,例如A为00111001B,执行RL A指令之后,A变成0111 0010  RLCA:将A中的值加上...

    1.汇编语言中

    对于51单片来说:

       1.1 逻辑左移指令

             RLA:将A中的值逻辑左移,将A中最高位D7位移动到最低位D0位,D0位送到D1位,例如A为00111001B,执行RL A指令之后,A变成0111 0010

             RLCA:将A中的值加上进位(CY)进行逻辑左移,将CY的值送到D0位,然后再把D7的值送给CY,例如A为00111001B,CY=1为,执行RLC A指令之后,A变成0111 0011,CY=0

       1.2逻辑右移指令

             RRA:将A中的值逻辑右移,例子省略

             RRCA:将A中的值加上进位(CY)进行逻辑右移,例子省略

    2.C51中:

     对于51单片机:

             2.1 m<<n:左移指令,共移位n次,每执行一次,操作数最高位D7移入CY,CY中本来的数丢失,最低位D0补0,其他位依次向左移动1位。

           例如m为0011 1001B,n为1,CY=1,执行m<<n之后,A变成0111 0010,CY=0

             2.2 m>>n:   右移指令,跟左移相似。

         

    展开全文
  • 一些常见的移位函数

    2019-04-01 22:44:03
    单片机 _crol_ 字符循环左移 _cror_ 字符循环右移 _irol_ 整数循环左移  _iror_ 整数循环右移  _lrol_ 长整数循环左移   _lror_ 长整数循环右移  一些寄存器置位 #define GPIOC_CRL *(unsigned ...
  • 单片机有一个库文件已经写好了移位函数,储存在#include <intrins.h>库文件里。 先看_crol_ 字符循环左移: #include <reg52.h> #include <intrins.h> char tmp; void delay() //延时函数 {...
  • 51单片机之循环移位

    万次阅读 2012-12-06 16:53:35
    51单片机之循环移位函数 今天在看书的时候看到了循环移位函数,想跟大家分享下,呵呵,大牛们不要嘲笑,由于本人刚起步,莫笑。 如果你使用keil软件编写C51程序的话,那么你可以打开Keil下的C51下的HLP文件,...
  • “_crol_(移动对象,左移的位数)"是左移函数,操作效果是:向左移动,最高位移动到最低位。 eg1:1110左移一位? _crol_(1110,1);——移动后是1101,最高位的1移动到了最低位。 但是如果使用的是1110<<1语句...
  • 实现字符串右循环移位函数,比如“abcdefghi”循环右移俩位就是“hiabcdefg”
  • 在 C51单片机编程中,我们经常使用到 nop():延时一个机器周期。如果晶振是12M,则延时1 us,该空函数在头文件intrins.h中 头文件 INTRINS.H 中的函数使用很方便 。 内部函数 描述 crol 字符循环左移 cror 字符循环...
  • 单片机LED流水灯(移位方式)程序(汇编语言)
  • 单片机 左右移头文件

    千次阅读 2018-07-11 09:05:13
    INTRINS.H编程中,INTRINS.H的函数使用起来,就会让你像在用汇编时一样简便.编程中,INTRINS.H的函数使用起来,就会让你像在用汇编时一样简便.编程中,INTRINS.H的函数使用起来,就会让你像在用汇编时一样简便....
  • 功能说明:利用移位函数操作点亮流水灯 程序源代码如下: #include <reg52.h> #include <intrins.h> #define uchar unsigned char #define uint unsigned int #define led P0 void delay (void) { ...
  •  http://blog.sina.com.cn/s/blog_50a8db17010179oh.html
  • 单片机汇编利用移位方式实现乘法运算,支持8位和16位。
  • 51单片机读写函数

    2019-11-06 20:08:47
    通过移位,一位一位把数据写进寄存器中 uchar NRF24SPI_Send_Byte(uchar dat) { uchar i; for (i = 0; i < 8; i++) //output 8-bit { //写入1位数据 MOSI=(dat & 0x80); //output 'uchar', MSB to ...
  • 函数即可.但在单片机中要开平方.可以用到下面算法: 算法1: 本算法只采用移位、加减法、判断和循环实现,因为它不需要浮点运算,也不需要乘除运算,因此可以很方便地运用到各种芯片上去。 我们先来看看10进制下是如何...
  • 共阴极数码管16进制编码1~f如下:uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};7SEG-MPX4-CC 四个共阴二极管显示器 1234 是阴公共端;...
  • 单片机C语言实现循环移位!

    千次阅读 2010-09-02 13:09:00
     大家知道,大家用MCU写程序的时候,只有移位的语句,没有循环移位的语句。那么如何实现循环移位呢,详见下述:  循环移位区别于一般移位的是移位时没有数位的丢失。循环左移时,用从左边移出的位填充...
  • 通过库文件intrins.h中的两个函数crol()和cror()来实现左移和右移操作
1 2 3 4 5 ... 20
收藏数 2,633
精华内容 1,053
关键字:

单片机左右移位函数