t丶t吧 关注:23贴子:2,645

『TT』MC红石电路教程

只看楼主收藏回复

前言
我是红石小白,所以教程有些地方可能不靠谱。所以还需要乃们自己判断对与错。不要不经过自己的思考,而死板的去听从别人的指令。
好了开始教程,首先这不是基础教程,属于中高阶的红石电路教程涉及到数电中的单片机等IC电路,并且红石电路是数字电路而不是模拟电路,所以选择二进制来作为数据处理,是最佳的选择
PS1:数字电路的波形图是
大家看到了,图中波形的振幅都是非常平稳和整齐的这就是数电,这种波形我们叫方波,它只有2个值,那就是高和低。而当值高的时候就代表有电流通过,而值低的时候就代表没电流通过。这时你们肯定会问这有何意义?
好了那我就该给乃们普及一下基本的二进制是什么了
大家都知道十进制数和十六进制数吧,十进制数就是遇10进1。
比如十进制 9(个位)+1(个位)=1(十位)0(个位)
而16进制就是 F+1=10
当然二进制也一样,不过二进制就是遇2进1就像
1+1=2(2要进1所以得10)
懂了吧,二进制里面只有1和0没有2及以上的数字,因为遇到2就要进1
而3呢?3就是1+2。而2就是1+1,由于1+1=2 进1 =10,那么3就等于1+10=11, 注:个位1+0=1而不是等于2所以不用进1
然后是4
3是11那么 11+1我们先把个位相加 1+1=2然而我们要进1于是等于0然后往下一位进1。然后十位的1要加进位的1结果等于2所以得0然后继续进1.于是最终结果是100=4
好了了解了二进制加法进位,那么减法我相信你们也懂了吧
无非就是借位。
PS:别告诉我借位是啥你都不懂,我没记错的话这是小学1年级的数学
10进制减法 12-2=10 我们来把算式拆开。首先十位相减1-0=1,然后个位相减2-2=0所以结果等于10
而借位就是
10进制减法 12-3=9 我们来把算式拆开。首先十位相减1-0=1,然后个位相减2-3,但是2-3不够减了肿么办?于是我们向高位借位,也就是将十位相减的结果和个位合并就是10-3=7+2=9
明白了吧
二进制也一样
10-1=1
个位0-1不够减,借位。10-1=1+0=1
所以这有二进制和十进制的映射列表
1=1
10=2
11=3
100=4
101=5
110=6
111=7
1000=8
1001=9
1010=10
如果你懒得算二进制,可以去百度查进制转换
二进制就先了解到这里,接下来就是电路的逻辑单元,门电路顺便带着把逻辑代数普及一下


IP属地:浙江1楼2013-01-07 15:07回复
    首先,我们来了解一下真值表,真值表顾名思义就是表示真和假的一个表格,在二进制中1就是真,0就是假。而电路中1就是有电,0就是没电
    大家懂了吗?
    接下来上逻辑门
    首先是运算放大器X二极管

    这货有什么用呢?大家都知道MC的红石信号的有效传输范围为15格,就是15格以外就没电了
    那肿么办呢?就可以用到这个神奇的东西,它在MC里面叫做中续器,有着二极管的功能。
    当A有电时B就有电
    当B有电时A还是没有电

    这是非门,也可以叫做反相器。其作用就是将1变成0将0变成1
    符号以及逻辑代数公式:

    真值表
    A......F(输出)
    0......1
    1......0

    或门,作用是满足一个条件,触发整个事件
    符号


    逻辑代数公式:F=A+B
    真值表:
    A.....B.....F(输出)
    0.....0.....0
    1.....0.....1
    0.....1.....1
    1.....1.....1
    【楼下继续更新】
    


    IP属地:浙江2楼2013-01-07 15:07
    回复
      我相信大家都知道逻辑门的作用了吧,别看逻辑门小,但是作用很大。我希望你们能够自己去游戏里面做出来试试。然后反复研究透彻了
      你就可以听我接下来要说的了
      首先二进制加法。我们刚才说过是逢二进一。
      也就是01+01=10(为什么1前面要补一个0?我们以后会讲到,现在不要纠结这些)
      好了大家想想用什么逻辑门,怎么组合能实现01+01=10?我给大家点时间猜猜。


      IP属地:浙江4楼2013-01-07 15:08
      回复

        试问大家,这是什么逻辑门组成的电路,然后真值表又是什么?
        


        IP属地:浙江5楼2013-01-07 15:08
        回复
          楼上已经有人答出来了,这个就是个半加器,为什么说它是半加器呢?
          因为它并没有进位。所以称为半加器
          符号

          逻辑代数公式S=A⊕B(异或门部分) Ci+1=AB(与门部分)
          代数则是 A+B=S+C
          真值表
          A.....B.....Ci.....S
          1..+..0..=..0......1
          0..+..1..=..0......1
          1..+..1..=..1......0
          0..+..0..=..0......0


          IP属地:浙江6楼2013-01-07 15:08
          回复
            好了这里要提了,电路可不是像建筑那样越大越好,反而是越简化越好,于是我们来简化一下异或门


            这是简化后的异或门,接下来我们来试试简化一下半加器,然而我们发现半加器的公式是
            S=A⊕B(异或门部分) Ci+1=AB(与门部分)
            而异或门的公式是
            A⊕B=A'B + AB'
            注意A'B + AB'这不就是与门吗?于是我们知道了异或门中自带与门,所以半加器直接就能使用异或门中的与门,而不用另外的去做与门
            所以我们把异或门改造一下


            这不就是半加器了吗?
            接下来全加器教程


            IP属地:浙江7楼2013-01-07 15:09
            回复

              好了我们知道了异或门就能完成1+1=10的算法,那么如果要10+01=11肿么办呢?
              这样很多人就像到用2个半加器不就得了?
              那么如果要是11+1=100你用半加器怎么算?所以我们需要能够进位的全加器。全加器是由2个半加器组成的

              C输出=(A+B=C输入+S)
              S=结果
              C=进位


              乃们能看懂不?如果能请告知真值表,并且做2个这样的电路,然后把进位连接上,截图给我看
              


              IP属地:浙江8楼2013-01-07 15:09
              回复
                好了全加器的连接54楼也已经给出,就是将进位也就是一个全加器的C输出连接到另外一个全加器的C输入,其作用就是进位传输
                现在我来给大家解读一下原理,首先异或门是输入相同则不输出,那么我们来看看
                1+1=10如果不看十位那么就是
                1+1=0这不正好是异或门的输出吗?
                异或门的输入不同,则输出那么就是
                1+0=1
                0+1=1
                这不也是异或门的输出吗?
                然后我们看看十位,是由与门完成,然后在看看与门的真值表。输入均为1则输出那么
                1+1=10我们不看个位那么就是
                1+1=1这不也正好是与门的输出吗?
                然后
                1+0=0
                0+1=0这是不是与门的输出?
                所以我们利用这个概念研究出了半加器。
                可是如果我们要算进位的话肿么办?
                那么就把与门的输出端变成进位

                请注意第一个半加器上异或门的输出是不是连接到C(进位)?
                对因为1+1=10向十位进了一位。而与门的输出就是高位的输出,而一个全加器只能输出一位数,所以与门是进位。而进位你总不可能往空气里进吧,所以我们需要第二个全加器来和进位相连。(如果进位没有提供加法器运算了那么就为溢出),而进位就是+1
                例如01+01=10
                那么就是01+01的结果向十位进1,也就是结果的第十位和1相加。而01+01结果的十位为0那么就是0+1等于10
                这就是为什么有第二个半加器的原因,也就是进位和原来的数相加的结果相加。
                然后你们可能要像55楼一样问,那为什么第二个半加器也有与门连接到C(进位)输出呢?那是进位,进位在和结果相加时也可能产生进位,比如
                011+001=100
                我们把进位演示一遍
                先是个位相加1+1=10,然后十位相加1+0=1.然后十位相加的结果和进位相加10+10=100
                然后100和百位相加的结果相加,100+000=100
                所以第二个半加器的进位输出是,如果进位和结果相加又产生进位时进位用的
                明白了吗?接下来二进制反补(不过要等我有时间以后)


                IP属地:浙江9楼2013-01-07 15:09
                回复
                  哦对了!全加器的符号

                  看看有没有人可以用现在的逻辑代数知识,写出一个全加器的公式
                  然后等下次抽出时间,教大家二进制反补以及加减混合器,然后是串联乘法器的原理和CSA定点阵列乘法器的实现。和直接补码乘法器的原理
                  注:你们所说的脉冲是不对的,脉冲就像你按按钮一样,瞬间发出的电路信号叫脉冲,你们的那种振荡电路叫时钟脉冲,属于时序电路。然后溢出的概念和倒水一样,水杯装不下水了,那么就溢出了。防止溢出的办法有很多其中就是将一个数分为好几段进行运算。比如
                  123+321.然而我们的加法器数量不够肿么办?那么就先算1+3=4,然后2+2=4,在然后1+3=4
                  结果合并,如果是821+821,这种8+8=16的要记住进位,也就是2+2的时候还要加1
                  减法同理,只不过借位是减1


                  IP属地:浙江10楼2013-01-07 15:09
                  收起回复


                    窝又有点时间来发教程了,然后我怕大家还是看不懂加法器的原理,所以做了2张加法器的电路状态图


                    IP属地:浙江11楼2013-01-07 15:10
                    回复
                      然后是二进制补码
                      首先十进制的除了正整数还有负整数,而十进制的负整数的表达方式是在整数前面加负号("-")
                      而二进制只有1和0并且是提供给硬件进行运算的,那么就有个问题了,二进制该怎么表达负数,既能让硬件知道那是负数,然而又能进行运算呢?
                      这里我们就要用到反补了,什么是反补?
                      就是反码然后+1
                      首先我们要有源码。源码是什么?比如
                      我们输入一个0001,这就是源码
                      而反码就是将源码中的0变成1然后1变成0
                      所以0001的反码是1110
                      然后要补码,补码是什么?当然就是加1啦
                      0001的反码1110然后补码就等于1111
                      然后1111还不是负数,因为你的符号位还是0
                      符号位,就是二进制中最高的那一位,相当于十进制中的负号("-"),也就是,符号位如果是1那么后面的整数就是负数,如果符号位是0那么后面的整数就是正数
                      所以1111还要扩充符号位,变成01111然后再把符号位变成1就是11111这就是0001的负数形式了,如果按照标准0001要把符号位给写进去,也就是要写成00001
                      ...................................................↑(第一个0就是符号位)
                      那么你们可能想了,如果反码在补码也就是加1的时候进位进到符号位了肿么办?
                      第一我可以告诉你除了源码全是0外,补码不可能进一进到符号位
                      第二如果特殊情况进位真的进到符号位了那么就溢出了
                      第三为什么要反码还要补码?直接在符号位写1不就得了?我可以告诉你,那是方便硬件运算。待会我会讲到

                      这是一个减法器,我考考大家,请你们利用我刚才教的乘法器原理和二进制反补的知识,大致的推断出这个减法器的原理


                      IP属地:浙江12楼2013-01-07 15:10
                      回复
                        好的,我来告诉大家补码运算的原理
                        首先被减数减减数的原理就是按照减数的值然后从被减速中扣去相应的值
                        那么补码运算则是被减数加上减数的反码也就是
                        假如是一个5位二进制相减(最高位也就是第5位是符号位)
                        那么
                        00001-00001就等于00001+(11111-0001)等于00001+11110=11111然后补码+1修正11111为00000
                        你们可能要问了11111+1应该是等于100000才对啊,其实不然,因为我们只有5个加法器而100000却是6位数了,所以只保留了100000的5位数也就是那5个0。你们可能要问了,那么岂不是溢出了?no,这个并没有溢出,为啥?因为最高位是符号位而不是整数位,所以最高位加法器的进位是符号抵消的进位(比如-1-(-1)=0(符号位的1相加抵消)),而溢出检测应该是整数进位才是属而符号位没有进位,或者符号位进位而整数却没有进位。那种才属于溢出。
                        剩下我弄几张原理图,不懂的人可以看看这个原理图
                        


                        IP属地:浙江13楼2013-01-07 15:10
                        回复

                          这是减法器无输入的状态图
                          看懂了吗?

                          这是溢出检测电路的设计图,具体我也不知道该怎么表述出来。乃们自己先想想,和去游戏里面实践一下,然后把想法告诉我


                          IP属地:浙江14楼2013-01-07 15:10
                          回复


                            这是两个溢出的例子,我考考乃们,这是为什么溢出了?


                            IP属地:浙江15楼2013-01-07 15:11
                            回复
                              仔细想想,首先把0010假设为a,0011为b,那么就是a没往下一次,a就往左移一位
                              然后如果b是1,那么a就进行加法运算,如果b是0那么a就不进行加法运算。


                              IP属地:浙江17楼2013-01-07 15:11
                              回复