精华内容
下载资源
问答
  • FPGA 二进制bcd

    千次阅读 2018-10-28 19:15:47
    //这是一个使用Verilog HDL编写的带使能端的8-bit二进制BCD码... //rst_n为使能端,binary为待转换二进制数,bcd转换后的BCD码 parameter B_SIZE=12; //B_SIZE为二进制数所占的位数,可根据需要进行扩展...
    //这是一个使用Verilog HDL编写的带使能端的8-bit二进制转BCD码程序,具有占用资源少、移植性好、扩展方便的特点。   
    module bcd(rst_n,binary,bcd);   //rst_n为使能端,binary为待转换的二进制数,bcd为转换后的BCD码      
    parameter B_SIZE=12;				//B_SIZE为二进制数所占的位数,可根据需要进行扩展 
    
    input       rst_n;                 	//rst_n高电平有效,低电平时
    input  		[B_SIZE-1:0] binary;
    output reg  [B_SIZE+3:0] bcd;
    
       
    reg  [B_SIZE-1:0] bin;   
    //reg  [B_SIZE+3:0] bcd;    //bcd的长度应根据实际情况进行修改   
    reg  [B_SIZE+3:0] result;   //result的长度=bcd的长度 
     
    
      
    always@(binary or rst_n)
       begin      
          bin= binary;     
    	  result = 0;         
       if(rst_n == 0) 
    	  bcd <= 0;      
    else    
    	begin         
    repeat(B_SIZE-1)//使用repeat语句进行循环计算      
       begin            
    	result[0] = bin[B_SIZE-1];                     
       if(result[3:0] > 4)            
        result[3:0]=result[3:0]+ 4'd3;      
       if(result[7:4] > 4)            
        result[7:4]=result[7:4]+4'd3;  
       if(result[11:8] > 4)   	   
    	result[11:8] = result[11:8]+4'd3; //扩展时应参照此三条if语句续写   
       if(result[15:12] > 4)   	   
    	result[15:12]= result[15:12]+ 4'd3;  
    	result=result<<1;
    	bin=bin<<1; end         
    	result[0]= bin[B_SIZE-1]; 
    	bcd<=result;   
       end  
       end   
    endmodule

     

    展开全文
  • 如:302302/2=151 余0151/2=75 余175/2=37 余137/2=18 余118/2=9 余09/2=4 余14/2=2 余02/2=1 余0故结果为 1 0010 1110化十六进制:将二进制向左四位一化分,不足补0,按8421BCD编码法得出结果!1 1 ...

    十进制转二进制:

    用2连续相除结果为1

    将余数和最后的1从下向上倒序排写:

    如:302

    302/2=151 余0

    151/2=75 余1

    75/2=37 余1

    37/2=18 余1

    18/2=9 余0

    9/2=4 余1

    4/2=2 余0

    2/2=1 余0

    故结果为 1 0010 1110

    化十六进制:将二进制向左四位一化分,不足补0,按8421BCD编码法得出结果!

    1 1 1 0=14 0 0 1 0=2 0 0 0 1=1 十进制 10 11 12 13 14 15

    8 4 2 1 8 4 2 1 8 4 2 1 十六进制 A B C D E F

    结果为12E

    化八进制:将二进制向左三位一化分,不足补0,按421法得出结果即可!

    二进制转十进制:

    从最后一位开始算起,依次列为0、1、2、3、4……位

    第N位的数(0或1)乘以2的N次方,再把得到的结果相加即为答案

    例:0110110 转十进制:

    第0位:0乘2的0次方=0

    第1位:1乘2的1次方=2

    第2位:1乘2的2次方=4

    第3位:0乘2的3次方=0

    第4位:1乘2的4次方=16

    第5位:1乘2的5次方=32

    第6位:0乘2的6次方=0

    计算:0+2+4+0+16+32+0=54 即结果为:54

    Sum(求和) 用法:=sum(求和单元格的区域)

    如:=sum(a1:a10) 表示求a1到a10区域内的和

    If(判断是否满足某个条件) 用法:=if(表达式,满足条件反回的值,不满足条件反回的值)

    如:=if(a1>=75, "好","坏") 表示当a1大于或等于75时,返回好,否则返回坏

    注意:if函数内同时满足一个以上的条件时要加and(题目常见于求:大学英语,大学语文,大学数学之类)

    如:=if(and(a1>=80,b1>=80,c1>=80), "好","坏")表示同时满足三个条件,当a1\b1\c1这三个条件都大于或等于80时则返回好,否则返回坏

    Sumif(条件求和) 用法:=sumif(用于条件判断的单元格区域, 由数字、逻辑表达式等组成的判定条件,求和的单元格区域)

    如:=sumif(a1:a10,二组,b1:b10)表示a1到a10区域内二组的个数,再求b1到b10之间二组的和(题目常见于求二组的总成绩)

    Countif(求区域内单元格的个数) 用法:=countif(单元格数目的区域, 由数字、逻辑表达式等组成的判定条件)

    如:=countif(a1:a10,二组)表示在a1到a10这个区域内二组的个数

    注意:某些题目可能会要求考生求(二组平均成绩),根据以上公式用countif求出了二组的个数或人数,sumif求出二组的总成绩,再用sumif除以countif即可求出二组的平均成绩!表达式写为:=sumif(a1:a10,二组,b1:b10)/countif(a1:a10,二组) 采用的公式是:二组总成绩/二组人数。

    Average(平均值) 用法:=average(求平均值单元格的区域)

    如:=average(a1:a10)表示求a1到a10区域内的平均值

    max(最大值) 用法:=max(求最大值的单元格区域)

    如:=max(a1:a10) 表示求a1到a10区域内的最大值

    Mode(常数:出现次数最多的数)用法:=mode(求常数的单元格区域)

    如:=mode(a1:a10)表示求a1到a10区域内出现次数最多的数(本函数通常被要求考生利用来求普遍工资)

    min(最小值) 用法:=min(求最小值的单元格区域)

    如:=min(a1:a10) 表示求a1到a10区域内的最小值

    展开阅读全文

    展开全文
  • 常见的进位数制有:二进制(Binary)、十进制(Decimal)和十六进制(Hexadecimal)。人类的思维习惯于十进制(Decimal),所谓“逢十进一”。这个没什么好说的,地球人都知道。本文要介绍的是PLC编程相关的...

    所谓“数制”,是指“数”的表示方法,即计数的方法。数制采用进位的方法,当数值增加到该位能表示的最大值时,会将位数增加一位(进位)。按照进位的规则进行计数的数制,称为进位数制。常见的进位数制有:二进制(Binary)、十进制(Decimal)和十六进制(Hexadecimal)。

    1b18370c0ff25950dbc3084c0268cc50.png

    人类的思维习惯于十进制(Decimal),所谓“逢十进一”。这个没什么好说的,地球人都知道。

    本文要介绍的是PLC编程相关的概念,因此要重点介绍的是二进制(Binary)和十六进制(Hexadecimal)。

    现代计算机普遍采用冯·诺伊曼(John von Neumann,1903~1957)的体系结构。美籍匈牙利科学家冯·诺伊曼根据电子元件的双稳特性,提出数字计算机应采用二进制进行存储和运算。

    二进制(Binary)只有“0”和“1”两个数码,可以表示数字量的两种不同的状态,比如触点的吸合与断开,线圈的通电与断电等等。在PLC的存储单元中,可以使用一个“位(bit)”来表示“0”或者“1”两种值,8个“位”组成一个字节(Byte)。以西门子S7系列PLC为例,可以使用STL语句 “S  Q0.0”将Q0.0置为“1”。其中,“Q0.0”中的“Q”表示输出过程映像区(Output),第一个“0”表示第“0”个字节,第二个“0”表示该字节的第“0”位。当该指令执行后,PLC的输出模块的Q0.0将会有信号输出,它连接的继电器线圈会通电,常开触点吸合,接通相应的电路。

    二进制采用“逢二进一”的规则,可以使用多位二进制数来表示数值。将最低位记为第0位,从右往左的第n位,其权值(数制中某位上的1所代表的数值)为2的n次方。

    4345a9314fbbdd5ae45b93800c93bec9.png

    在西门子S7系列PLC中,二进制常数以“2#”开始,比如:2#1101。二进制数可以转换成十进制数,转换方法是把各个位上的数乘以其权值,然后相加。比如2#1101,等于1乘以2的3次方(=8),加上1乘以2的2次方(=4),加上1乘以2的0次方(=1),等于十进制13。

    903dd3d978c100a7cb564679eab380b3.png

    由于二进制数位数太多,编程时书写起来不太方便。为了简化书写,同时保持二进制宜于“位”操作的特性,人们把四个二进制位组成一组,用来表示一个数。由于四个二进制位所成表示的最大数是2#1111(=15),于是就出现了十六进制的数制。十六进制的数码除了包括十进制的0~9之外,还包括A~F六个字母。A等于十进制的10,依次递增,F等于10进制的15。

    十六进制的表示方法比较多,在C/C++中用前缀"0x"表示,比如上一篇文章中提到的“0x0384”;在VB中使用前缀"&H"表示,比如“&H1A2B”;在西门子S7系列PLC中,使用“16#”来表示16进制数。但通常情况下,在表示16进制数的时候,需要同时指出它的数据类型(后续会有专门文章介绍数据类型相关知识),比如B#16#56表示16进制数56,它的数据类型是字节(Byte)。

    十六进制数可以很方便的转换成二进制数,只需要把每一位数转成二进制数,然后组合起来即可。比如B#16#56,其中16#5=2#0101,16#6=2#0110,所以16#56=2#1010110,如下图:

    05d5f1fe62e9c60e3001f8824245b355.png

    程序设计中还用到一种编码,称为BCD码。BCD是英文"Binary-Coded Decimal"的缩写,这种编码的数制是十进制。BCD码使用四个二进制数来表示一位十进制数,每一位允许的范围是2#0000~2#1001,也就是十进制的0~9,采用“逢十进一”的规则。

    2684ba55eeb5e6b78d3aa5414fac196a.pngBCD码是有符号的,用最高位来表示符号,“0”表示正数,“1”表示负数。对于一个四位的BCD码而言(16个二进制位),能表示的范围是“-999~+999”。为什么呢?其实比较好理解,你想,最高位是符号位,那么就剩下了三位,由于每一位BCD码,其本质是十进制数,所以每一位最大的数都是9,所以三位数最大就是999,加上符号,所以四位BCD码能表示的十进制数的范围是“-999~+999”。同样的道理,八位BCD码(32个二进制位)能表示的十进制数的范围是“-9999999~+9999999”。

    好了,关于PLC编程需要的数制的知识就先聊到这里了。相关参考文章:

    扫描关注微信公众号:

    来源:本站|   大小:293 KB|   下载次数:751次

    20bd2df90d5f36f9c5718c1a254553ce.png

    感谢您的支持,欢迎常来看看!

    一点动力,多少随意

    aeb761483b0d94d3327768571afa32e2.png

    fc66b3521bfb0ce821c983ed17a39399.png

    打开支付宝扫一扫,即可进行扫码打赏哦

    展开全文
  • 二进制BCD转换

    千次阅读 2011-10-24 11:49:51
    #define WORD_MSB(x) *((unsigned char *)&x+1) #define WORD_LSB(x) *((unsigned char *)&x) ...//二进制转换为压缩BCD数,结果存入saveBCD中 int BinToBcd(unsigned char val) {  unsig
    #define WORD_MSB(x)    *((unsigned char *)&x+1)
    #define WORD_LSB(x)    *((unsigned char *)&x)


    unsigned int saveBCD;//二进制数转换为压缩BCD数,结果存入saveBCD中


    int BinToBcd(unsigned char val)
    {
        unsigned char i,temp;


        saveBCD = 0;


        for(i=7;i>0;i--)
        {
            saveBCD <<= 1;


            if( val & 0x80 )
                WORD_LSB(saveBCD) |= 1;


            temp = WORD_LSB(saveBCD) + 0X03;
            if( temp & 0x08 )
                WORD_LSB(saveBCD) = temp;


            temp = WORD_LSB(saveBCD) + 0X30;
            if( temp & 0x80 )
                WORD_LSB(saveBCD) = temp;


            val <<= 1;
        }


        saveBCD <<= 1;
        if( val & 0x80 )
            WORD_LSB(saveBCD) |= 1;


        return saveBCD;
    }


    //压缩BCD数转换为二进制数,被转换的数不能大于255
    unsigned char BcdToBin(unsigned int val)
    {
        unsigned char temp,temp1,ret,shift;


        //计算百位   y*100 = y*64 + y*32 + y*4 = y<<6 + y << 5 + y<<1
        temp  = WORD_MSB(val);


        shift = 5;
        do{
            temp <<= 1;
        }while(--shift);//左移5位,乘以32


        temp1 = temp<<1; //再左移一位,相当于左移6位,乘以64


        ret = temp + temp1 + 
            ((WORD_MSB(val))<<1) + ((WORD_MSB(val))<<1);//左移2位,乘以4


        //计算10位 y*10 = y*8 + y*2 = y<<3 + y<<1
        temp = WORD_LSB(val) >> 4;


        temp1  = temp;
        shift = 3;
        do{
            temp1<<= 1;
        }while(--shift);//左移3位,乘以8


        //加上个位
        ret += temp1 + (temp<<1);


        //个位
        ret += (WORD_LSB(val) & 0x0f);    


        return ret;
    }
    展开全文
  • java二进制,字节数组,字符,十六进制,BCD编码转换 java中byte用二进制表示占用8位,而我们知道16进制的每个字符需要用4位二进制位来表示(23 + 22 + 21 + 20 = 15),所以我们就可以把每个byte转换成两...
  • 二进制BCD码可以采用Double_dabble算法,维基百科有详细介绍,简单可称为“移位加3”算法。 8位二进制数243,移位加3计算过程: 16位二进制65244,移位加3计算过程: verilog实现 方法1:纯组合逻辑实现 来自...
  • 听说99%的同学都来这里充电吖 本系列为线下学员学习笔记整理分享,如有想要报名参加线下培训,可以点击以下超链接文章了解,购买开发板可以到叁...本篇文章,记录BCD二进制二进制BCD的原理,及verilog...
  • 微机原理实验-二进制BCD转换广州大学学生实验报告开课学院及实验室:实验中心学 院 机电 年级、专 业、班 微机原理实验2013 年 11 月 4 日姓名 学号 成绩 指导 教师实验课程名称 实验项目名称 一、实验目的二进制...
  • verilog 二进制BCD

    热门讨论 2021-04-02 17:46:34
    每一次移位之后都判断下,BCD码计数器的十、分以及个位是否大于4,如果任何一位(4bit)大于4,则对其加3,之后继续移位,如此下去,直到移位次数为二进制数的位数之后,停止移位,此时得到的BCD码计数值便是转换后...
  • 二进制BCD

    2016-08-31 22:48:00
    BCD码这种编码形式利用了四个位元来储存一个十进制的数码,使二进制和十进制之间的转换得以快捷的进行。这种编码技巧,最常用于会计系统的设计里,因为 会计制度经常需要对很长的数字串作准确的计算。相对于一般的...
  • 二进制bcd

    2015-04-02 22:11:00
    定义:BCD码这种编码形式利用了四个位元来储存一个十进制的数码,使二进制和十进制之间的转换得以快捷的进行。这种编码技巧,最常用于会计系统的设计里,因为会计制度经常需要对很长的数字串作准确的计算。相对于...
  • 、实验内容 1、完成单片机开发相关必备软件的安装 2、学习单片机开发板套件的实验原理图 3、编写、下载及实现第一个单片机程序(点亮一个LED灯) 三、实验原理 单片机开发板原理图;单片机并行输入输出接口 四、...
  • 进制转换BCD

    2021-07-05 21:30:18
    4合闸命令 // 控制字©:1C // 数据帧:68 01 00 00 00 00 00 68 1C 10 35 33 33 33 44 44 44 44 4E 33 45 // C# BCD码与十进制数的转换 // BCD码(Binary-Coded Decimal)是二进制编码的十进制数的缩写,BCD码用4位2进制...
  • 在分析代码之前,我们先来了解一下,BCD码和二进制到底区别在哪?  学习过计算机原理的和数字电子技术这两门课的都会知道这两个到底是什么含义,也有的同学学过了,考过了,过了一段时间又忘记了,今天,我们通过一...
  • 计算机等级考试进制转换及常用函数十进制转二进制:用2连续相除结果为1将余数和最后的1从下向上倒序排写:如:302302/2=151 余0151/2=75 余175/2=37 余137/2=18 余118/2=9 余09/2=4 余14/2=2 余02/2=1 余0故结果为 1...
  • 二进制转换BCD码的Verilog实现

    千次阅读 2020-07-15 16:30:19
    二进制转换BCD编码的Verilog实现 通常在显示温度、数码管、电压等数据时,通常需要将二进制数据转成十进制进行显示。最常用的方法是将二进制转换BCD码(8421)。 8421码:它只选用了四位二进制码中前10组...
  • FPGA零基础学习:基于FPGA的二进制BCD设计(附代码) 本系列将带来FPGA的系统性学习,从最基本的数字电路基础开始,最详细操作步骤,最直白的言语描述,手把手的“傻瓜式”讲解,让电子、信息、通信类专业学生、...
  • 1. BCD码的求和BCD码使用4位二进制数来表示十进制中0~9这10个数的数码。例如,十进制的237,其BCD码就是0010_0011_0111,但是其二进制是1110_1101。我们先来研究两个4位的BCD码相加的情况。设这两个BCD码对应的十...
  • BCD是指用二进制来表示十进制数的编码,即用4位二进制来表示一位十进制数,因此4位二进制数表示最大的十进制数9(1001),只取十六个数中的十个数。 比如: $$ BCD码:0x99(153),该BCD转换成十进制是99. $$ 算法...
  • 定义:BCD码这种编码形式利用了四个位元来储存一个十进制的数码,使二进制和十进制之间的转换得以快捷的进行。这种编码技巧,最常用于会计系统的设计里,因为会计制度经常需要对很长的数字串作准确的计算。相对于...
  • Verilog - 二进制转换BCD编码

    万次阅读 多人点赞 2015-12-16 12:06:12
    二进制BCD编码都是什么?这里所说的二进制,就是一个变量(整数)的实际值的意思,比如一个整数10,那么我们说他的二进制的值就是10,这个没啥好说的。 主要是BCD编码,在数据的传输中,数据都是以字节(byte)为...
  • A、二进制BCD 一、设计背景: 1. 二进制 二进制中只有 0 和 1 两个状态,如开关的接通和断开,晶体管的导通和截止、磁元件的正负剩磁、电位电平的低与高等都可表示 0、1 两个数码。使用二进制,电子器件具有...
  • 二进制编码是用预先规定的方法将文字、数字或其他对象编成二进制的数码,或将信息、数据转换成规定的二进制电脉冲信号。二进制编码的优点(1)技术实现简单,计算机是由逻辑电路组成,逻辑电路通常只有两个状态,开关...
  • 奋斗的小孩系列 FPGA学习altera系列: 第二十三篇 二进制BCD 作者:奋斗的小孩 郝旭帅(转载请注明出处) 大侠好,欢迎来到FPGA技术江湖,江湖偌大,相见即是缘分。大侠可以关注FPGA技术江湖,在“闯荡江湖”、...
  • // 二进制转换BCD进制 always @ (posedge clk ) begin if (count==0) shift_reg={10'b0000000000_0000000000_0000000000_000000,bin}; //把Result_INT和bin拼起来准备左移 //改改改 else if ( count) //实现28...
  • 若你我之间有缘,关注作者又何妨?两情若是久长时,又岂在朝朝暮暮。...我们FANUC PMC处理数据是以二进制BCD码两种形式,要想真的理解它,首先我们需要学习一些数字电路基础知识,这些知识可能看一遍两遍无法理解...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 7,027
精华内容 2,810
关键字:

二进制转换bcd计算