📄 2bcd.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 + -