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

第65节:大数据的除法运算

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

  1. ata);//局部两个数相除,商不超过10。当商为0时,余数等于被除数
  2. uchar Div(const uchar *destData,const uchar *sourceData,uchar *resultData);//两个数相除
  3. sbit beep_dr=P2^7; //蜂鸣器的驱动IO口
  4. unsigned intuiSendCnt=0; //用来识别串口是否接收完一串数据的计时器
  5. unsigned char ucSendLock=1; //串口服务程序的自锁变量,每次接收完一串数据只处理一次
  6. unsigned intuiRcregTotal=0;//代表当前缓冲区已经接收了多少个数据
  7. unsigned char ucRcregBuf[const_rc_size]; //接收串口中断数据的缓冲区数组
  8. unsigned intuiRcMoveIndex=0;//用来解析数据协议的中间变量
  9. unsigned char ucDataBCD4_1[BCD4_MAX]; //接收到的第1个数组合BCD码数组形式这里是指被乘数
  10. unsigned char ucDataBCD4_cnt_1=0;//接收到的第1个数组合BCD码数组的有效数据长度
  11. unsigned char ucDataBCD4_2[BCD4_MAX]; //接收到的第2个数组合BCD码数组形式这里是指乘数
  12. unsigned char ucDataBCD4_cnt_2=0;//接收到的第2个数组合BCD码数组的有效数据长度
  13. unsigned char ucDataBCD4_3[BCD4_MAX]; //接收到的第3个数组合BCD码数组形式这里是指积
  14. unsigned char ucDataBCD4_cnt_3=0;//接收到的第3个数组合BCD码数组的有效数据长度
  15. unsigned char ucDataBCD8_1[BCD8_MAX]; //接收到的第1个数非组合BCD码数组形式 这里是指被乘数
  16. unsigned char ucDataBCD8_cnt_1=0;//接收到的第1个数非组合BCD码数组的有效数据长度
  17. unsigned char ucDataBCD8_2[BCD8_MAX]; //接收到的第2个数非组合BCD码数组形式 这里是指乘数
  18. unsigned char ucDataBCD8_cnt_2=0;//接收到的第2个数非组合BCD码数组的有效数据长度
  19. unsigned char ucDataBCD8_3[BCD8_MAX]; //接收到的第3个数非组合BCD码数组形式 这里是指积
  20. unsigned char ucDataBCD8_cnt_3=0;//接收到的第3个数非组合BCD码数组的有效数据长度
  21. unsigned char ucResultFlag=11; //运算结果标志,10代表计算结果超出范围出错,11代表正常。
  22. void main()
  23. {
  24. initial_myself();
  25. delay_long(100);
  26. initial_peripheral();
  27. while(1)
  28. {
  29. usart_service();//串口服务程序
  30. }
  31. }
  32. /* 注释二:
  33. * 组合BCD码转成非组合BCD码。
  34. * 这里的变量ucBCD4_cnt代表组合BCD码的有效字节数.
  35. * 这里的变量*p_ucBCD8_cnt代表经过转换后,非组合BCD码的有效字节数,记得加地址符号&传址进去
  36. * 本程序在上一节的基础上,略作修改,用循环for语句压缩了代码,
  37. * 同时引进了组合BCD码的有效字节数变量。这样就不限定了数据的长度,
  38. * 可以让我们根据数据的实际大小灵活运用。
  39. */
  40. void BCD4_to_BCD8(const unsigned char *p_ucBCD_bit4,unsigned char ucBCD4_cnt,unsigned char *p_ucBCD_bit8,unsigned char *p_ucBCD8_cnt)
  41. {
  42. unsigned char ucTmep;
  43. unsigned char i;
  44. for(i=0;i
  45. {
  46. p_ucBCD_bit8[i]=0;
  47. }
  48. *p_ucBCD8_cnt=ucBCD4_cnt*2; //转换成非组合BCD码后的有效数据长度
  49. for(i=0;i
  50. {
  51. ucTmep=p_ucBCD_bit4[ucBCD4_cnt-1-i];
  52. p_ucBCD_bit8[ucBCD4_cnt*2-i*2-1]=ucTmep>>4;
  53. p_ucBCD_bit8[ucBCD4_cnt*2-i*2-2]=ucTmep&0x0f;
  54. }
  55. }
  56. /* 注释三:
  57. * 非组合BCD码转成组合BCD码。
  58. * 这里的变量ucBCD8_cnt代表非组合BCD码的有效字节数.
  59. * 这里的变量*p_ucBCD4_cnt代表经过转换后,组合BCD码的有效字节数,记得加地址符号&传址进去
  60. * 本程序在上一节的基础上,略作修改,用循环for语句压缩了代码,
  61. * 同时引进了非组合BCD码的有效字节数变量。这样就不限定了数据的长度,
  62. * 可以让我们根据数据的实际大小灵活运用。
  63. */
  64. void BCD8_to_BCD4(const unsigned char *p_ucBCD_bit8,unsigned char ucBCD8_cnt,unsigned char *p_ucBCD_bit4,unsigned char *p_ucBCD4_cnt)
  65. {
  66. unsigned char ucTmep;
  67. unsigned char i;
  68. unsigned char ucBCD4_cnt;
  69. for(i=0;i
  70. {
  71. p_ucBCD_bit4[i]=0;
  72. }
  73. ucBCD4_cnt=(ucBCD8_cnt+1)/2; //非组合BCD码转化成组合BCD码的有效数,这里+1避免非组合数据长度是奇数位
  74. *p_ucBCD4_cnt=ucBCD4_cnt; //把转换后的结果付给接口指针的数据,可以对外输出结果
  75. for(i=0;i
  76. {
  77. ucTmep=p_ucBCD_bit8[ucBCD4_cnt*2-1-i*2]; //把非组合BCD码第8位分解出来
  78. p_ucBCD_bit4[ucBCD4_cnt-1-i]=ucTmep<4;
  79. 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位分解出来
  80. }
  81. }
  82. /* 注释四:
  83. *函数介绍:清零数组的全部数组数据
  84. *输入参数:ucARRAY_MAX代表数组定义的最大长度
  85. *输入输出参数:*destData--被清零的数组。

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

网站地图

Top