打印
[51单片机]

在使用STC单片机硬件SPI读取A/D芯片TLC2543遇到的问题请教?

[复制链接]
693|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
xu0801hua|  楼主 | 2015-12-3 14:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

/*************************************************************************
* 名称: SPI_MasterInit                                                                                                         
* 功能: SPI主机模式初始化                                                                                                               
* 参数: 无
* 返回: 无                                                                                                           
*************************************************************************/
void SPI_MasterInit(void)
{

SPCTL  = 0xce; //SSIG  SPEN  DORD  MSTR  CPOL  CPHA  SPR1  SPR0  
SPSTAT = 0XC0; //SPDAT.7和SPDAT.6写11,可以将中断标志清零。注意是写1才清零
SPDAT  = 0x00; // 数据寄存器清空
}
/*************************************************************************
* 名称: void SPI_MasterTransmit(uint8_t cData)                                                                                                         
* 功能: SPI主机模式传送数据                                                                                                               
* 参数: cData 要传输的字节数据                                                                                                               
* 返回: SPI接收值                                                                                                           
*************************************************************************/
unsigned char SPI_MasterTransmit(unsigned char cData)
{
SPSTAT=0xc0;           // 每次传输完成都要清除标志位,因为传完一个字节就置1了
SPDAT=cData;
while(!(SPSTAT&0x80)); // 重要,判断标识位,等待SPI传送结束才能开始下一步
return SPDAT;
}
/*************************************************************************
* 名称: Tlc2543_GetAdc
* 功能: 获取指定通道前一次转换结果                                                                                                               
* 参数: cChannel通道                                                                                                               
* 返回: 12位ADC
*************************************************************************/
unsigned int Tlc2543_GetAdc(unsigned char cChannel)
{
unsigned char tmp;
unsigned int dAdc;
cChannel = (cChannel << 4) | 0x0C; //16(伪)位精度MSB在先
CS=0;
dAdc = SPI_MasterTransmit(cChannel); //高位字节  
tmp = SPI_MasterTransmit(cChannel); //地位字节
CS=1;
dAdc <<= 8;
dAdc |= tmp;
dAdc >>= 4; //去12位有效位
return dAdc;
}
我在主函数中进行读取AD通道值,为什么会是在“while(!(SPSTAT&0x80));”?
请教各位这是为什么?会死在等待?我按照资料上的要求写的程序?这是怎么回事?

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

34

主题

81

帖子

1

粉丝