单片机C语言移位的实现

发布者:平和心态最新更新时间:2016-09-18 来源: eefocus关键字:单片机  C语言移位 手机看文章 扫描二维码
随时随地手机看文章

流水灯循环左移右移,用C语言,要高效的话,只有用伪本征函数文件“intrins.h”中的_crol_(),_cror_()...等等函数,具体解释如蓝色文字,例如,要用P1口驱动8个共阳连接的二极管左循环一个一个地亮,语句是 P1=_crol_(a,1);//a储存被移位的字符。

c51中的intrins.h库函数

_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_,_irol_,_lrol_以位形式将val 左移n 位,环移(左端移出的填补右端的空位),该函数与8051“RL A”指令相关,上面几个函数不同于参数类型。(调用“一次”这样的函数把val环移n位,所谓的循环移位并不是持续的一直移位下去,要想得到这样的效果,外部须加上循环语句实现)。

例:

#include

main()

{

unsigned int y;

C-5 1 程序设计 37

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“RR A”指令相关,上面几个函数不同于参数类型。

例:

#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_只能用于可直接寻址的位;在表达式中使用是不允许的。

      至于>>=,>>,<<,<<=的移位运算符,不要天真以为它会循环移位,事实上,一个8位的字符,左移一位之后,最右边一位变成0了,而非原来最左边的一位。如果左移8位,就意味着这个8位的字符变成0x00了。具体的,如果用C实现循环移位呢?
div:eq(0) > div:eq(3) > table:eq(2) > tbody:eq(0) > tr:eq(0) > td:eq(0) > div:eq(0) > #content:eq(0) > br:eq(2)" anchortype="previous" jquery1249565275578="8">思路是:

  比如将a=0x45循环左移二位。

  a循环左移n位,即将原来右面(8-n)位左移n位,而将原来左端的n位移到最右面n位。

  1、将a的左端n位先放到b中的低n位中

        b=a>>(8-n);

  2、将a左移n位,其右面低n位被补0

       c=a<

  3、将b,c进行或运算

       a=c|b;

程序如下:

  main()

  {

  unsigned char a=0x45,b,c;

  unsigned int n=2;

  b=a>>(8-n)

  c=a<

  a=c|b;

  }

关键字:单片机  C语言移位 引用地址:单片机C语言移位的实现

上一篇:单片机开发中的几个基本技巧
下一篇:基于STM8S的Atomthreads低功耗的深度思考

推荐阅读最新更新时间:2024-03-16 15:10

单片机wifi控制app
说起单片机wifi控制app,单片机方机的资料还容易找,对于app资料网上可以找得到的资料不多,就是找到了,也就是个APP,单片机wifi控制app配套的单片机C语言程序及手机APP源代码一般的都无法找得到,资料不全,给使用带来很大困难。目前,单片机wifi控制app,目前最常见到的是安桌手机的app,其编程用得比较多的是JAVA语言写的,其开发环境是Eclipse,对于基英语基础不好的人来说,比较容易上手的就是易语言编程环境E4A。这里我就贴出一个Eclipse开发环境下写的wifi控制app,下面是APP界面截图: 实物照片(照片中的APP是E4A写的,单片机的代码是一样的) 布局文件: xmlns:tools=
[单片机]
<font color='red'>单片机</font>wifi控制app
ESDEMP对单片机的辐照效应实验及加固方法
    摘要: 为研究静电放电电磁脉冲对电子系统的影响,进行了静电放电电磁脉冲对单片机系统的辐照效应实验。实验表明,单片机系统在ESD EMP作用下,会出现死机、重启动、通讯出错和数据采集误差增大等现象。在实验基础上,研究了对ESD EMP的加固方法。     关键词: 瞬态电磁脉冲(ESD EMP) 单片机系统 效应 加固 静电放电产生的电磁辐射可产生很强的瞬态电磁脉冲(ESD EMP)。随着电子技术的高速发展,ESD EMP的危害也日趋严重。ESD EMP具有峰值大、频带宽等特点,作为近场危害源,对各种数字化设备的危害程序可与核电磁脉冲(NEMP)及雷电电磁脉冲(L
[工业控制]
STM8单片机无线315&433脉宽自适应_通用解码程序
单片机源程序如下: /* RFINT不能用PA1 要改板 改在PC6 */ /* Includes ------------------------------------------------------------------*/ #define MAIN_C #include ALL.h void Delay(u16 nCount) { /* Decrement nCount value */ while (nCount != 0) { nCount--; } } //10ms定时中断初始 在PWM时可更改 void TIME1_CONFIG(void) { /* Init TIMER 1 *
[单片机]
51单片机专业名词解释
PC = progammer counter //程序计数器 ACC = accumulate //累加器 PSW = progammer status word //程序状态字 SP = stack point //堆栈指针 DPTR = data point register //数据指针 寄存器 IP = interrupt priority //中断优先级 IE = interrupt enable // 中断使能 TMOD = timer mode //定时器 方式 (定时器/计数器 控制寄存器) ALE = alter (变更,可能是) PSEN = progammer saving enable //程序存储器使能(选
[单片机]
浅析FPGA车用MCU设计方案
  在 汽车电子 中广为采用的微控制器( MCU )正快速面临时间和成本的压力。使用MCU的主要优势一直以来都是‘创造具有高性价比的高阶系统整合’。然而,在此一优势之下,有一些与元件本身相关的潜在成本是超乎于其单价水平的。例如,若选用的元件无法创造所需特性,则必须增加外部逻辑、软体或其它整合元件。   再者,目前汽车终端市场对于需求的变化屡见不鲜,以至MCU很快就变得不适用;许多具有专门特性以及固定专用介面数量的MCU,经过短暂的评估后即无法满足市场需求。因此,系统供应商不得不重新设计硬体及编写相关软体,在某些情况下,甚至必须更换处理器核心。   MCU的困境   MCU制造商正被迫面对会为整个市场带来巨大影响的挑战。MCU是针对
[嵌入式]
基于单片机的汽车中网扫描灯设计
0 引言 LED产业的迅猛发展给照明和装饰都带来了不小的冲击,特别是LED与汽车的结合更是当前的热门话题。汽车中的阅读灯、示宽灯、刹车灯,甚至照明大灯都渐渐出现了LED的身影。当然作为装饰用的仪表灯,扫描灯和底盘灯也不甘落后,本文介绍了一种LED扫描灯的设计和制作。 1 系统构成 本系统由高亮LED灯条、汽车中网扫描灯控制器构成。控制器中又包含逻辑控制(单片机最小系统)部分、电源供电部分、电源驱动部分和电路延时部分。具体框图如图1所示。 2 线路设计 图2是本设计的逻辑控制部分,采用经典的8051单片机最小系统,型号为STC89C52RC,STC系列的单片机最方便的是只留出P3.0及P3.1的引脚插针,就可以通
[单片机]
基于<font color='red'>单片机</font>的汽车中网扫描灯设计
单片机运行速度更快一些
本文就如何提高单片机的运行速度与读者们展开探讨。 1 问题的提出 1.1 硬件技术背景 单片机的频率越来越高,RAM的访问速度也来也快,但单片机系统的效率并不一定成比例的提高。   目前,使用的主流单片机有80386EX(50MHz,外部地址/数据总线16位)、MPC860T(66MHz,外部地址/数据总线32位)以及DS80C32(25MHz,外部地址/数据总线8位);使用的SDRAM有HY57系列、K416系列(访问速度100MHz或133MHz);使用的SRAM 如IDT71024、IDT7256(50MHz);使用的Flash有AT29C512、SST39VF040、AT29C010(8MHz或15MHz)等。可见
[单片机]
让<font color='red'>单片机</font>运行速度更快一些
80c51是几位单片机 80c51单片机有几个中断源
  80c51是几位单片机   80C51是一种8位微处理器,也被称为8051,由Intel公司推出。它是最早的商用单片机之一,由于它的简单易用、灵活可靠,被广泛应用于许多嵌入式系统中。在80C51系列中,最常见的型号包括AT89C51和AT89S52等。   80c51单片机寻址范围有多少   80C51单片机的寻址范围取决于其具体的型号和存储器结构。在最常见的AT89C51和AT89S52型号中,其寻址范围如下:   内部RAM寻址范围:0x00-0x7F(128字节)   内部ROM寻址范围:0x0000-0xFFFF(64KB)   特殊功能寄存器(SFR)寻址范围:0x80-0xFF(128字节)   外部扩展RAM
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved