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

📄 lib.c

📁 各种实用的子程序
💻 C
📖 第 1 页 / 共 5 页
字号:
	*(QSM_TxRAM+13)=0x00;	*(QSM_CmRAM+13)=0xB5;		// 输出数据(数据) 
	*(QSM_TxRAM+14)=0x61;	*(QSM_CmRAM+14)=0x35;		// 输出数据(数据) 
	*QSM_SPCR1=0x9407;									// QSPI允许
	for (sts=0;sts<10;sts++);
	while ((*QSM_SPSR&0x80)==00);						// 等待传输完成
	//*QSM_QPDR &= 0xEF;
}
















int16   ad_temp;
int16	Read_AD7856(uint8 ch)		 
{
	uint8 sts,i;
//
	asm (" MOVE.B $FFFC1F,D1");	// QSPI标志清零
	asm (" MOVE.B #0,$FFFC1F");
	*QSM_SPCR1=0x1407;		// QSPI禁止、SCK之前延时20、SCK之后延时7
	*QSM_SPCR0=0xA011;		// QSPI主机方式、每次传送8位、速率 1Mbps
	*QSM_SPCR2=0x0100;		// 队列结束指针为8、队列开始指针为0,禁止中断、环绕
	*QSM_SPCR3=0x00;		// 禁止反馈路径、中断、暂停
	*QSM_QPDR |= 0x20;
   	*(QSM_TxRAM+0) =ch;		*(QSM_CmRAM+0)=0xB9;	// 输出数据
	*(QSM_TxRAM+1) =0x10;	*(QSM_CmRAM+1)=0x39;	// 输出数据
	*QSM_SPCR1=0x9407;
	while ((*QSM_SPSR&0x80)==00);						// 等待传输完成
//等待转换结束
    for (sts=0;sts<50;sts++);
	asm (" MOVE.B $FFFC1F,D1");	// QSPI标志清零
	asm (" MOVE.B #0,$FFFC1F");
	*QSM_SPCR1=0x1407;		// QSPI禁止、SCK之前延时20、SCK之后延时7
	*QSM_SPCR0=0xA011;		// QSPI主机方式、每次传送8位、速率 1Mbps
	*QSM_SPCR2=0x0100;		// 队列结束指针为8、队列开始指针为0,禁止中断、环绕
	*QSM_SPCR3=0x00;		// 禁止反馈路径、中断、暂停
	*QSM_QPDR |= 0x20;
   	*(QSM_TxRAM+0) =00;		*(QSM_CmRAM+0)=0xB9;		// 输出数据
	*(QSM_TxRAM+1) =00;	    *(QSM_CmRAM+1)=0x39;		// 输出数据
	*QSM_SPCR1=0x9407;
	while ((*QSM_SPSR&0x80)==00);						// 等待传输完成
    for (sts=0;sts<10;sts++);
	ad_temp=(*(QSM_RxRAM+0))*256 + (*(QSM_RxRAM+1));
//
	return (ad_temp);	// 返回读入数据字

}
int16	Read_AD7856_Status()		 
{
	uint8 sts,i;
//
	asm (" MOVE.B $FFFC1F,D1");	// QSPI标志清零
	asm (" MOVE.B #0,$FFFC1F");
	*QSM_SPCR1=0x1407;		// QSPI禁止、SCK之前延时20、SCK之后延时7
	*QSM_SPCR0=0xA011;		// QSPI主机方式、每次传送8位、速率 1Mbps
	*QSM_SPCR2=0x0100;		// 队列结束指针为8、队列开始指针为0,禁止中断、环绕
	*QSM_SPCR3=0x00;		// 禁止反馈路径、中断、暂停
   	*(QSM_TxRAM+0) =0x40;	*(QSM_CmRAM+0)=0xB9;	// 输出数据
	*(QSM_TxRAM+1) =0x02;	*(QSM_CmRAM+1)=0x39;	// 输出数据
	*QSM_SPCR1=0x9407;
	while ((*QSM_SPSR&0x80)==00);					// 等待传输完成
}















uint8	KR_Select_buf=0;
void	xtr_clk_low()	//XE0-CLK-HIGH		
{
//	 KR_Select_buf  &=~01;
//	*KR_Select		=KR_Select_buf;

	*QSM_QPDR &= ~0x04; 
}				
void	xtr_clk_high()	//XE0-CLK-LOW		
{
//	 KR_Select_buf  |= 01;
//	*KR_Select		=KR_Select_buf;

	*QSM_QPDR |= 0x04; 
}				
void	xtr_cs_low()	//XE1-CS-HIGH		
{
//	 KR_Select_buf  &=~02;
//	*KR_Select		=KR_Select_buf;
	*QSM_QPDR &=~ 0x40;
}				
void	xtr_cs_high()	//XE1-CS-LOW		
{	
//	 KR_Select_buf  |= 02;
//	*KR_Select		=KR_Select_buf; 

	*QSM_QPDR |= 0x40;
}				
void	xtr_out_low()	//XE2-OUT-HIGH		
{
//	 KR_Select_buf  &=~04;
//	*KR_Select		=KR_Select_buf; 

	*QSM_QPDR &=~ 0x02;
}				
void	xtr_out_high()	//XE2-OUT-LOW		
{
//	 KR_Select_buf  |= 04;
//	*KR_Select		=KR_Select_buf;

	*QSM_QPDR |= 0x02;
}				
//	asm (" nop ");					//nop
void writer_xtr_one(uint8 dat)
{
	uint8	i;
	xtr_clk_low();
	xtr_cs_low();
	for(i=0;i<8;i++)
	{
		xtr_clk_low();
		if(dat&0x80)	xtr_out_high();
		else			xtr_out_low();
		dat=(dat<<1);
		xtr_clk_high();
	}
}
void initialize_xtr()	//2ms
{
	xtr_cs_high();
//	xtr_clk_high();
	writer_xtr_one(0x00);
	writer_xtr_one(0x80);
	xtr_cs_high();
//	xtr_clk_high();
	writer_xtr_one(0x04);
	writer_xtr_one(0x01);
	writer_xtr_one(0x0f);
	writer_xtr_one(0x04);
	writer_xtr_one(0x00);
	writer_xtr_one(0x14);
	writer_xtr_one(0x14);

	writer_xtr_one(0x00);
	writer_xtr_one(0x00);
	writer_xtr_one(0x00);
	writer_xtr_one(0x00);
	writer_xtr_one(0x00);

	writer_xtr_one(0xC3);

	xtr_cs_high();


}












//--------------------------------------------------------------------------------------------------

void    RD_time(R_CLOCK *addr)
        {
       /* *CLKcontrol = 0x40;
        addr->Micros = *CLKmicros;
        addr->Second = *CLKsecond & 0x7F;
        addr->Minute = *CLKminute & 0x7F;
        addr->Hour   = *CLKhour   & 0x3F;
        addr->Date   = *CLKdate   & 0x3F;
        addr->Month  = *CLKmonth  & 0x1F;
        addr->Year   = *CLKyear;
        *CLKcontrol = 0x00;*/
        }

void    WR_time(R_CLOCK *addr)
        {
        /**CLKcontrol = 0x80;
        *CLKmicros = addr->Micros;      
        *CLKsecond = addr->Second;
        *CLKminute = addr->Minute;
        *CLKhour   = addr->Hour;
        *CLKdate   = addr->Date;
        *CLKmonth  = addr->Month;
        *CLKyear   = addr->Year;  
        *CLKcontrol = 0x00;*/
        }

//--------------------------------------------------------------------------------------------------

void	MEM_clear(uint8 *ptr,uint16 N)                          // 存储器清零
{
	register uint16 i;
	for (i=0;i<N;i++)
	{
	        *ptr++ = 0;
	}
}

void	MEM_setup(uint8 *ptr,uint16 N,uint16 W)                 // 存储器置数
	{
	register uint16 i;
	for (i=0;i<N;i++)
	        {
	        *ptr++ = W;
	        }
	}

void	MEM_copy(uint8 *Sptr,uint8 *Dptr,uint16 N)              // 存储器拷贝
	{
	register uint16 i;
	for (i=0;i<N;i++)
	        {
	        *Dptr++ = *Sptr++;
	        }
	}

void	Bit_clr(uint8 *adr,uint8 num)			        // 位清除函数
	{
	*(adr+num/8) &= ~(1<<(num%8));
	}

void	Bit_set(uint8 *adr,uint8 num)			        // 位置位函数
	{
	*(adr+num/8) |=  (1<<(num%8));
	}

void	Bit_cpl(uint8 *adr,uint8 num)			        // 位取反函数
	{
	*(adr+num/8) ^=  (1<<(num%8));
	}

void	Bit_asn(uint8 *adr,uint8 num,uint8 sts)		        // 位置值函数
	{
	if (sts)
	        *(adr+num/8) |=  (1<<(num%8));
	else    *(adr+num/8) &= ~(1<<(num%8));
	}

uint8	Bit_tst(uint8 *adr,uint8 num)			        // 位测试函数
	{
	if (*(adr+num/8) & (1<<(num%8))) return(0xFF); else return(0x00);
	}

uint32	BCD_32(uint32 Long)			                // 二进制数转换为十进制数
	{
        union L x;
        x.W[0] = BCD_16(Long/10000);
        x.W[1] = BCD_16(Long%10000);
	return (x.L);
	}

uint16	BCD_16(uint16 Word)			                // 二进制数转换为十进制数
	{
        union W x;
        x.B[0] = BCD_08(Word/100);
        x.B[1] = BCD_08(Word%100);
	return (x.W);
	}

uint8	BCD_08(uint8 Byte)		                        // 二进制数转换为十进制数
	{
	return ((Byte/10)*16 + (Byte%10));
	}

uint32	BIN_32(uint32 Long)			                // 十进制数转换为二进制数
	{
        uint32 x;
        x  = BIN_16(Long/65536)*10000;
        x += BIN_16(Long%65536);
	return (x);
	}

uint16	BIN_16(uint16 Word)			                // 十进制数转换为二进制数
	{
        uint16 x;
        x  = BIN_08(Word/256)*100;
        x += BIN_08(Word%256);
	return (x);
	}

uint8	BIN_08(uint8 uint8)		                        // 十进制数转换为二进制数
	{
	return ((uint8/16)*10 + (uint8%16));
	}

uint16	MAX_3(uint16 a,uint16 b,uint16 c)
	{
		uint16 x;
		x=a;
		if(x<b)	x=b;
		if(x<c)	x=c;
		return(x);
	}
uint32	MAX32_3(uint32 a,uint32 b,uint32 c)
	{
		uint32 x;
		x=a;
		if(x<b)	x=b;
		if(x<c)	x=c;
		return(x);
	}
uint32	MIN32_3(uint32 a,uint32 b,uint32 c)
	{
		uint32 x;
		x=a;
		if(x>b)	x=b;
		if(x>c)	x=c;
		return(x);
	}


//量纲表
const uint8 LG_tab[17][6] =
{
	{"伏    "},
	{"安    "},
	{"秒    "},
	{"欧    "},
	{"度    "},
	{"Km/欧 "},
	{"Hz    "},
	{"Hz/S  "},
	{"V/S   "},
	{"分    "},
	{"瓦    "},
	{"乏    "},
	{"      "},
	{"毫秒  "},	//2002,12,2,sdg
	{"千米  "},	//2003/1/10/sdg
	{"千伏  "},	//16
	{"MVA   "},	//17
};


/**************************************************************** 
* 名称: SetPoint
* 说明: 待写
* 功能: 小数定位函数
* 调用: 在十六进制翻译为ascII码时对小数点定位
* 输入: *ptr:ASCII数据存放指针; x:整数位长度
* 返回值: 从第几位开始取ascII码
******************************************************************/
uint8 SetPoint (uint8 *ptr,uint8 x)
{	
	uint8 i;
	for (i=0; i<x; i++)

⌨️ 快捷键说明

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