Wavemcu.com - 健波硬件工作室

匿名投稿 投稿指南 RSS订阅 站长资讯通告:     2008年8月16日:新站点正在测试当中,如发现问题,请E-mail给站长!  [EasyWave  2008年8月16日]        
搜索: 您现在的位置: 健波硬件工作室 >> 编程器家园 >> Keil C编程 >> 正文

Keil C51头文件Intris.h的扩容工程

2008-06-10 13:50:46 来源:本站原创 作者:佚名 【 点击:

核心提示:本文将详解Keil C51头文件Intris.h的扩容工程

/*--------------------------------------------------------
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的扩容工程
-----------------------------------------------------------------*/

#define _setc_() CY = 1
#define _clrc_() CY = 0
#define _setb_(RBIT) RBIT = 1
#define _clrb_(RBIT) RBIT = 0
#define _clra_() ACC = 0
#define _movcb_(RBIT) CY = RBIT
#define _movbc_(RBIT) RBIT = CY
#define _movra_(RX) RX = ACC
#define _movar_(RX) ACC = RX
#define _movb0_(RBIT, RX) RBIT = RX & 0x01 //用于取RX的最低位
#define _movb7_(RBIT, RX) RBIT = RX & 0x80 //用于取RX的最高位
#define _rrca_() CY = ACC & 0x01 //产生RRC A指令
#define _rlca_() CY = ACC & 0x80 //产生RLC A指令
#define _rrcar_(RX) CY = RX & 0x01
#define _rlcar_(RX) CY = RX & 0x80
#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
/*------------------------------------------------------------------------*/

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

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


/*--------------------------------------------------------------------------
寄存器带进位右移指令 RRC REG
#define _rrcar_(RX) CY = RX & 0x01
#define _movra_(RX) RX = ACC
/*--------------------------------------------------------------------------
例:
C51程序
unsigned char i;
i = 0x55;
_setc_();//CY=1
_rrcar_(i);//i=0x55,ACC=0xaa,CY=1
_movra_(i);//或用i = ACC;//i=0xaa,ACC=0xaa,CY=1
汇编代码
mov r7,#055h
setb c
mov a,r7
rrc a
mov r7,a
--------------------------------------------------------------------------*/

/*--------------------------------------------------------------------------
寄存器带进位右移指令 RRC REG
#define _rlcar_(RX) CY = RX & 0x80
#define _movra_(RX) RX = ACC
例:
C51程序
unsigned char i;
i = 0x55;
_setc_();//CY=1
_rlcar_(i);//i=0x55,ACC=0xab,CY=0
_movra_(i);//或用i = ACC;//i=0xaa,ACC=0xaa,CY=0
汇编代码
mov r7,#055h
setb c
mov a,r7
rlc a
mov r7,a
--------------------------------------------------------------------------*/

/*--------------------------------------------------------------------------
伪本征函数"汇编级"应用
----------------------------------------------------------------------------
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
----------------------------------------------------------------------------
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
mov r7,a
ret
----------------------------------------------------------------------*/

Tags: Keil  
责任编辑:EasyWave
  • 调用插件
  • 发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口】   
    姓 名: * Oicq:
    评 分: 1分 2分 3分 4分 5分
    评论内容:
  • 严禁发表危害国家安全、政治、黄色淫秽等内容的评论。
  • 用户需对自己在使用健波硬件工作室服务过程中的行为承担法律责任。
  • 本站管理员有权保留或删除评论内容。
  • 评论内容只代表网友个人观点,与本网站立场无关。
  • 关于我们 - 联系我们 - 广告服务 - 友情链接 - 网站地图 - 版权声明 - 帮助