四极管: 2009年全国电子设计大赛声音引导小车之 MMC驱动

NEC的一款电机驱动芯片···记得当时被他搞死了··

 

整了两天才弄出来··还比个P赛啊··

 #ifndef  MMC_C
#define MMC_C

#include "config_MMC.c"



#ifdef	MMC_PORT_A					//如果为A口
	#define PORT_MMC			PORTA
	#define DDR_MMC			DDRA
#endif
#ifdef	MMC_PORT_B					//如果为B口
	#define PORT_MMC			PORTB
	#define DDR_MMC			DDRB
#endif
#ifdef	MMC_PORT_C					//如果为C口
	#define PORT_MMC			PORTC
	#define DDR_MMC			DDRC
#endif
#ifdef	MMC_PORT_D					//如果为D口
	#define PORT_MMC			PORTD
	#define DDR_MMC			DDRD
#endif

#define RES_MMC(x)  		((x) == 1? (PORT_MMC |= (1 << MMC_RES)):		(PORT_MMC &= ~(1 << MMC_RES)))
#define SLEEP_MMC(x)  	((x) == 1? (PORT_MMC |= (1 << MMC_SLEEP)):	(PORT_MMC &= ~(1 << MMC_SLEEP)))
#define SCK_MMC(x)  		((x) == 1? (PORT_MMC |= (1 << MMC_SCK)):		(PORT_MMC &= ~(1 << MMC_SCK)))
#define SI_MMC(x)  		((x) == 1? (PORT_MMC |= (1 << MMC_SI)):			(PORT_MMC &= ~(1 << MMC_SI)))

void SendData(unsigned char data)
{
	unsigned char n,temp;
	temp=data;
	for(n=0;n<8;)
	{
		SCK_MMC(0);			//拉高时钟线,数据送出
		if(temp&0x80) {SI_MMC(1); }else {SI_MMC(0); }
		_delay_ms(1);
		SCK_MMC(1);			//拉高时钟线,数据送出
		_delay_ms(1);
		n++;
		temp=(temp<<1);
	}
	SCK_MMC(0);
}

void Init_MMC(void)
{
	DDR_MMC |= ((1 << MMC_RES) | (1 << MMC_SLEEP));			//RESTE,SLEEP 控制线设置为输出状态
	DDR_MMC |= ((1 << MMC_SCK) |(1 << MMC_SI));					//SCK,SO 控制线设置为输出状态

	RES_MMC(0);
	SI_MMC(0);
	SLEEP_MMC(1);				//非睡眠模式
	_delay_ms(4);					//MMC复位延时
	
	RES_MMC(1);					//MMC-1上电
	SLEEP_MMC(1);
	_delay_ms(4);					//主控 MCU 延时 50us,等待 MMC-1初始化结束
	
	SendData(0x5C);
	SendData(0x00);			//选择通道 2(右轮) 占空比基础器		
	_delay_ms(4);
}


void MMC(uchar LeftWay,uchar RightWay,uchar LeftData,uchar RightData)
{
	SendData(0x5B);
	SendData(LeftData * 5 / 2);			//选择通道 1(左轮) 占空比基础器		
	_delay_ms(5);
	
	SendData(0x53);
	SendData(RightData* 5 / 2);			//选择通道 1(左轮) 占空比基础器		
	_delay_ms(5);
	
	
	SendData(0x50);
	if(LeftWay) 
	{SendData(0xC0); } else
	{SendData(0xE0); }						//选择通道 1(左轮) 占空比基础器		
	_delay_ms(5);
	
	SendData(0x58);
	if(RightWay) 
	{SendData(0xC0); } else				//选择通道 2(右轮) 占空比基础器		
	{SendData(0xE0); }	
	_delay_ms(5);
	
}


#endif


 

配置文件

 

#ifndef   CONFIG_MMC_C
#define  CONFIG_MMC_C

/*  配置文件  */
#define   MMC_PORT_A

#define MMC_RES    PA3   //RESET
#define MMC_SLEEP   PA2  //SLEEP

#define MMC_SCK   PA0  //SCK 时钟线
#define MMC_SI    PA1
/*  配置文件 */
/************/
#endif

 

 

 

转载请注明出处。作者:四极管。广西师范大学 电子工程学院大学生科技创新基地 邮箱: [email protected]

 

你可能感兴趣的:(c,delay)