[mw_shl_code=c,true]//SPI??????
//?ò??????IC????1byte????
//num:????????????
void TP_Write_Byte(u8 num)
{
u8 count=0;
for(count=0;count<8;count++)
{
if(num&0x80)TDIN=1;
else TDIN=0;
num<<=1;
TCLK=0;
TCLK=1; //?????????§
}
}
//SPI??????
//????????IC????adc??
//CMD:????
//·?????:??????????
u16 TP_Read_AD(u8 CMD)
{
u8 count=0;
u16 Num=0;
TCLK=0; //???????±??
TDIN=0; //??????????
TCS=0; //??????????IC
TP_Write_Byte(CMD);//·????ü??×?
delay_us(6);//ADS7846??×????±??×??¤??6us
TCLK=0;
delay_us(1);
TCLK=1; //??1???±????????BUSY
TCLK=0;
for(count=0;count<16;count++)//????16??????,??????12?????§
{
Num<<=1;
TCLK=0; //?????????§
TCLK=1;
if(DOUT)Num++;
}
Num>>=4; //??????12?????§.
TCS=1; //??·?????
return(Num);
}
这是原子哥的软件模拟部分程序
[/mw_shl_code]
我修改如下
[mw_shl_code=c,true]u16 TP_Read_AD(u8 CMD)
{
u8 NumH, NumL = 0;
u16 Num = 0;
TCS = 0; //??????????IC
NumH = SPI1_ReadWriteByte(CMD);
NumL = SPI1_ReadWriteByte(CMD);
TCS = 1; //??·?????
Num = (NumH + NumL) >> 4; //??????12?????§.
return (Num);
}[/mw_shl_code]
[mw_shl_code=c,true]我看模拟的时序好像是写进一个8bit的CMD,得到一个16bit的数据,然后取低12位。[/mw_shl_code]
[mw_shl_code=c,true]硬件如何做到呢...[/mw_shl_code]
|