📄 bin2bcd.lst
字号:
C51 COMPILER V8.15 BIN2BCD 04/14/2009 10:13:05 PAGE 1
C51 COMPILER V8.15, COMPILATION OF MODULE BIN2BCD
OBJECT MODULE PLACED IN Bin2BCD.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE Bin2BCD.c BROWSE DEBUG OBJECTEXTEND
line level source
1 //本程序是将一个unsigned int整形数的万位、千位、百位、十位、各位提取出来
2 //各个位依次存放在一个有5个unsigned char组成的数组中
3 #include<reg51.h>
4 union bin16
5 {
6 unsigned int ax; //需要提取各个位的整数
7 unsigned char al[2];
8 };
9
10
11
12 //函数入口参数:需要提取各个位的整数,存放各个位的数组起始地址
13 void bin2bcd(unsigned int ua,char data *ps)
14 {
15 1 union bin16 data b16;
16 1 char data *p;
17 1 unsigned char data wq; //存放预估的千位
18 1 b16.ax=ua;
19 1 wq=b16.al[0]>>2; //暂存预估的千位
20 1 b16.al[0]&=0x03; //减去整数中预估千位
21 1 b16.ax+=wq*24; //求余数
22 1 if(b16.al[0]>=4) //第一次校正千位
23 1 { //余数大于1024,利用余数的高字节判断
24 2 wq++;
25 2 b16.ax-=1000;
26 2 }
27 1 if(b16.ax>=1000) //第二次校正千位
28 1 {
29 2 wq++;
30 2 b16.ax-=1000;
31 2 }
32 1 p=ps;
33 1 *p++=wq/10; //取万位
34 1 *p++=wq%10; //取千位
35 1 wq=(unsigned char)(b16.ax>>2)/25; //取余数的百位,wq/100
36 1 *p++=wq;
37 1 wq=b16.ax-wq*100;
38 1 *p++=wq/10; //取十位
39 1 *p++=wq%10; //取个位
40 1 }
41
42
43
44 //测试数据
45 //需要提取各个位的整数a
46 //依次存放万位、千位、百位、十位、各位的数组c
47 void main()
48 {
49 1 unsigned int a=23;
50 1 unsigned char c[5];
51 1 bin2bcd(a,c);
52 1 while(1);
53 1 }
C51 COMPILER V8.15 BIN2BCD 04/14/2009 10:13:05 PAGE 2
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 163 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 7
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -