stm8s +pdiusbd12 无法读ID,请指教

2019-03-23 20:34发布

我读的总是错,我参考的是圈圈的代码, void main(){  CS_CLR;  //CS_N=0;   PG4
 SUSP_CLR; // SUSP=0; PG5
 REST_SET;//RST=1;  PG1
 EOT_SET;//EOT=1; PG0
 DMACK_SET;  //DMACK=1; PG3                          //USB_DATA_OUT   PC_ODR;                         //USB_DATA_IN        PC_IDR;
 id=D12ReadID();  while(1){    nop();  } }     ///////以下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命令
 id=D12ReadByte(); //读回ID号低字节
 id|=((u16)D12ReadByte())<<8; //读回ID号高字节
 return id;
}
////////////////////////End of function////////////////////////////// 此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。