请问用过AD7844的大哥,今天调试AD7844 12位8路串行AD。
出现一个诡异的问题 BUSY端出现脉冲信号 也就是说我写命令正常并且他已经传唤完成,传送结果。不管我测多大的电压 MCU收到的全是0,而且用示波器看 输出数据的脉冲峰峰值只有640mv。
请大家帮我看看 http://article.**/Analog/20080113090014.htm这是找的资料
这是我的程序
#include "config.h"
#include "12864MENU.h"
sbit c_SPI_CS = P2^2;
sbit c_SPI_SI = P2^1; //MO DIN
sbit c_SPI_SO = P0^0; //MI DOUT
sbit c_SPI_CLK = P2^3;
#define Macro_Set_SI_High() c_SPI_SI = 1
#define Macro_Set_SI_Low() c_SPI_SI = 0
#define Macro_Set_CLK_High() c_SPI_CLK = 1
#define Macro_Set_CLK_Low() c_SPI_CLK = 0
#define Set_CS_Low() c_SPI_CS = 0
#define Set_CS_High() c_SPI_CS = 1
INT16U ADC_Value;
INT8U ADC_Value_Arr[8];
void SPI_SendByte(INT8U ucSendData)
{
INT8U ucCount;
INT8U ucMaskCode;
ucMaskCode = 0x01;
for(ucCount=0; ucCount<8; ucCount++)
{
Macro_Set_CLK_Low();
if(ucMaskCode & ucSendData)
{
Macro_Set_SI_High();
}
else
{
Macro_Set_SI_Low();
}
Macro_Set_CLK_High();
ucMaskCode <<= 1;
}
_nop_();
_nop_();
_nop_();
}
/*******************************************************************************************************************
** º¯ÊýÃû³Æ: INT8U SPI_RecByte() Name: INT8U SPI_RecByte()
** ¹¦ÄÜÃèÊö: ´ÓSPI½Ó¿Ú½ÓÊÕÒ»¸ö×Ö½Ú Function: receive a byte from SPI inte**ce
** Êä¡¡ Èë: ÎÞ Input: NULL
** Êä ¡¡ ³ö: ÊÕµ½µÄ×Ö½Ú Output: the byte that be received
********************************************************************************************************************/
INT8U SPI_RecByte(void)
{
INT8U ucReadData;
INT8U ucCount;
ucReadData = 0;
Macro_Set_SI_Low();
c_SPI_SO=1;
for(ucCount=0; ucCount<8; ucCount++)
{
ucReadData <<= 1;
Macro_Set_CLK_High();
_nop_();_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();_nop_();
Macro_Set_CLK_Low();
//c_SPI_SO=1;
if(c_SPI_SO)
{
ucReadData|= 0x01;
}
//else ucReadData &=~0x01;
}
return(ucReadData);
}
INT16U AD7844_Value(void)
{ INT8U HData,LData;
INT16U AllData;
Set_CS_Low();
SPI_SendByte(0x8f); //³õʼ»¯ д¿ØÖÆ×Ö ¿ªÆô0ͨµÀת»»
_nop_();_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();_nop_();
c_SPI_SO=1;
HData=SPI_RecByte();
//for(i=50;i>0;i--)
LData=SPI_RecByte();
//Set_CS_High();
LData=LData&0xf0;
LData>>=4;
AllData=HData;
AllData<<=4;
AllData=AllData|LData;
return(AllData);
} |