微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 第63节:大数据的减法运算

第63节:大数据的减法运算

时间:11-22 来源:互联网 点击:

  1. ucDataBCD4_cnt_1=0;//接收到的第1个数组合BCD码数组的有效数据长度
  2. unsigned char ucDataBCD4_2[BCD4_MAX]; //接收到的第2个数组合BCD码数组形式这里是指减数
  3. unsigned char ucDataBCD4_cnt_2=0;//接收到的第2个数组合BCD码数组的有效数据长度
  4. unsigned char ucDataBCD4_3[BCD4_MAX]; //接收到的第3个数组合BCD码数组形式这里是指差
  5. unsigned char ucDataBCD4_cnt_3=0;//接收到的第3个数组合BCD码数组的有效数据长度
  6. unsigned char ucDataBCD8_1[BCD8_MAX]; //接收到的第1个数非组合BCD码数组形式 这里是指被减数
  7. unsigned char ucDataBCD8_cnt_1=0;//接收到的第1个数非组合BCD码数组的有效数据长度
  8. unsigned char ucDataBCD8_2[BCD8_MAX]; //接收到的第2个数非组合BCD码数组形式 这里是指减数
  9. unsigned char ucDataBCD8_cnt_2=0;//接收到的第2个数非组合BCD码数组的有效数据长度
  10. unsigned char ucDataBCD8_3[BCD8_MAX]; //接收到的第3个数非组合BCD码数组形式 这里是指差
  11. unsigned char ucDataBCD8_cnt_3=0;//接收到的第3个数非组合BCD码数组的有效数据长度
  12. unsigned char ucResultFlag=11; //运算结果标志,10代表计算结果超出范围出错,11代表正常。
  13. void main()
  14. {
  15. initial_myself();
  16. delay_long(100);
  17. initial_peripheral();
  18. while(1)
  19. {
  20. usart_service();//串口服务程序
  21. }
  22. }
  23. /* 注释二:
  24. * 组合BCD码转成非组合BCD码。
  25. * 这里的变量ucBCD4_cnt代表组合BCD码的有效字节数.
  26. * 这里的变量*p_ucBCD8_cnt代表经过转换后,非组合BCD码的有效字节数,记得加地址符号&传址进去
  27. * 本程序在上一节的基础上,略作修改,用循环for语句压缩了代码,
  28. * 同时引进了组合BCD码的有效字节数变量。这样就不限定了数据的长度,
  29. * 可以让我们根据数据的实际大小灵活运用。
  30. */
  31. void BCD4_to_BCD8(const unsigned char *p_ucBCD_bit4,unsigned char ucBCD4_cnt,unsigned char *p_ucBCD_bit8,unsigned char *p_ucBCD8_cnt)
  32. {
  33. unsigned char ucTmep;
  34. unsigned char i;
  35. for(i=0;i
  36. {
  37. p_ucBCD_bit8[i]=0;
  38. }
  39. *p_ucBCD8_cnt=ucBCD4_cnt*2; //转换成非组合BCD码后的有效数据长度
  40. for(i=0;i
  41. {
  42. ucTmep=p_ucBCD_bit4[ucBCD4_cnt-1-i];
  43. p_ucBCD_bit8[ucBCD4_cnt*2-i*2-1]=ucTmep>>4;
  44. p_ucBCD_bit8[ucBCD4_cnt*2-i*2-2]=ucTmep&0x0f;
  45. }
  46. }
  47. /* 注释三:
  48. * 非组合BCD码转成组合BCD码。
  49. * 这里的变量ucBCD8_cnt代表非组合BCD码的有效字节数.
  50. * 这里的变量*p_ucBCD4_cnt代表经过转换后,组合BCD码的有效字节数,记得加地址符号&传址进去
  51. * 本程序在上一节的基础上,略作修改,用循环for语句压缩了代码,
  52. * 同时引进了非组合BCD码的有效字节数变量。这样就不限定了数据的长度,
  53. * 可以让我们根据数据的实际大小灵活运用。
  54. */
  55. void BCD8_to_BCD4(const unsigned char *p_ucBCD_bit8,unsigned char ucBCD8_cnt,unsigned char *p_ucBCD_bit4,unsigned char *p_ucBCD4_cnt)
  56. {
  57. unsigned char ucTmep;
  58. unsigned char i;
  59. unsigned char ucBCD4_cnt;
  60. for(i=0;i
  61. {
  62. p_ucBCD_bit4[i]=0;
  63. }
  64. ucBCD4_cnt=(ucBCD8_cnt+1)/2; //非组合BCD码转化成组合BCD码的有效数,这里+1避免非组合数据长度是奇数位
  65. *p_ucBCD4_cnt=ucBCD4_cnt; //把转换后的结果付给接口指针的数据,可以对外输出结果
  66. for(i=0;i
  67. {
  68. ucTmep=p_ucBCD_bit8[ucBCD4_cnt*2-1-i*2]; //把非组合BCD码第8位分解出来
  69. p_ucBCD_bit4[ucBCD4_cnt-1-i]=ucTmep<4;
  70. p_ucBCD_bit4[ucBCD4_cnt-1-i]=p_ucBCD_bit4[ucBCD4_cnt-1-i]+p_ucBCD_bit8[ucBCD4_cnt*2-2-i*2]; //把非组合BCD码第7位分解出来
  71. }
  72. }
  73. /* 注释四:
  74. *函数介绍:清零数组的全部数组数据
  75. *输入参数:ucARRAY_MAX代表数组定义的最大长度
  76. *输入输出参数:*destData--被清零的数组。
  77. */
  78. void ClearAllData(uchar ucARRAY_MAX,uchar *destData)
  79. {
  80. uchar i;
  81. for(i=0;i
  82. {
  83. destData[i]=0;
  84. }
  85. }
  86. /* 注释五:
  87. *函数介绍:获取数组的有效长度
  88. *输入参数:*destData--被获取的数组。
  89. *输入参数:ucARRAY_MAX代表数组定义的最大长度
  90. *返回值:返回数组的有效长度。比如58786这个数据的有效长度是5
  91. *电子开发者作者:吴坚鸿
  92. */
  93. uchar GetDataLength(const uchar *destData,uchar ucARRAY_MAX)
  94. {
  95. uchar i;
  96. uchar DataLength=ucARRAY_MAX;
  97. for(i=0;i
  98. {
  99. if(0!=destData[ucARRAY_MAX-1-i])
  100. {
  101. break;
  102. }
  103. else
  104. {
  105. DataLength--;
  106. }
  107. }
  108. return DataLength;
  109. }
  110. /* 注释六:
  111. *函数介绍:比较两个数的大小
  112. *输入参数:
  113. *(1)*destData--被比较数的数组。
  114. *(2)*sourceData--比较数的

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top