#include #include unsigned moveright(unsigned value, int n);

unsigned moveleft(unsigned value, int n);

main()

{

unsigned a;

int n;

SCON = 0x50;

TMOD |= 0x20;

TH1 = 0xf3;

TR1 = 1;

TI = 1;

printf("请数入一个8进制数:");

scanf("%o", &a);

printf("请输入要位移的位数:");

scanf("%d", &n);

if(n>0)

{

printf("循环右移的结果为:%o\n", moveright(a,n));

}

else

{

n=-n;

printf("循环左移的结果为:%o\n", moveleft(a,n));

}

}

unsigned moveright(unsigned value, int n)        //循环右移

{

unsigned z;

z=(value>>n)|(value

}

unsigned moveleft(unsigned value, int n)         //循环左移

{

unsigned z;

z=(value<>(16-n));

return z;

}

/*--------------------------------------------------------------------------

STDIO.H

Prototypes for standard I/O functions.

Copyright (c) 1988-2002 Keil Elektronik GmbH and Keil Software, Inc.

All rights reserved.

--------------------------------------------------------------------------*/

#ifndef __STDIO_H__

#define __STDIO_H__

#ifndef EOF

#define EOF -1

#endif

#ifndef NULL

#define NULL ((void *) 0)

#endif

#ifndef _SIZE_T

#define _SIZE_T

typedef unsigned int size_t;

#endif

#pragma SAVE

#pragma REGPARMS

extern char _getkey (void);

extern char getchar (void);

extern char ungetchar (char);

extern char putchar (char);

extern int printf   (const char *, ...);

extern int sprintf  (char *, const char *, ...);

extern int vprintf  (const char *, char *);

extern int vsprintf (char *, const char *, char *);

extern char *gets (char *, int n);

extern int scanf (const char *, ...);

extern int sscanf (char *, const char *, ...);

extern int puts (const char *);

#pragma RESTORE

#endif

/*--------------------------------------------------------------------------

REG51.H

Header file for generic 80C51 and 80C31 microcontroller.

Copyright (c) 1988-2002 Keil Elektronik GmbH and Keil Software, Inc.

All rights reserved.

--------------------------------------------------------------------------*/

#ifndef __REG51_H__

#define __REG51_H__

/*  BYTE Register  */

sfr P0   = 0x80;

sfr P1   = 0x90;

sfr P2   = 0xA0;

sfr P3   = 0xB0;

sfr PSW  = 0xD0;

sfr ACC  = 0xE0;

sfr B    = 0xF0;

sfr SP   = 0x81;

sfr DPL  = 0x82;

sfr DPH  = 0x83;

sfr PCON = 0x87;

sfr TCON = 0x88;

sfr TMOD = 0x89;

sfr TL0  = 0x8A;

sfr TL1  = 0x8B;

sfr TH0  = 0x8C;

sfr TH1  = 0x8D;

sfr IE   = 0xA8;

sfr IP   = 0xB8;

sfr SCON = 0x98;

sfr SBUF = 0x99;

/*  BIT Register  */

/*  PSW   */

sbit CY   = 0xD7;

sbit AC   = 0xD6;

sbit F0   = 0xD5;

sbit RS1  = 0xD4;

sbit RS0  = 0xD3;

sbit OV   = 0xD2;

sbit P    = 0xD0;

/*  TCON  */

sbit TF1  = 0x8F;

sbit TR1  = 0x8E;

sbit TF0  = 0x8D;

sbit TR0  = 0x8C;

sbit IE1  = 0x8B;

sbit IT1  = 0x8A;

sbit IE0  = 0x89;

sbit IT0  = 0x88;

/*  IE   */

sbit EA   = 0xAF;

sbit ES   = 0xAC;

sbit ET1  = 0xAB;

sbit EX1  = 0xAA;

sbit ET0  = 0xA9;

sbit EX0  = 0xA8;

/*  IP   */

sbit PS   = 0xBC;

sbit PT1  = 0xBB;

sbit PX1  = 0xBA;

sbit PT0  = 0xB9;

sbit PX0  = 0xB8;

/*  P3  */

sbit RD   = 0xB7;

sbit WR   = 0xB6;

sbit T1   = 0xB5;

sbit T0   = 0xB4;

sbit INT1 = 0xB3;

sbit INT0 = 0xB2;

sbit TXD  = 0xB1;

sbit RXD  = 0xB0;

/*  SCON  */

sbit SM0  = 0x9F;

sbit SM1  = 0x9E;

sbit SM2  = 0x9D;

sbit REN  = 0x9C;

sbit TB8  = 0x9B;

sbit RB8  = 0x9A;

sbit TI   = 0x99;

sbit RI   = 0x98;

#endif

$NOMOD51

;------------------------------------------------------------------------------

;  This file is part of the C51 Compiler package

;  Copyright (c) 1988-2002 Keil Elektronik GmbH and Keil Software, Inc.

;------------------------------------------------------------------------------

;  STARTUP.A51:  This code is executed after processor reset.

;

;  To translate this file use A51 with the following invocation:

;

;     A51 STARTUP.A51

;

;  To link the modified STARTUP.OBJ file to your application use the following

;  BL51 invocation:

;

;     BL51 , STARTUP.OBJ ;

;------------------------------------------------------------------------------

;

;  User-defined Power-On Initialization of Memory

;

;  With the following EQU statements the initialization of memory

;  at processor reset can be defined:

;

;               ; the absolute start-address of IDATA memory is always 0

IDATALEN        EQU     80H     ; the length of IDATA memory in bytes.

;

XDATASTART      EQU     0H      ; the absolute start-address of XDATA memory

XDATALEN        EQU     0H      ; the length of XDATA memory in bytes.

;

PDATASTART      EQU     0H      ; the absolute start-address of PDATA memory

PDATALEN        EQU     0H      ; the length of PDATA memory in bytes.

;

;  Notes:  The IDATA space overlaps physically the DATA and BIT areas of the

;          8051 CPU. At minimum the memory space occupied from the C51

;          run-time routines must be set to zero.

;------------------------------------------------------------------------------

;

;  Reentrant Stack Initilization

;

;  The following EQU statements define the stack pointer for reentrant

;  functions and initialized it:

;

;  Stack Space for reentrant functions in the SMALL model.

IBPSTACK        EQU     0       ; set to 1 if small reentrant is used.

IBPSTACKTOP     EQU     0FFH+1  ; set top of stack to highest location+1.

;

;  Stack Space for reentrant functions in the LARGE model.

XBPSTACK        EQU     0       ; set to 1 if large reentrant is used.

XBPSTACKTOP     EQU     0FFFFH+1; set top of stack to highest location+1.

;

;  Stack Space for reentrant functions in the COMPACT model.

PBPSTACK        EQU     0       ; set to 1 if compact reentrant is used.

PBPSTACKTOP     EQU     0FFFFH+1; set top of stack to highest location+1.

;

;------------------------------------------------------------------------------

;

;  Page Definition for Using the Compact Model with 64 KByte xdata RAM

;

;  The following EQU statements define the xdata page used for pdata

;  variables. The EQU PPAGE must conform with the PPAGE control used

;  in the linker invocation.

;

PPAGEENABLE     EQU     0       ; set to 1 if pdata object are used.

;

PPAGE           EQU     0       ; define PPAGE number.

;

PPAGE_SFR       DATA    0A0H    ; SFR that supplies uppermost address byte

;               (most 8051 variants use P2 as uppermost address byte)

;

;------------------------------------------------------------------------------

; Standard SFR Symbols

ACC     DATA    0E0H

B       DATA    0F0H

SP      DATA    81H

DPL     DATA    82H

DPH     DATA    83H

NAME    ?C_STARTUP

?C_C51STARTUP   SEGMENT   CODE

?STACK          SEGMENT   IDATA

RSEG    ?STACK

DS      1

EXTRN CODE (?C_START)

PUBLIC  ?C_STARTUP

CSEG    AT      0

?C_STARTUP:     LJMP    STARTUP1

RSEG    ?C_C51STARTUP

STARTUP1:

IF IDATALEN <> 0

MOV     R0,#IDATALEN - 1

CLR     A

IDATALOOP:      MOV     @R0,A

DJNZ    R0,IDATALOOP

ENDIF

IF XDATALEN <> 0

MOV     DPTR,#XDATASTART

MOV     R7,#LOW (XDATALEN)

IF (LOW (XDATALEN)) <> 0

MOV     R6,#(HIGH (XDATALEN)) +1

ELSE

MOV     R6,#HIGH (XDATALEN)

ENDIF

CLR     A

XDATALOOP:      MOVX    @DPTR,A

INC     DPTR

DJNZ    R7,XDATALOOP

DJNZ    R6,XDATALOOP

ENDIF

IF PPAGEENABLE <> 0

MOV     PPAGE_SFR,#PPAGE

ENDIF

IF PDATALEN <> 0

MOV     R0,#LOW (PDATASTART)

MOV     R7,#LOW (PDATALEN)

CLR     A

PDATALOOP:      MOVX    @R0,A

INC     R0

DJNZ    R7,PDATALOOP

ENDIF

IF IBPSTACK <> 0

EXTRN DATA (?C_IBP)

MOV     ?C_IBP,#LOW IBPSTACKTOP

ENDIF

IF XBPSTACK <> 0

EXTRN DATA (?C_XBP)

MOV     ?C_XBP,#HIGH XBPSTACKTOP

MOV     ?C_XBP+1,#LOW XBPSTACKTOP

ENDIF

IF PBPSTACK <> 0

EXTRN DATA (?C_PBP)

MOV     ?C_PBP,#LOW PBPSTACKTOP

ENDIF

MOV     SP,#?STACK-1

; This code is required if you use L51_BANK.A51 with Banking Mode 4

; EXTRN CODE (?B_SWITCH0)

;               CALL    ?B_SWITCH0      ; init bank mechanism to code bank 0

LJMP    ?C_START

END

keil c语言 位运算,c51按位运算符相关推荐

  1. python字符位运算_python 字符串位运算-女性时尚流行美容健康娱乐mv-ida网

    女性时尚流行美容健康娱乐mv-ida网 mvida时尚娱乐网 首页 美容 护肤 化妆技巧 发型 服饰 健康 情感 美体 美食 娱乐 明星八卦 首页  > 高级搜索 [ python ] pyth ...

  2. python左移右移位运算_Python这些位运算的妙用,绝对让你大开眼界

    位运算的性能大家想必是清楚的,效率绝对高.相信爱好源码的同学,在学习阅读源码的过程中会发现不少源码使用了位运算.但是为啥在实际编程过程中应用少呢?想必最大的原因,是较为难懂.不过,在面试的过程中,在手 ...

  3. java 位运算_java学习之运算符与表达式(四)

    (6)位运算符 位运算是指对整数按二进制的位进行运算. 位运算用于整数或字符类型. 有7个:~(非).&(与).|(或).^(异或).<>(右移).>>>(无符号 ...

  4. python整数逆位运算_Python这些位运算的妙用,绝对让你大开眼界

    位运算的性能大家想必是清楚的,效率绝对高.相信爱好源码的同学,在学习阅读源码的过程中会发现不少源码使用了位运算.但是为啥在实际编程过程中应用少呢?想必最大的原因,是较为难懂.不过,在面试的过程中,在手 ...

  5. php的位运算,php的位运算详解

    php的运算符有一类是位运算的,本文主要和大家分享php的位运算详解,希望能帮助到大家. 一:& And按位与 $a&$b 将把二进制$a和二进制$b位数都为1的设为1,其他位为0 例 ...

  6. java取余位运算_使用位运算取余

    取余运算符为"%".但在以前,CPU采用如下方法计算余数(注意,该方法只对2的N次方数系有效): X & (2^N - 1) 举个例子: 9 % 4 //因为4是2^2:所 ...

  7. Java位运算总结:位运算用途广泛

    前天几天研究了下JDK的Collection接口,本来准备接着研究Map接口,可是一查看HashMap类源码傻眼咯,到处是位运算实现,所以我觉得还是有必要先补补位运算知识,不然代码看起来有点费力.今天 ...

  8. C语言位运算农夫过河,位运算常见操作和农夫过河问题(C++实现)

    二进制常见操作 二进制数中 1 的个数 解法 1 用 n & 1 判断最右边一位是否为 1,右移之后继续判断最右边一位,重复直到 n = 0.时间复杂度为 O(log2n) #include ...

  9. python 位运算与等号_Python 运算符

    和大多数语言一样,Python也有很多运算符,并且运算符跟其他语言的运算符大同小异接下来一一介绍: 算术运算符: 运算符描述实例 +加 - 两个对象相加a+b的输出结果是30 -减 - 得到复数或者一 ...

最新文章

  1. spring 学习—spring的相关概念(01)
  2. 【正则】匹配html标签里的内容,不含标签
  3. [USACO 4.2] 完美的牛栏
  4. js一键批量打印_为什么我推荐你用3D打印技术制造模具?
  5. php动态写入vue,Vue.js中使用动态组件的方法
  6. 嘉兴市计算机技工学校,嘉兴市高级技工学校2021年招生简章
  7. Android SQLite实现query顺序、倒叙查询
  8. 【JSP售票系统】JSP+SSH+MSSQL火车票铁路售票系统源码
  9. 一个屌丝程序猿的人生(四十九)
  10. matlab画图时候图例混乱解决方法
  11. opencv换证件照底色
  12. 支付服务整合支付宝沙箱
  13. 别瞎扯,元宇宙就是没有切实发展?
  14. 汽车电子——常见的英文缩写(更新中)
  15. 筱筱看博客(函数柯里化、节流防抖)
  16. 【汇正财经】什么是金融股?
  17. RGB(三色)灯配置常用颜色数据,用法讲解,基于C语言的程序讲解,七彩渐变程序讲解
  18. Java问题集锦--org.apache.maven.archiver.MavenArchiver.getManifest错误
  19. IJKPlayer问题集锦之不定时更新
  20. 关于我,一个简单低调的程序员

热门文章

  1. 综述 | 激光与视觉融合SLAM
  2. 如何把Windows CE安装文件下载到本地进行安装
  3. Java编写一个桌球_java练习题——简易的桌球游戏
  4. 华为的面试题 要求8分钟写出代码
  5. 微信小程序自动连接蓝牙电子秤
  6. SendEMail 发送邮件
  7. 张国荣《热·情》演唱会再现荧幕:AI修复解锁的经典与视听生活
  8. 5款开源网站流量统计应用程序
  9. android 手机充电慢,导致手机充电太慢的四大原因及解决方法【图文教程】
  10. 如何不被程序员(RD)们嫌弃--写给那些血气方刚的产品经理(PM)