转码函数问题

[复制链接]
1010|1
 楼主| hlhfootbal 发表于 2014-8-22 11:06 | 显示全部楼层 |阅读模式
  1. #include <stdio.h>

  2. #define DATA_LEN_TEMP 4     //twice DATA_LEN
  3. #define ADDR_LEN_TEMP 4     //twice ADDR_LEN
  4. #define DATA_LEN 2
  5. #define TX_DATA_LEN 16
  6. #define RX_DATA_LEN 16
  7. #define ADDR_LEN 2

  8. unsigned char DevAddr = 0;
  9. unsigned char DataLen = 2;
  10. unsigned char AddrLen = 2;
  11. unsigned char I2CWData[DATA_LEN] = {0};
  12. unsigned char SubAddr[ADDR_LEN] = {0};



  13. unsigned char *CONVERT_DEVCODE_USERCODE(unsigned char *UserBuf,unsigned char *DevBuf)
  14. {
  15.         unsigned char temp[DATA_LEN] = {0};
  16.         unsigned char i = 0;
  17.         unsigned char j = 0;
  18.         unsigned char count = 0;
  19.         unsigned char count1 = 0;
  20.         unsigned char Txdata[TX_DATA_LEN] = {0};
  21.         unsigned char *p;

  22.         p = UserBuf;
  23.        
  24.         if((NULL == UserBuf) || (NULL == DevBuf))
  25.         {
  26.         return NULL;
  27.         }
  28.        
  29.         /*strcpy(temp,buf);*/
  30.         for(i = 0;i< (DataLen*2);i++)
  31.                 *(temp + i) = *(DevBuf + i);

  32.         for(j = 0;j < DataLen;j ++)
  33.         {
  34.                 UserBuf[j*2] = temp[j] / 16;
  35.                 UserBuf[j*2 + 1] = temp[j] % 16 ;
  36.                 count = j * 2 + 1;       
  37.         }

  38.         /*follow the valid data is '\n',others n valid data is null*/
  39.         /*pay attention:the data length must be less than TX_DATA_LEN/2,otherwise will not '\n'*/
  40.         if(count < TX_DATA_LEN)
  41.                 UserBuf[count+1] = 58;
  42.                 else
  43.                         return NULL;
  44.         count1 = count +2;
  45.         for(;count1 < TX_DATA_LEN;count1 ++)
  46.         {
  47.                 UserBuf[count1] = 48;
  48.         }


  49.         /*change machine number to ASCII*/
  50.         for(i = 0;i < TX_DATA_LEN;i++)
  51.         {
  52.                 if(UserBuf[i] >= 0 && UserBuf[i] < 9)
  53.                         UserBuf[i] = UserBuf[i] + '0';
  54.                 else if(UserBuf[i] >= 10 && UserBuf[i] < 16)
  55.                         UserBuf[i] = UserBuf[i] + 55;                                //Txdata[i] = Txdata[i] + 'A' -10
  56.                 else if(UserBuf[i] == 48 || UserBuf[i] == 58)
  57.                         UserBuf[i] = UserBuf[i] -48;
  58.                 else
  59.                         UserBuf[i] = UserBuf[i];
  60.         }
  61.         return p;
  62. }

  63. main(void)
  64. {
  65.         unsigned char DevData[2] = {0xFF,0X0};
  66.         unsigned char UserData[TX_DATA_LEN] = {0x0};
  67.         int i =0;

  68.         CONVERT_DEVCODE_USERCODE(UserData,DevData);

  69.         for(;i < TX_DATA_LEN;i++)
  70.         {
  71.                 printf("%d\n",UserData[i]);
  72.         }
  73. }
以上函数是把设备数据转换成ASCII码。
在VC上仿真,此函数达到了预想功能。
但是在MPLAB IDE v8.80上仿真,CONVERT_DEVCODE_USERCODE(UserData,DevData);执行完,UserData中的数据还是为0。
不知道问题出在哪里了,请各位同学指教。
 楼主| hlhfootbal 发表于 2014-8-25 20:25 | 显示全部楼层
各位,搞定了,谢谢!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

133

主题

417

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部