你读出来了没有?我读的总是错,我参考的是圈圈的代码,但是用的是 STM8S,我也刚刚弄D12,交流交流,Q:4545138
以下我的程序
void main(){
u16 id;
CS_CLR; //CS_N=0; SUSP_CLR; // SUSP=0; REST_SET;//RST=1; EOT_SET;//EOT=1; DMACK_SET; //DMACK=1; id=D12ReadID();
while(1;
}
///////以下D12ReadID()用到的子函数部分////////////////
/*******************************************************************函数功能:将数据口设置为输入状态入口参数:返 回:备 注:********************************************************************/D12SetPortIn(void){ //将数据口设置为输入状态 PC_DDR=0X00; //输入 PC_CR1=0XFF; //上拉 PC_CR2=0X00; //无中断 }////////////////////////End of function//////////////////////////////********************************************************************函数功能:将数据口设置为输出状态入口参数:返 回:备 注:********************************************************************/D12SetPortOut(void){ //将数据口设置为输出状态 PC_DDR=0XFF; //输出 PC_CR1=0XFF; //退挽输出 PC_CR2=0XFF; //10MHZ }////////////////////////End of function//////////////////////////////********************************************************************函数功能:将数据写到数据线上入口参数:x_data,需要输出的数据返 回:备 注:********************************************************************/D12SetData(u8 x_data){ D12SetPortIn();////将数据口设置为输入状态 USB_DATA_OUT=x_data; //}////////////////////////End of function//////////////////////////////******************************************************************函数功能:D12写命令。入口参数:Command:一字节命令。返 回:无。备 注:无。********************************************************************/void D12WriteCommand(u8 Command){ //D12SetCommandAddr(); //设置为命令地址 USB_A0_SET;
//D12ClrWr(); //WR置低 USB_WR_CLR;
D12SetPortOut(); //将数据口设置为输出状态(注意这里为空宏,移植时可能有用) D12SetData(Command); //输出命令到数据口上
//D12SetWr(); //WR置高 USB_WR_SET;
D12SetPortIn(); //将数据口设置为输入状态,以备后面输入使用}////////////////////////End of function//////////////////////////////
/********************************************************************函数功能:写一字节D12数据。入口参数:无。返 回:写一字节。备 注:无。********************************************************************/u8 D12GetData(void){ D12SetPortOut; return USB_DATA_OUT; }////////////////////////End of function/////////////////////////////
/********************************************************************函数功能:读一字节D12数据。入口参数:无。返 回:读回的一字节。备 注:无。********************************************************************/u8 D12ReadByte(void){ u8 temp; //D12SetDataAddr(); //设置为数据地址 USB_A0_CLR; //D12ClrRd(); //RD置低 USB_RD_CLR;
temp=D12GetData(); //读回数据 //D12SetRd(); //RD置高 USB_RD_SET; return temp; //返回读到数据}////////////////////////End of function/////////////////////////////
/********************************************************************函数功能:读D12的ID。入口参数:无。返 回:D12的ID。备 注:无。********************************************************************/u16 D12ReadID(void){ u16 id; //D12WriteCommand(Read_ID); //写读ID命令 Read_ID=0xfd
D12WriteCommand(0xfd); //写读ID命令 Read_ID=0xfd id=D12ReadByte(); //读回ID号低字节 id|=((u16)D12ReadByte())<<8; //读回ID号高字节 return id;}////////////////////////End of function//////////////////////////////