keil c语言 位运算,c51按位运算符

#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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值