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

📄 atflashrdwt.c

📁 本人用AVR mega32写的一个关于输出32路PWM的程序
💻 C
字号:
#define   EXT_FLASH_GLOBALS
#include "includes.h" 


/************************************************************
 Function Name:  T0Close
 Function:       Timer0 close
 Paramenter:     None               
 Return value:   None                     
 Author:         Chen yuan zhen May.30.2008 
*************************************************************/
/*SPI接口初始化*/
void SPI_MasterInit(void) 
{

	DDRB |= (1<<PB0) |(1<<PB1)| (1<<PB2);		        /* 设置MOSI 和SCK 为输出,其他为输入 */
	SPCR = (1<<SPE) | (1<<MSTR);		                /* 使能SPI 主机模式,设置时钟速率为fck/4 */
}




/************************************************************
 Function Name:  T0Close
 Function:       Timer0 close
 Paramenter:     None               
 Return value:   None                     
 Author:         Chen yuan zhen May.30.2008 
*************************************************************/
void SPITransfer(unsigned char data)
{
    SPDR = data;
	while (!(SPSR & (1<<SPIF))); 		/* 等待传输结束 */	
}


/************************************************************
 Function Name:  T0Close
 Function:       Timer0 close
 Paramenter:     None               
 Return value:   None                     
 Author:         Chen yuan zhen May.30.2008 
*************************************************************/
unsigned char SPIReceive(void)
{
    SPDR=0x00;
	while (!(SPSR & (1<<SPIF))); 		/* 等待传输结束 */
	return SPDR;
}


/************************************************************
 Function Name:  T0Close
 Function:       Timer0 close
 Paramenter:     None               
 Return value:   None                     
 Author:         Chen yuan zhen May.30.2008 
*************************************************************/
/*SPI数据发送*/
void SPI_MainMPageRead(unsigned char AD1,unsigned char AD2,unsigned char AD3,unsigned char *p)
{
    unsigned char i;
   	PORTB &= ~(1 << 0);					/*开始*/
    SPITransfer(0xD2);	
    SPITransfer(AD1);	
    SPITransfer(AD2);	               
    SPITransfer(AD3);		
	                                   /*4 dont care byte*/
	SPITransfer(0x00);	
	SPITransfer(0x00);	
	SPITransfer(0x00);	
	SPITransfer(0x00);
    

	for(i=0x00;i<32;i++)
    {
        *(p+i)=SPIReceive( );
	}
	PORTB |= (1 << 0);					/*结束*/		 	
}


/************************************************************
 Function Name:  T0Close
 Function:       Timer0 close
 Paramenter:     None               
 Return value:   None                     
 Author:         Chen yuan zhen May.30.2008 
*************************************************************/
void SPI_BufferWrite(unsigned char ByteA1,unsigned char ByteA2,unsigned char *p)
{
    unsigned char i;
   	PORTB &= ~(1 << 0);					/*开始*/
    SPITransfer(0x84);
    SPITransfer(0x00);	
    SPITransfer(ByteA1);	               
    SPITransfer(ByteA2);
	for(i=0;i<32;i++)
    {
        SPITransfer(*(p+i));
	}
	PORTB |= (1 << 0);					/*结束*/
}



/************************************************************
 Function Name:  T0Close
 Function:       Timer0 close
 Paramenter:     None               
 Return value:   None                     
 Author:         Chen yuan zhen May.30.2008 
*************************************************************/
void SPI_BufferToMainMPage(unsigned char PageA1,unsigned char PageA2)
{
   	PORTB &= ~(1 << 0);					/*开始*/
    SPITransfer(0x83);
    SPITransfer(PageA1);	
    SPITransfer(PageA2);	               
    SPITransfer(0x00);
	PORTB |= (1 << 0);					/*结束*/
}



/************************************************************
 Function Name:  T0Close
 Function:       Timer0 close
 Paramenter:     None               
 Return value:   None                     
 Author:         Chen yuan zhen May.30.2008 
*************************************************************/
void WriteBigStep(unsigned char Mode,int BigStep)
{
     unsigned char Adress1,Adress2;
     int page,byte;
	 page=Mode*100+BigStep/16;
     byte=(BigStep%16)*32;    //BigStep从0开始
	 Adress1 =  byte/256;
	 Adress2 =  byte%256;
	 SPI_BufferWrite(Adress1,Adress2,StepData);
	 if((byte>=480)||(DL_REALY_OVER))
	 {
	     page=page<<2;
	     Adress1 =  page/256;
         Adress2 =  page%256;
		 SPI_BufferToMainMPage(Adress1,Adress2);
	 }

}



/************************************************************
 Function Name:  T0Close
 Function:       Timer0 close
 Paramenter:     None               
 Return value:   None                     
 Author:         Chen yuan zhen May.30.2008 
*************************************************************/
void Read32(unsigned char Mode,int BigStep)
{
     unsigned char Adress1,Adress2,Adress3;
     int page,byte;
	 page=Mode*100+BigStep/16;
     byte=(BigStep%16)*32;
	 page=page<<2;
	 Adress1 =  page/256;
     Adress2 =  page%256+byte/256;
     Adress3 =  byte%256;
	 SPI_MainMPageRead(Adress1,Adress2,Adress3,StepData);
}

⌨️ 快捷键说明

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