将char变量转换为unsigned int

ver*_*dra 2 c embedded avr

我试图将char变量转换为Unsigned int.我的代码是

char spi(char data) 
{ 
    //Start transmision 
    SPDR = data; 
    //Wait for transmision complete 
    while(!(SPSR & 0x80)); 
    return SPDR; 
} 

unsigned int ReadAd(void) 
{ 
    unsigned int data; 

    ChipSelectAd(1); 
    //Read data 
    CheckStatus();                                            
    spi(0x58);                                                
    data = (spi(0xFF)<< 8);    
    data |= spi(0xFF);         

    return data; 
} 
Run Code Online (Sandbox Code Playgroud)

实际上我的问题是spi函数返回一个8位字符,所以上面的代码将char变量左移8bits然后将它分配给一个16位变量,结果总是为0.为了实际将数据移到左边我需要首先将它们转换为16位类型的变量.我试过这样的

char spi(char data) 
{ 
    //Start transmision 
    SPDR = data; 
    //Wait for transmision complete 
    while(!(SPSR & 0x80)); 
    return SPDR; 
} 

unsigned int ReadAd(void) 
{ 
    unsigned int data; 

    ChipSelectAd(1); 
    //Read data 
    CheckStatus();                                            
    spi(0x58);                                                
    data = (unsigned int)((unsigned char)spi(0xFF)<< 8);    
    data |= (unsigned int)((unsigned char)spi(0xFF));         

    return data; 
} 

void CheckStatus(void)
{
//char adcStatus;
adcStatus = 0xFF;                                           
//Read status
while(!(adcStatus & 0x80))
{
    spi(0x40);
    adcStatus = spi(0xFF);
 }
}

void ChipSelectAd(char s)
{


if(s == 1){
    PORTB.3 = 0;    //Switch on ADC
    //while(PINB.3);  //Wait for chip select pin
}
    else
        PORTB.3 = 1;    //Switch off ADC
 }
Run Code Online (Sandbox Code Playgroud)

它不起作用.请建议我必须使用哪个功能.

提前致谢.

Jen*_*ens 5

你的问题不是演员表.由于整体推广规则,没有它们的情况也是如此.

#include <stdio.h>

char spi ( char data )
{
  char SPDR = data;
  return SPDR;
}

unsigned int ReadAd ( void )
{
  unsigned int data;

  data = spi ( 0x81 ) << 8;
  data |= spi ( 0x42 );

  return data;
}

int main ( void )
{
  printf ( "Result %x\n", ReadAd() );
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

Result ffff8142在char是有符号类型的系统上输出.要解决实际问题,请尝试确定spi()调用变量的值,然后打印它们的值.还请告诉我们声明/定义SPDR.