⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pdiusbd12.c

📁 AVR单片机 C语言程序设计经典实用
💻 C
字号:


#include <iom16v.h>
#include <macros.h>
#include "define.h"
#include "initial.h"
#include "pdiusbd12.h"


void Output_D12(uchar Address,uchar Data)
{

	PORTD |=(1<<ALE); 
	DDRC=0xff;
	PORTC=Address; 
	NOP();
	PORTD &=~(1<<ALE); 
	PORTC=Data;
	PORTD &=~(1<<D12WR); 
	NOP(); 
	NOP();
	PORTD |=(1<<D12WR);
}



uchar Input_D12(uchar Address)
{

	uchar temp;
	PORTD |=(1<<ALE);
	DDRC=0xff ;
	PORTC=Address; 
	NOP();
	PORTD &=~(1<<ALE); 
	DDRC=0x00;
	PORTC=0xff;  
	PORTD &=~(1<<D12RD);
	NOP();
	temp=PINC;
	PORTD |=(1<<D12RD);
	return temp;

}



uint D12_ReadChipID()
{
	uint aa,bb;
	Output_D12(COMMAND,0xFD);
	aa=Input_D12(DATA);
	bb=Input_D12(DATA);
	aa +=(bb<<8);
	return aa;
}



void D12_SetAddress(uchar address,uchar enable)
{
	if(bEPPflags.bits.in_isr == 0)
		
		DISABLE;
	if(enable)
	address |=0x80;
	Output_D12(COMMAND,0xD0); 
	Output_D12(DATA,address);
	if(bEPPflags.bits.in_isr == 0)
		//EA=1;
		ENABLE;
}


void D12_SetEndpointEnable( uchar aa)
{
	if(bEPPflags.bits.in_isr == 0)
		//EA=0;
		DISABLE;
	Output_D12(COMMAND,0xD8);
	Output_D12(DATA, aa);		

	if(bEPPflags.bits.in_isr == 0)
		//EA=1;
		ENABLE;
}


void D12_SetMode(uchar configuration,uchar division)
{
	Output_D12(COMMAND,0xF3);
	Output_D12(DATA,configuration);
	Output_D12(DATA,division);
}


void D12_SetDMA()
{
	Output_D12(COMMAND,0xFB);
	Output_D12(DATA,0);
}


uint D12_ReadInterruptRegister()
{
	uint a,b;
	Output_D12(COMMAND,0xF4);
	a=Input_D12(DATA);
	b=Input_D12(DATA);
	a+=(b<<8);
	return a;	
}


uchar D12_SelectEndpoint(uchar num_point)
{
	uchar temp;
	if(bEPPflags.bits.in_isr == 0)
		//EA=0;
		DISABLE;
	Output_D12(COMMAND,num_point);
	temp=Input_D12(DATA);
	if(bEPPflags.bits.in_isr == 0)
		//EA=1;
		ENABLE;
	return temp;
}



uchar D12_ReadLastStatus(uchar num_point)
{
	uchar aa,temp;
	aa=0x40+num_point;
	Output_D12(COMMAND,aa);
	temp=Input_D12(DATA);	
	return temp;
}

void D12_SetEndpointStatus(uchar endpoint,uchar status)
{
		if(bEPPflags.bits.in_isr == 0)
			//EA=0;
			DISABLE;
		Output_D12(COMMAND,0x40+endpoint);
		Output_D12(DATA,status);
		if(bEPPflags.bits.in_isr == 0)
			//EA=1;
			ENABLE;
}




void D12_Ackonwledge(uchar Endp)
{
	Output_D12(COMMAND,Endp); 
	Output_D12(COMMAND,0xf1);
	if(Endp==0)
		Output_D12(COMMAND,0xf2);
}


uchar D12_WriteEndpoint(uchar Endp,uchar leng,uchar volatile * buff)
{
	uchar temp;
	if(bEPPflags.bits.in_isr == 0)
		DISABLE;  //EA=0;

	Output_D12(COMMAND, Endp);
	temp=Input_D12(DATA);

	Output_D12(COMMAND,0xF0); 
	
	Output_D12(DATA,0);	
	Output_D12(DATA,leng); 

	for(temp=0;temp<leng;temp++)
	{
		Output_D12(DATA,*(buff+temp));
	}

	Output_D12(COMMAND,0xFA);  

	if(bEPPflags.bits.in_isr == 0)
		ENABLE; //EA=1;
	return leng;

}


uchar const_WriteEndpoint(uchar Endp,uchar leng,const uchar * buff)
{
	uchar temp;
	if(bEPPflags.bits.in_isr == 0)
		DISABLE;  //EA=0;

	Output_D12(COMMAND, Endp);
	temp=Input_D12(DATA);

	Output_D12(COMMAND,0xF0); 
	
	Output_D12(DATA,0);	
	Output_D12(DATA,leng); 

	for(temp=0;temp<leng;temp++)
	{
		Output_D12(DATA,*(buff+temp));
	}

	Output_D12(COMMAND,0xFA); 

	if(bEPPflags.bits.in_isr == 0)
		ENABLE; //EA=1;
	return leng;

}


uchar D12_ReadEndpoint(uchar Endp,uchar leng,uchar volatile *buff)
{
	uchar temp,i,j;
	if(bEPPflags.bits.in_isr == 0)
		DISABLE; //EA=0;
	temp=D12_SelectEndpoint(Endp);
	if(temp & 0x01)
	{	
		Output_D12(COMMAND,0xf0);     
		j=Input_D12(DATA);  
		j=Input_D12(DATA);				
		if(j>leng) 
			j=leng;
		for(i=0;i<j;i++)
			*(buff+i)=Input_D12(DATA);
		Output_D12(COMMAND,0xf2);  
		return j;
	}
	else 
	{	if(bEPPflags.bits.in_isr == 0)
			DISABLE;  //EA=0;
		return 0;
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -