伪本征函数—Keil C51头文件INTRINS.H(第二版)(hotpower)

更新时间:2023-08-28 04:07:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

伪本征函数—Keil C51头文件INTRINS.H(第二版)(hotpower)

伪本征函数—Keil C51头文件INTRINS.H(第二版)(hotpower)

作者:未知 来源:大虾电子 点击数:

36 更新时间:2007年03月05日

/*-------------------------------------------------------------------------- INTRINS.H

Intrinsic functions for C51.

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

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

#ifndef __INTRINS_H__

#define __INTRINS_H__

extern void _nop_ (void);

extern bit _testbit_ (bit);

extern unsigned char _cror_ (unsigned char, unsigned char);

extern unsigned int _iror_ (unsigned int, unsigned char);

extern unsigned long _lror_ (unsigned long, unsigned char);

extern unsigned char _crol_ (unsigned char, unsigned char);

extern unsigned int _irol_ (unsigned int, unsigned char);

extern unsigned long _lrol_ (unsigned long, unsigned char);

extern unsigned char _chkfloat_(float);

#endif

/*-------------------------------------------------------------------------- 伪本征函数——Keil C51头文件INTRINS.H的扩容工程

作者:HotPower@http://www.77cn.com.cn 2004.5.27 第二版

伪本征函数—Keil C51头文件INTRINS.H(第二版)(hotpower)

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

/*------------------------------------------------------------------------*/ #define _setc_() CY = 1

#define _clrc_() CY = 0

#define _setb_(RBIT) RBIT = 1

#define _clrb_(RBIT) RBIT = 0

#define _clra_() ACC = 0

/*------------------------------------------------------------------------*/ #define _xorr_(RX) RX ^= RX //用于取奇偶位P,且RX=0 #define _andr_(RX) RX &= RX //用于取奇偶位P,且RX=不变 #define _orr_(RX) RX |= RX //用于取奇偶位P,且RX=不变 #define _notr_(RX) RX =~RX

/*------------------------------------------------------------------------*/ #define _movra_(RX) RX = ACC

#define _movar_(RX) ACC = RX

#define _movcb_(RBIT) CY = RBIT

#define _movbc_(RBIT) RBIT = CY

#define _movb0_(RBIT, RX) RBIT = RX & 0x01 //用于取RX的最低位 #define _movb7_(RBIT, RX) RBIT = RX & 0x80 //用于取RX的最高位 #define _movc0_(RX) CY = RX & 0x01

#define _movc7_(RX) CY = RX & 0x80

/*------------------------------------------------------------------------*/ #define _rrca_() CY = ACC & 0x01 //产生RRC A指令 #define _rlca_() CY = ACC & 0x80 //产生RLC A指令

/*------------------------------------------------------------------------*/ #define _rrcr_(RX) CY = RX & 0x01; RX = ACC //产生RRC RX指令

伪本征函数—Keil C51头文件INTRINS.H(第二版)(hotpower)

#define _rlcr_(RX) CY = RX & 0x80; RX = ACC //产生RLC RX指令

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

/*-------------------------------------------------------------------------- 累加器带进位右移指令 RRC A #define _rrca_() CY = ACC & 0x01 汇编代码 rrc a

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

/*-------------------------------------------------------------------------- 累加器带进位左移指令 RLC A #define _rlca_() CY = ACC & 0x80

汇编代码 rlc a

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

/*-------------------------------------------------------------------------- 寄存器带进位右移指令 RRC REG #define _rrcr_(RX) CY = RX & 0x01; RX = ACC

汇编代码 mov a,RX

rrc a

mov RX,a

/*-------------------------------------------------------------------------- 例:

C51程序

unsigned char i;

i = 0x55;

_setc_();//CY=1

_rrcr_(i);//i=0xaa,ACC=0xaa,CY=1

伪本征函数—Keil C51头文件INTRINS.H(第二版)(hotpower)

汇编代码

mov r7,#055h

setb c

mov a,r7

rrc a

mov r7,a

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

/*-------------------------------------------------------------------------- 寄存器带进位左移指令 RLC REG #define _rlcar_(RX) CY = RX & 0x80; RX = ACC

汇编代码 mov a,RX

rlc a

mov RX,a

/*-------------------------------------------------------------------------- 例:

C51程序

unsigned char i;

i = 0x55;

_setc_();//CY=1

_rlcr_(i);//i=0x55,ACC=0xab,CY=0

汇编代码

mov r7,#055h

setb c

mov a,r7

rlc a

mov r7,a

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

伪本征函数—Keil C51头文件INTRINS.H(第二版)(hotpower)

伪本征函数"汇编级"应用

----------------------------------------------------------------------------

1.写串行数据

C51程序

void writedata(unsigned char val)

{

_movar_(val);//或用ACC = val;

for (val = 8; val > 0; val--)

{

_clrb_(TXD);//或用TXD = 0;

_rrca_();

_movbc_(RXD);//或用RXD = CY;

_setb_(TXD);//或用TXD = 1;

_nop_();

}

}

A51代码

writedata:

mov a,r7

mov r7,#8

writedata_loop:

clr txd

rrc a

mov rxd,c

setb txd

nop

djnz r7,writedata_loop

ret

伪本征函数—Keil C51头文件INTRINS.H(第二版)(hotpower)

2.读串行数据

C51程序

unsigned char readdata(void)

{

unsigned char val;

for (val = 8; val > 0; val--)

{

_clrb_(TXD);//或用TXD = 0;

_nop_();

_movcb_(RXD);//或用CY = RXD;

_rrca_();

_setb_(TXD);//或用TXD = 1;

_nop_();

}

_movra_(val);//或用val = ACC;

return val;

}

A51代码

readdata:

mov r7,#8

readdata_loop:

clr txd

nop

mov c,rxd

rrc a

setb txd

nop

djnz r7,readdata_loop

伪本征函数—Keil C51头文件INTRINS.H(第二版)(hotpower)

mov r7,a

ret

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

本文来源:https://www.bwwdw.com/article/uwii.html

Top