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

📄 bc7281.c

📁 基于f2812的svpwm程序
💻 C
📖 第 1 页 / 共 2 页
字号:
 									// (时钟输出)						
    Dat_In;							// 设定连接DATT(7281.1)的
    								// T4CTRIP"CPU.83"为输入
    								// (回馈接收)
   	EDIS;							// 禁止访问受保护的空间
	Setb_Clk;

    Write_7281(0x12,0x80);			// 初始化BC728x为164模式不反相
    Write_7281(0x10,0xFF);
    
	//Write_7281(0,Disp_Tab[g]);    // 向LED个位(0位)写"g"数据
    //Write_7281(1,Disp_Tab[s]);	// 向LED十位(1位)写"s"数据
	//Write_7281(2,Disp_Tab[b]);	// 向LED百位(2位)写"b"数据
    //Write_7281(3,Disp_Tab[q]);	// Write_7281(3,Disp_Tab[d]&0x7f)
    								// 加小数点;
    								// 向LED千位(3位)写"q"数据,
    								// 以下4行通过译码表由程序译码
   
    Write_7281(0x15,g);				// 向LED个位(0位)写"s"数据,
    								// 以下4行为通过片内译码器0x15
    								// 由硬件进行Hex译码。
    								// 显然硬件译码比程序译码速度快
	Write_7281(0x15,(0x10+s));		// 向LED十位(1位)写"b"数据
    Write_7281(0x15,(0x20+b));		// 向LED百位(2位)写"q"数据
	Write_7281(0x15,(0x30+q));   	// 向LED千位(3位)写"w"数据
	
}


/******************************************************************************
 函数:		Write_7281()
 输入参数: 	第一个形参(unsigned char reg_add)为目标寄存器地址 
 			第二个形参(unsigned char write_data)为要写入的数据
 输出参数: 	无
 功能:		向BC7281写入一个字节.  			
******************************************************************************/
void Write_7281(unsigned char reg_add, unsigned char write_data)
{
	SendByte_7281(reg_add);			// 发送寄存器地址
	SendByte_7281(write_data);		// 发送数据字节
}



/******************************************************************************
 函数:		SendByte_7281()
 输入参数: 	形参(unsigned char send_byte)为需发送的一个字节 
 输出参数: 	无
 功能:		向BC7281发送一个字节 			
******************************************************************************/
void SendByte_7281(unsigned char send_byte)		
{
	Uint16 bit_counter;
	
	EALLOW;					// 允许访问受保护的空间
	Dat_In;					// 设定连接DATT(7281.1)的SDA(T4CTRIP"CPU.83")
							// 为输入(接收7281反馈信号)
 	EDIS;					// 禁止访问受保护的空间
 	
  	do						// do...while,向7281发出一系列脉冲信号,
  							// 直到7281响应将SDA(DATT)拉成低电平
 	{
 	 	Clr_Clk;			// 置CLKK(7281.3)为低电平
 		Delay(100);							
		Setb_Clk;			// 置CLKK(7281.3)为高电平,
							// 即向7281发一个时钟脉冲信号
		Delay(100);
  	}	
	while(Dat);
	
	Clr_Clk;				// 以下4行再发一个脉冲信号,等待DATT重新被拉高
	Delay(5);
	Setb_Clk;
	Delay(5);
	while(!Dat);
										
	EALLOW;
	Dat_Out;						// 设定连接DATT(7281.1)
									// 的Dat(T4CTRIP"CPU.83")为输出
	EDIS;
	for(bit_counter = 0; bit_counter < 8; bit_counter++)		
									
									// 发送8位
	{
		if((send_byte & 0x80) ==0)	// 位传送从最高位开始
		{
			Clr_Dat;				// 位为0,向DATT(7281.1)发送低电平
			}
		else
		{ 
			Setb_Dat;				// 位为1,向DATT(7281.1)发送高电平
		}
//		send_byte=send_byte*2;		// send_byte 左移一位,整备下一次位发送
		send_byte=send_byte<<1;		// send_byte 左移一位,整备下一次位发送

		Clr_Clk;					// MCU每发一个脉冲,即向7281传送一位数据
		Delay(5);			
		Setb_Clk;
		Delay(5);
		
	}										
		Setb_Dat;					// 向DATT(7281.1)发送长高电平8位传送结束
		Delay(100);					// 这里需较长的延时,否则传送错码
}


/******************************************************************************
 函数:		Read_7281()
 输入参数: 	形参(unsigned char reg_add)为需发送的指令字节 
 输出参数: 	无
 功能:		从BC7281读出一个数据字节,它由指令写入操作和数据读出操作两部分
 	  		组成, 字节写入操作写入指令字,数据则由字节读出操作读出			
******************************************************************************/
unsigned char Read_7281(unsigned char reg_add)
{
	SendByte_7281(reg_add|0x80);	// 发送读指令(bit7=1)
	return(ReceiveByte_7281());		// 接收数据字节并返回
}


/******************************************************************************
 函数:ReceiveByte_7281()
 功能:从BC7281接收一个数据字节 			
******************************************************************************/
unsigned char ReceiveByte_7281(void)
{
	Uint16 temp,bit_counter;
	unsigned char receive_byte;
	
	EALLOW;					// 允许访问受保护的空间
	Dat_In;					// 设定连接DATT(7281.1)的SDA(T4CTRIP"CPU.83")
							// 为输入(接收7281反馈信号)
 	EDIS;					// 禁止访问受保护的空间

	Clr_Clk;				// 向7281发出一个脉冲信号
	Delay(5);
	Setb_Clk;
	Delay(5);
	
    do						// do ... while 为直到型循环语句
	{ temp = Dat; }			// 读出SDA(DATT 7281.1的反馈信号)
	while(temp);			// 一直到Dat为低时, 循环结束
	
	Clr_Clk;				// MCU再向7281发出一个脉冲信号,7281在接收
	Delay(5);				// 到这个脉冲信号后,即通过Dat(DATT 7281.1)
	Setb_Clk;				// 线,发送数据位
	Delay(5);
	
	for(bit_counter = 0; bit_counter < 8; bit_counter++)		
											//接收8位
	{
		receive_byte=receive_byte*2;		// 左移一位
		if(Dat)
		{
			receive_byte=receive_byte|0x01;	// 若SDA=1,置最低位为1,否则为0
		}

		Clr_Clk;					// 7281每接收到一个脉冲即发送一个数据位
		Delay(5);
		Setb_Clk;
		Delay(3);

	}
	
	Clr_Clk;				// 当8个数据位(一个字节)读出以后,MCU 
	Delay(5);				// 还必须再多发出一个脉冲,表示数据接收
	Setb_Clk;				// 完毕。7281才能从数据输出状态转成数据
	Delay(5);				// 输入状态,准备接收下一个指令

	EALLOW;					// 允许访问受保护的空间
	Dat_Out;				// 设定连接DATT(7281.1)的T4CTRIP
							// "CPU.83"为输入(回馈接收)
 	EDIS;					// 禁止访问受保护的空间
 	
 	Setb_Dat;				// 向DATT(7281.1)发送长高电平8位传送结束
	Delay(100);				// 这里需较长的延时,否则传送错码

	return(receive_byte);
	
}


/******************************************************************************
 函数:		Delay()
 输入参数: 	形参(unsigned char delay_time)为延时的长短 
 输出参数: 	无
 功能:		写读7281位传送中的延时函数 			
******************************************************************************/
void Delay(unsigned char delay_time)	
{
	Uint16 i;
	for(i = 0; i < (delay_time*3 ); i++)
	{
		asm("	nop");
		asm("	nop");
		asm("	nop");
		asm("	nop");
		asm("	nop");
		}
}	


//===========================================================================
// No more.
//===========================================================================

⌨️ 快捷键说明

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