我读的总是错,我参考的是圈圈的代码,
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){ //将数据口设置为输入状态
 C_DDR=0X00; //输入
 C_CR1=0XFF; //上拉
 C_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//////////////////////////////