问个函数问题

2010年11月16日 12:28    发布者:@︻$▅▆▇◤
函数是这样的:
void update_LCD_display(u8 my_mode_1 , u16 my_data_1 );


void update_LCD_display(u8 my_mode_1, u16 my_data_1)
{
  
        my_mode = my_mode_1;
        mydata = my_data_1;
  。。。。。。。。。。。
}
my_mode 定义为8位,mydata定义为16位,为全局变量(XDATA)。
我使用这个函数update_LCD_display(8,333),按道理my_data_1应该是333的,
可实际上是77,这是什么原因呢?

网友评论

mxh0506 2010年11月16日
不多说了:
333 = 0x14D
77 = 0x4D
@︻$▅▆▇◤ 2010年11月16日
为什么会少了8位?
McuPlayer 2010年11月16日
没问题,你重新编译下试试看

编译选择“Build All”
并且把优化改成最低
@︻$▅▆▇◤ 2010年11月16日
Build All也一样
老郭 2010年11月16日
这里人多,问个问题:L
老郭 2010年11月16日
强拆
dy031 2010年11月16日
你确定是定义是16位吗?你用的是什么编译器
@︻$▅▆▇◤ 2010年11月16日
keil C51
kbgyzp 2010年11月16日
void update_LCD_display(u8 my_mode_1, u16 my_data_1)
{
  
        my_mode = my_mode_1;
        mydata = my_data_1;
  。。。。。。。。。。。
}
这个函数里可能隐性强制转换成8位的了。能把你这个函数贴全吗?尤其bcd转换部分
@︻$▅▆▇◤ 2010年11月17日
xdata u8 my_mode;
xdata u16 mydata;
void code_data_convert( u16 mydata_2 )
{
     RD8_RETURN = (u8)(mydata_2 / 100) ;       //Hundreds
     RD8_TEMP1 =  (u8)((mydata_2 % 100)/10) ;      //tens
     RD8_TEMP2 =  (u8)(mydata_2 % 10) ;            //ones
}

void update_LCD_display(u8 my_mode_1, u16 my_data_1)
{
  
        my_mode = my_mode_1;
        mydata = my_data_1;
       code_data_convert( mydata );
.......................
  }
terrysun 2010年11月22日
U16 宏定义?
@︻$▅▆▇◤ 2010年11月23日
问题已解决,是外部环境的问题。
dy031 2010年11月29日
奇怪,外部环境会造成强制转换吗
lyralos 2010年12月13日
你用的是什么编译器
wave 2010年12月14日
“我使用这个函数update_LCD_display(8,333),按道理my_data_1应该是333的,可实际上是77,这是什么原因呢?”


333-256=77。截断高字节
gillin 2010年12月14日
333 = 0x14D
77 = 0x4D
WHM020427 2010年12月15日
不错,我来拾分的
dianxin 2010年12月17日
我来拾分的
王兴梅 2010年12月24日
外部环境?不懂。
ljc424 2011年02月16日
路过
rp006 2011年02月20日
that is interesting!