打印

脑筋急转弯,廉价MCU没有加法器,如何实现加法 功能?

[复制链接]
3274|19
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Cortex-M0|  楼主 | 2011-9-19 12:42 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 Cortex-M0 于 2011-9-19 16:18 编辑

前言:

有个小童鞋在问,某廉价MCU不但没有减法器,也没有加法器,如何做减法?
借此机会,俺突发奇想,来个脑筋急转弯,某些廉价MCU(如松翰SN56000系列)没有加法器如何做加法?


要求:
用MCU其他通用指令写出个加法器来,接下去做减法就超级简单啦,减数求补再相加即可。
关键是这个加法器,位数不限,4位8位16位32位均可,讲明实现原理即ok
在1分钟内写出者,为顶级电工。
在3分钟内写出者,为优秀电工。
在5分钟内写出者,为良好电工。
在10分钟内写出者,为合格电工。
超过10分钟未能写出者,建议重新回炉,或改行别当电工了~~~  :lol

相关帖子

沙发
liang7143| | 2011-9-19 12:53 | 只看该作者
本帖最后由 liang7143 于 2011-9-19 12:56 编辑

还是别用MCU了 直接数字电路 直接实现
先写真值表 然后例逻辑表达式
然后在化简 最后用与非门 或者 或非门实现

使用特权

评论回复
板凳
gx_huang| | 2011-9-19 12:58 | 只看该作者
哪个MCU没有加法指令?没有乘除的倒有不少。

使用特权

评论回复
地板
Dyn11| | 2011-9-19 13:07 | 只看该作者
有的人,一言一行,一个签名,让能让人想起令人恶心的某衣衣

使用特权

评论回复
5
雪山飞狐D| | 2011-9-19 13:15 | 只看该作者
本帖最后由 雪山飞狐D 于 2011-9-19 13:17 编辑

IO 口逻辑位操作,一进一出,串行或者并行都可以,还可以做流水线,嗯。30秒

使用特权

评论回复
6
szshawn2010| | 2011-9-19 14:06 | 只看该作者
一不小心,变成 顶级电工了 我*!

使用特权

评论回复
7
chunk| | 2011-9-19 16:01 | 只看该作者
加就是个异或,进位就是个与。

使用特权

评论回复
8
陈永宾0| | 2011-9-19 18:29 | 只看该作者
我    回    炉

使用特权

评论回复
9
sxhhhjicbb| | 2011-9-19 21:09 | 只看该作者
CPU是由运算器和控制器组成的....加法器是运算器中最原始的运算...可能没有吗?加没器占的资源是最低的了.比异或逻辑还低.

使用特权

评论回复
10
sysdriver| | 2011-9-19 22:15 | 只看该作者
我是小童鞋。。。

使用特权

评论回复
11
Cortex-M0|  楼主 | 2011-9-20 05:10 | 只看该作者
某些MCU(如松翰SN56000系列) ,  由于是语音专用芯片,很多指令派不上用场,因此,不带加法器也很正常~~~

使用特权

评论回复
12
ccmc| | 2011-9-20 08:26 | 只看该作者
PC就是一加法器

使用特权

评论回复
13
ST_Z| | 2011-9-20 14:29 | 只看该作者
廉价到没有加法的MCU,老子就不用了!

使用特权

评论回复
14
Cortex-M0|  楼主 | 2011-9-22 04:26 | 只看该作者
LS各位盆友答的都不错~~~

给个 51模拟加减法器 程序供参考~~~

                   ORG   0
                   MOV   R7,#0A8H                          
                   MOV   R5,#05FH
                   LCALL ADD_UINT8
                   NOP
                   NOP
                   NOP
                   MOV   R7,#0A8H                          
                   MOV   R5,#0EFH
                   LCALL SUB_UINT8
                   NOP
                   NOP
                   NOP
                   SJMP $



ADD_UINT8:
                   MOV   R0,#8                   ;R7 + R5 --> R7
ADD_1:
                   MOV   A,R7
                   XRL   A,R5
                   XCH   A,R7
                   ANL   A,R5
                   CLR   C
                   RLC   A
                   MOV   R5,A
                   DJNZ  R0,ADD_1
                   RET

SUB_UINT8:
                   MOV   A,R5                   ;R7 - R5 --> R7
                   CPL   A
                   INC   A
                   MOV   R5,A
                   LCALL ADD_UINT8
                   RET

                   END

使用特权

评论回复
15
ayb_ice| | 2011-9-22 08:07 | 只看该作者
首先1BIT的加法器大家应该都没有问题,其它的8~32位扩展就是了,注意进位处理

使用特权

评论回复
16
ccmc| | 2011-9-22 15:19 | 只看该作者
INC A 是不是也属于加法指令.....................

使用特权

评论回复
17
Cortex-M0|  楼主 | 2011-9-22 19:52 | 只看该作者
如认为增量指令 INC A 也属于加法指令.....................

完全可替代掉..............................

SUB_UINT8:
                   MOV   A,R5                   ;R7 - R5 --> R7
                   CPL   A
                   MOV   R5,A
                   MOV   A,#1
                   XCH   A,R7
                   MOV   R1,A
                   LCALL ADD_UINT8
                   MOV   A,R1
                   MOV   R5,A
                   LCALL ADD_UINT8
                   RET

                   END

使用特权

评论回复
18
ahgao| | 2011-9-22 22:16 | 只看该作者
悲哀啊,现在看51的汇编看不懂了。10几年不用51了。

楼主的程序中使用了C和带C移位,这个对于一个不支持加法的单片机而言似乎不可能存在的。

使用特权

评论回复
19
linbei1988| | 2011-9-23 10:07 | 只看该作者
廉价到加法都没有的东西,是不是本身就应该淘汰
这好像在问:哪个童鞋知道钻木取火的具体方法

使用特权

评论回复
20
Cortex-M0|  楼主 | 2011-9-23 12:33 | 只看该作者
悲哀啊,现在看51的汇编看不懂了。10几年不用51了。

楼主的程序中使用了C和带C移位,这个对于一个不支持加法的单片机而言似乎不可能存在的。
ahgao 发表于 2011-9-22 22:16


那很简单,下面这两条指令:

               CLR    C
               RLC    A
改为:
               RL      A
               ANL    A, #0FEH
即可。

使用特权

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

本版积分规则

个人签名:学习chunyang和maychang两位老师,努力练好基本功。 学习HOT大叔,学好“Cortex-M0”,做“Cortex-M0”之菜鸟。

7

主题

4820

帖子

12

粉丝