单片机C语言左移和右移漫谈

发布者:CaptivatingEyes最新更新时间:2016-09-13 来源: eefocus关键字:单片机  C语言  左移和右移 手机看文章 扫描二维码
随时随地手机看文章
#include

#define uchar unsigned char     
#define uint unsigned int
void main(void)
{
    uchar a;
    a=0x01;
    a=a<<1;
}
在这段程序中,看起来没有什么问题,但是编译后不能生成代码

#include
#define uchar unsigned char
#define uint unsigned int
void main(void)
{
    volatile uchar a;
    a=0x01;
    a=a<<1;
}
改成这样后就能生成代码,但是生成的代码为
MOV      08H,#01H
MOV      A,08H
ADD      A,A
MOV      08H,A
这里我本来想象中应该有RL A这条指令的,但是没有。

当程序改成下面的时
#include
#define uchar unsigned char
#define uint unsigned int
void main(void)
{
    volatile uchar a;
    a=0x01;
    a=a<<2;
}
生成的代码是
MOV      08H,#01H
MOV      A,08H
ADD      A,A
ADD      A,A
MOV      08H,A
改成a=a<<3;时
MOV      08H,#01H
MOV      A,08H
RLC      A
RLC      A
RLC      A
ANL      A,#0F8
MOV      08H,A
这里有点搞不懂了,“<<”和“>>”,到底是否带进位移动。

再来看看这个
#include
#define uchar unsigned char
#define uint unsigned int
void main(void)
{
    volatile uchar a;
    a=0x01;
    CY=1;
    a=a>>1;
}
生成的代码是
MOV      08H,#01H
MOV      A,08H
CLR      C
RRC      A
MOV      08H,A
从这里看来,“<<”和“>>”应该是带进位的。但是不能把C里原来的值移进去。而且移到C里的数会丢掉,这里千万小心,例如a=0x80; a=a<<1;现在这里a=0x00了,1被移到C里丢掉。

再来看看_crol_和_cror_,这里要程序开头要包含#include
#include
#include
#define uchar unsigned char
#define uint unsigned int
void main(void)
{
    volatile uchar a;
    a=0x01;
    a=_crol_(a,1);
}
生成的代码为
     MOV      08H,#01H
     MOV      R7,08H
     MOV      R0,#01H
     MOV      A,R7
     INC      R0
     SJMP     L1
L1:RL       A
     DJMZ     R0,L1
     MOV      08H,A
这里可以看出_crol_和_cror_是不带C移动的,_iror_和_irol_是一样的。

关键字:单片机  C语言  左移和右移 引用地址:单片机C语言左移和右移漫谈

上一篇:采用P1口作为输入口和输出口
下一篇:流水灯实验(更简单的)

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

STC单片机用户应用程序区ISP监控程序区的区别
用户应用程序区(AP区): 是指用户自己编写的程序区 ISP监控程序区: ISP区是指芯片出厂时就已经固化在单片机内部的一段程序,STC单片机可以进行ISP串行下载程序,这就是因为芯片在出厂时已经在单片机内部固化了ISP引导码,程序首次上电时先会从ISP区开始执行代码,体现在实际实验中时,就是我们在下载程序时,先要点击下载软件界面上的下载,然后再开启单片机电源,当单片机检测到上位机有下载程序的需要时,便启用ISP下载功能给单片机下载程序。若经过短暂的时间没有检测到上位机有下载程序的需求,单片机便会从用户应用程序区(AP区)开始执行代码。
[单片机]
无线充电势起,MCU厂商争先切入
微控制器(MCU)厂纷纷抢进行动电源及无线充电领域,将间接受惠行动装置市场高成长商机。台系IC设计厂近年随着在智慧手机及平板电脑市场布局逐步开花结果,营运普遍顺利好转;其中,以手机晶片厂联发科最具代表性。其余,面板驱动IC厂旭曜、联咏、网通晶片厂瑞昱及光电类比IC厂凌耀等,拓展行动装置市场也有不错斩获,营运多有不错表现。   MCU厂过去主要锁定小家电、消费性电子、电脑周边及医疗等产品市场,多无缘直接自近年高成长的行动装置市场中受惠。仅新唐科技MCU曾切入平板电脑触控及嵌入式控制器应用市场,是少数成功切入行动装置产品市场的MCU厂。   不过,随着行动装置市场高度成长,加上智慧手机及平板电脑朝向多核心及大萤幕发展,耗电量明
[电源管理]
无线充电势起,<font color='red'>MCU</font>厂商争先切入
AVR单片机外部中断INT0示例
*AVR单片机外部中断INT0示例程序晶振为1 MHz INT0最好接一个4.7K的上拉电阻,按键对地有效 没有使用延时/通信语句,所以使用内部/外部时钟都可以 每按动INT0按键一次,PD3的电平就翻转一次 本例子没有考虑太多的按键防抖动功能*/ #include mega48.h interrupt void INT0_isr(void) //INT0的中断向量是2,请参考M48数据手册的48页 { PORTD.3=~PORTD.3; //电平取反 EIFR|=1; //清除INT0中断触发标记,防止按键抖动 } void main(voi
[单片机]
在遥控编程系统中应用微控制器实现嵌入式ISP的软硬件设计
测温结果数据比较 1 XC9500系列CPLD器件及其ISP性能 XC9500系列CPLD器件是由多个功能块(FB)和IO块(IOB)组成,可用开关矩阵Fast CONNECT完全互连的子系统,IOB提供输入和输出的缓冲,每个FB提供具有36个输入和18个输出的可编程逻辑容量。Fast CONNECT开关矩阵连接所有的FB的输出和FB的输入,对于每个FB,12至18个(取决于封装的引脚数)输出和有关的输出使能信号直接驱动IOB。 所有XC9500系列CPLD器件都是系统内编程的,最小达一万次编程/擦除次数,支持扩充的IEEE 1149.1边界扫描标准,XC9500的结构特性着重满足系统内编程的要求,增强的引脚锁定能力
[单片机]
在遥控编程系统中应用<font color='red'>微控制器</font>实现嵌入式ISP的软硬件设计
单片机手动计数器制作
1.实验任务 利用AT89S51单片机来制作一个手动计数器,在AT89S51单片机的P3.7管脚接一个轻触开关,作为手动计数的按钮,用单片机的P2.0-P2.7接一个共阴数码管,作为00-99计数的个位数显示,用单片机的P0.0-P0.7接一个共阴数码管,作为00-99计数的十位数显示;硬件电路图如图19所示。 2.电路原理图 图4.10.1 3.系统板上硬件连线 (1.把“单片机系统”区域中的P0.0/AD0-P0.7/AD7端口用8芯排线连接到“四路静态数码显示模块”区域中的任一个a-h端口上;要求:P0.0/AD0对应着a,P0.1/AD1对应着b,……,P0.7/AD7对应着h。 (2.把“单片机系统”区
[单片机]
<font color='red'>单片机</font>手动计数器制作
16位Σ-Δ A/D转换器AD7705与微控制器的接口设计
   AD7705是 AD公司新推出的16位Σ-ΔA/D转换器。器件包括由缓冲器和增益可编程放大器(PGA)组成的前端模拟调节电路,Σ-Δ调制器,可编程数字滤波器等部件。能直接将传感器测量到的多路微小信号进行A/D转换。这种器件还具有高分辨率、宽动态范围、自校准、优良的抗噪声性能以及低电压低功耗等特点,非常适合仪表测量、工业控制等领域的应用。它采用三线串行接口,有两个全差分输入通道,能达到0.003%非线性的16位无误码数据输出,其增益和数据输出更新率均可编程设定,还可选择输入模拟缓冲器,以及自校准和系统校准方式。工作电压3 V或5 V。3 V电压时,最大功耗为1 mW,等待模式下电源电流仅为8 μA。    1 内部结构
[模拟电子]
51单片机4种工作方式及应用示例
一、方式0: 二、方式1 三、方式2 四、方式3
[单片机]
51<font color='red'>单片机</font>4种工作方式及应用示例
用PIC16F87X单片机实现高分辨率频率计的一种方法
1 引言 随着电子技术的迅速发展,以单片机为控制核心的控制器件,已经全面渗透到测试仪器和计量检定的各个方面。同时,频率计作为一种常用工具,在工程技术和无线电测量、计量等领域的应用十分广泛。本文介绍了一种以PIC16F87X系列单片机为控制器的高分辨率频率计的实现方法。 该方法设计的频率计主要用来测量脉冲频率。它采用LCD图形液晶显示,清晰度高,可视范围广,可外接晶体频率源,具有测量速度快、分辨率高的优点。 2 设计原理 PIC16F877A单片机内部集成有捕捉/比较/脉宽调制PWM (CCP)模块。当CCP工作在捕捉(capture)方式时,可捕捉外部输入脉冲的上升沿或下降沿,并产生相应的中断。 PIC16F877A单片
[应用]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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