> 正文 二进制 转换成十进制 BCD码(加3移位法)
来源:网络
发布时间:2010-07-05 字体:
] 关键字:
转换 TEMP end begin 大于 字节 是否 b0100 if 数据 BG "二进制数调整BCD码的方法是将二进制码左移8次,每次移位后都检查低四位LSD+3是否大于7,如是则加3,否则不加,高4位MSD作同样处理"
一、为什么左移8次
原寄存器是存二进制数的,新寄存器是存十进制数的,当然要左移8次,把数据全部移进去。
但这里要注意两件事,第一,如果只安排一个字节作十进制寄存器,原数据要小于 64H(即100)。第二,由于新寄存器是十进制的,要随时调整。
二、检查 半字节+3 是否大于 7,是,则 +3
在 51 系列里有十进制调节指令(半字节大于 9,则加 6,应该不难理解),PIC 里没有,只好采取变通的方法。
检查 半字节+3 是否大于 7,也就是检查半字节是否大于 4。因为,如果大于 4(比如 5、6),下一步左移就要溢出了,所以加 3,等于左移后的加
6,起到十进制调节的作用。
那为什么要绕个圈子去检测 半字节+3 是否大于 7 呢?这样程序编起来会简练一些。
一个例子
附上Verilog代码:
//17位二进制数转BCD码(基本思想是逢十进1)
module BIN_BCD_4 (CLK, A, BW, BQ, BB, BS, BG); i ut CLK; i ut [16:0]A; //二进制输入数据 output [3:0]BW, BQ, BB, BS, BG;//BCD数据输出寄存器 reg [3:0]BW, BQ, BB, BS, BG; integer I; reg [19:0]TEMP; reg [16:0]C; always @ (posedge CLK) begin C=A; TEMP=0; for (I=1; I17; I=I+1) begin {TEMP, C}={TEMP[18:0], C, 1'b0};//左移一位 if (TEMP[3:0]4'b0100) egin TEMP[3:0]=TEMP[3:0]+3;
// 4则加3 end if (TEMP[7:4]4'b0100) egin TEMP[7:4]=TEMP[7:4]+3; end if (TEMP[11:8]4'b0100) egin TEMP[11:8]=TEMP[11:8]+3; end if (TEMP[15:12]4'b0100) egin TEMP[15:12]=TEMP[15:12]+3; end if (TEMP[19:16]4'b0100) egin TEMP[19:16]=TEMP[19:16]+3; end {BW, BQ, BB, BS, BG}={TEMP[18:0], A[0]}; end end endmodule
作者:mcuflower 51099在线学习网 http://www.51099.com 【
】 相关文章
· 热点文章
本站宗旨:尽可能多的收集学习视频、试题、电子书、计算机教程、英语学习、免费论文等学习资料供大家下载学习参考
版权所有 @2006
二进制 转换成十进制 BCD码(加3移位法)zzboyabcd的个人空间
http:// ace.itpub.net/23766927
您的位置:
更多 / 11gR1 版本。主库、备库都不做物理备份。主库上的rman show all的结果:CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 2 DAYS;CONFIGURE BACKUP OPTIMIZATION OFF; # defaultCONFIGURE DEFAULT DEVICE TYPE TO DISK; # defaultCONFIGURE CO***OLFILE AUTOBACKUP OFF; # defaultCONFIGURE CO***OLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '%F'; # defaultCONFIGURE DEVICE TYPE DISK PARALLELISM 1 BACKUP TYPE TO BACKUPSET; # defaultCONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # / 11gR1版本。后台的数据库,设计成了Data Guard。1个主库、2个备库,这2个备库称为standby1、standby2。前端是J***A程序访问,现在想达到的效果是:当前端J***A程序访问时,数据库方面自动判断,如果standby1的连接数很多,J***A程序就自动访问standby2数据库;如果standby2的连接数很多,J***A程序就自动访问standby1数据库。因为J***A里面,无法达到这个目的。我想的方式是:在后台,再设一个数据库,称为db1,然后前端J***A程序直接连接到这个db1上去,但这样似乎觉得实现有困难。在不采用RAC的情况下,如 / 两个数据库,想通过物化视图的方式,实现同步一个表,进行测试如下:SQL select * from v$versio BANNER--------------------------------------------------------------------------------Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 - 64bit ProductionPL/SQL Release 11.1.0.6.0 - ProductionCORE11.1.0.6.0ProductionTNS for 64-bit Windows: Version 11.1.0.6.0 - ProductionNLSRTL Version 11.1.0.6.0 - Production第1个数据库里: aaaa用户创建表:create table aaaa.te / 11gR1的oracle版本。一个很大的表,按天进行分区,就是按adddate 列进行分区。将来的查询语句是:select * from T1 where adddate '20110501'and adddate '20110505'and device_number = '1111111';表示查询5月1日到5月5日的某个设备的所有记录。在对adddate分区的时候,使用list分区好呢?还是range分区好呢? 查询上有速度的差异吗?我看到有人说:分区消除这方面,range要好于list,那是不是应该使用range分区呢?非常谢谢大家。
用户菜单
标题搜索
我的存档 数据统计
访问量: 13
建立时间: 2010-04-21
更新时间: 2010-04-21
RSS订阅
Powered by
2001-2007