打印

C51语言下不带进位模拟移位指令

[复制链接]
3524|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
tcc8073|  楼主 | 2010-7-14 17:10 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
板凳
hotpower| | 2010-7-15 02:22 | 只看该作者
惭愧,搜索结果的二楼真是出墙了,在此惭愧之~~~

使用特权

评论回复
地板
xuyiyi| | 2010-7-15 06:51 | 只看该作者

《Keil C51红杏出墙记》

请问大师,什么时候能搜到《hotpower红杏出墙记》?

使用特权

评论回复
5
hotpower| | 2010-7-15 07:04 | 只看该作者
估计把MCU/ARM/DSP正和后就会出现的,而非HotPower自己出墙了~~~
男人嘛,不留神出墙一次也是应该原谅的~~~

使用特权

评论回复
6
hotpower| | 2010-7-15 07:12 | 只看该作者
哈哈~~~6年前的痕迹,刀客、zyg、老树等也失踪多年了

《Keil C51红杏出墙记》节选 (ZT)关键词Keil    C51    hotpower    hotos                                          
《Keil C51红杏出墙记》节选
HotPower 发表于 6/26/2004 7:51:36 PM 侃单片机 ←返回版面

/*--------------------------------------------------------------------------
  伪本征函数——Keil C51头文件INTRINS.H的扩容工程     第三版
根据HotPower的“同名小说《Keil C51红杏出墙记》”改编
                                           2004.6.8 作于西安大雁塔村大队部
--------------------------------------------------------------------------*/
/*--------------------------------------------------------------------------
本文件名: HotIns.H
---------------------------------------------------------------------------*/
#ifndef __HotIns_H__
#define __HotIns_H__


/*------------------------------------------------------------------------*/
#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
/*------------------------------------------------------------------------*/

/*--------------------------------------------------------------------------------------------
伪本征函数——Keil C51头文件INTRINS.H的扩容工程(第二版)头文件HotIns.H扩充部分
--------------------------------------------------------------------------------------------*/

/*------------------------------------------------------------------------------------------*/
#define _rrca_()          CY   = ACC & 0x01           //装载代码RRC A
#define _rlca_()          CY   = ACC & 0x80           //装载代码RLC A
/*------------------------------------------------------------------------------------------*/
#define _rrcr_(RX)        CY   = RX  & 0x01; RX = ACC //装载代码RRC RX
#define _rlcr_(RX)        CY   = RX  & 0x80; RX = ACC //装载代码RLC 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
/*------------------------------------------------------------------------------------------*/

/*--------------------------------------------------------------------------------------------
伪本征函数——Keil C51头文件INTRINS.H的扩容工程(第三版)头文件HotIns.H扩充部分   2004.6.8
--------------------------------------------------------------------------------------------*/

/*------------------------------------------------------------------------------------------*/
#define _icall_(ADDR)  (*(void (*)())((void *)ADDR))();//通用直接或间接调用函数_icall_()声明
/*------------------------------------------------------------------------------------------*/

/*------------------------------------------------------------------------------------------*/
#define _db_(TABNAME, TAB) code unsigned char TABNAME[]={TAB}//装载数据或代码_db_()声明
/*------------------------------------------------------------------------------------------*/

/*------------------------------------------------------------------------------------------*/
sfr16 DPTR     = 0x82;//声明C51标准的16位寄存器DPTR, 以便实现汇编级的命令跳转
/*-------------------------------------------------------------------------------------------*/
#define _lcall_(ADDR) DPTR = (void *)ADDR;_icall_(__ljmp_code__ + 4);//直接调用函数_lcall_()声明
#define _ljmp_(ADDR)  DPTR = (void *)ADDR;_icall_(__ljmp_code__);     //直接跳转函数_ljmp_()声明
_db_(__ljmp_code__, "\x15\x81\x15\x81\xc0\x82\xc0\x83\x22");         //装载数据DB 0x15..0x22
/*--------------------------------------------------------------------------------------------
装载代码   __ljmp_code__:  DEC   SP;//_ljmp_()函数入口,调整SP以免程序崩溃
                           DEC   SP
                           PUSH  DPL;//_lcall_()函数入口
                           PUSH  DPH
                             RET
--------------------------------------------------------------------------------------------*/

/*------------------------------------------------------------------------------------------*/
#define _intjmp_(ADDR) DPTR = (void *)ADDR;_icall_(__reset_code__) //中断隐身函数_intjmp_()声明
#define _reset_() DPTR = __reset_code__ + 5;_icall_(__reset_code__) //软复位函数_reset_()声明
_db_(__reset_code__, "\xc0\x82\xc0\x83\x32\xe4\xc0\xe0\xc0\xe0\x32");//装载数据DB 0xc0..0x32
/*--------------------------------------------------------------------------------------------
装载代码   __reset_code__: PUSH  DPL;//非典的软复位函数入口(执行2次RETI)
                           PUSH  DPH
                             RETI;//_intjmp_()函数调用到此为止中断退出并跳入子程序隐身(让出中断)
                           CLR   A;//经典的软复位函数入口(执行1次RETI)
                           PUSH  ACC
                           PUSH  ACC
                           RETI;//_reset_()函数调用从此处跳入0x0000开始执行
/*------------------------------------------------------------------------------------------*/
#define _daa_() _icall_(__daa_code__)                             //十进制调整函数_daa_()声明
/*------------------------------------------------------------------------------------------*/
_db_(__daa_code__, "\xd4\x22");                                   //装载数据DB 0xd4,0x22
/*--------------------------------------------------------------------------------------------
装载代码   __daa_code__:   DA      A
                             RET
--------------------------------------------------------------------------------------------*/

/*------------------------------------------------------------------------------------------*/
#define _swapr_(RX) ACC = RX; _swapa_(); RX = ACC;        //变  量半字节交换函数_swapr_()声明
#define _swapa_() _icall_(__swapa_code__);                //累加器半字节交换函数_swapa_()声明
_db_(__swapa_code__, "\xc4\x22");                                      //装载数据DB 0xc4,0x22
/*--------------------------------------------------------------------------------------------
装载代码  __swapa_code__:  SWAP  A
                           RET
--------------------------------------------------------------------------------------------*/
#endif



签名:

[tr][/tr]
●█〓██▄▄▄▄▄▄ ●●●●●●→
▄▅██████▅▄▃▂ 灌水入坛,传播非典!
██████████████
◥⊙▲⊙▲⊙▲⊙▲⊙▲⊙▲◤




相关帖子

使用特权

评论回复
7
seabada| | 2010-7-15 16:38 | 只看该作者
没看懂啊:L

使用特权

评论回复
8
hotpower| | 2010-7-15 19:01 | 只看该作者
哈哈~~~能看懂就好了~~~

使用特权

评论回复
9
xuyiyi| | 2010-7-15 20:49 | 只看该作者
老HOT大叔在《Keil C51红杏出墙记》中设定了那么多预处理指令#define,定义了那么多位操作指令,难道要搞1位机?PLC?
实在想不出大叔如此 红杏出墙 有何用意,特请教大叔。

使用特权

评论回复
10
tcc8073|  楼主 | 2010-7-15 21:40 | 只看该作者
我只是写了几句字节移位C语句而已,怎么讨论上了出墙

使用特权

评论回复
11
一休小妹| | 2010-7-16 18:09 | 只看该作者
请叫我"糖糖"。谢谢。

使用特权

评论回复
12
李冬发| | 2010-7-16 18:27 | 只看该作者
LZ看不懂吗?《出墙》算法效率远高于你的算法。
当然,除非你是高手,要不出墙总不是好事。

使用特权

评论回复
13
tcc8073|  楼主 | 2010-7-16 22:07 | 只看该作者
本帖最后由 tcc8073 于 2010-7-16 22:09 编辑

我没有仔细看,我设计东西尽量简单可靠好懂,设计的目的是为了稳定实用,要效率我就用汇编,我不是高手,一日为徒终生为徒,请多指教

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:诚信,务实,专业,创新

179

主题

1359

帖子

7

粉丝