我试图将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)
它不起作用.请建议我必须使用哪个功能.
提前致谢.
你的问题不是演员表.由于整体推广规则,没有它们的情况也是如此.
#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.