⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 2bcd.lst

📁 实现多字节二进制转BCD码功能
💻 LST
字号:
C51 COMPILER V6.23a  2BCD                                                                  03/28/2009 10:08:48 PAGE 1   


C51 COMPILER V6.23a, COMPILATION OF MODULE 2BCD
OBJECT MODULE PLACED IN 2bcd.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE 2bcd.c BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          #include <reg52.h>
   2          #include <intrins.h>
   3          
   4          #define uint unsigned int
   5          #define uchar unsigned char
   6          uchar  bcdnumber[20];
   7          uchar  secondnumber[15]={255,255,255,255,255,255,0};
   8          
   9          void init();
  10          void second_to_bcd(uchar , uchar secondnumber[10],uchar bcdnumber[20]);
  11          void send(uchar);
  12          
  13          void delay_ms(unsigned int ms)  //延时1MS,备用   
  14          {
  15   1          unsigned int i,j;
  16   1              for( i=0;i<ms;i++)
  17   1              for(j=0;j<1000;j++);    
  18   1      }
  19          
  20          
  21          
  22          void main()
  23          {
  24   1              uchar number;
  25   1              init();
  26   1              
  27   1              second_to_bcd(6,secondnumber,bcdnumber);
  28   1              for(number=0;number<15;number++)
  29   1              { 
  30   2                      send(bcdnumber[number]);
  31   2              //      delay_ms(100);
  32   2              }
  33   1              while(1);
  34   1              
  35   1      }
  36          
  37          void second_to_bcd(uchar byte_number, uchar secondnumber[15], uchar bcdnumber[20])
  38          {       
  39   1              uchar secondnumber_bit,i,j,k,high_bit;
  40   1              uchar di_byte,gao_byte,ac=0,last_high_bit;
  41   1              uchar control;                          //用于控制BCD码转换时循环次数
  42   1              uint  bcdjinwei;                                        //BCD码*2加进位缓存
  43   1              
  44   1              secondnumber_bit=8*byte_number;         //二进制总位数
  45   1              for(i=0;i<20;i++)                       //用于清bcdnumber[20]为0  
  46   1              { bcdnumber[i]=0; }
  47   1              for(i=0;i<secondnumber_bit;i++)
  48   1              {
  49   2      
  50   2      //              将整个二进制数移位
  51   2      
  52   2                      high_bit=0;                        //字节高位的标志,相当于汇编中的进位标志c
  53   2                      last_high_bit=0;
  54   2                      for(j=0;j<byte_number;j++)
  55   2                      {
C51 COMPILER V6.23a  2BCD                                                                  03/28/2009 10:08:48 PAGE 2   

  56   3                              high_bit=secondnumber[j]&0x80;
  57   3                              if(high_bit==0x80)high_bit=1;
  58   3                              else high_bit=0;
  59   3      
  60   3                              secondnumber[j]=secondnumber[j]<<1;
  61   3                              if(last_high_bit==1)             //如果低位有进位标志
  62   3                              {secondnumber[j]=secondnumber[j]+1;}
  63   3      
  64   3                              last_high_bit=high_bit;                 //存本次最高位          
  65   3                      }
  66   2      //出口为多字节二进制的最高位high_bit
  67   2                      ac=0;
  68   2      
  69   2                      if(byte_number>4) control=byte_number+1;     //原先算法中有bug,当超过4字节时会丢掉前面一些位,此句保证8

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -