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

📄 function.c

📁 单片机的下位端
💻 C
字号:
#include "sys.h"
#include "user.h"

extern data UCHAR *p;
extern code UCHAR handshake[6];
extern data UCHAR UIData[6];
extern UCHAR voltageShow;
bit sendFlag,timerFlag;
UCHAR ampNum;
typedef struct
{	
	signed int d[30];
	UINT front,rear;
}ASEQ;
ASEQ sq;
void UserInit()
{
	AD7895_CONVST = 0;
    AD7895_SCLK   = 0;
	MEASURE_UI    = 0;           //measure i first;
	AMPGAIN       = 1;		//*1
	//AD2           = 1;           
    //AD3           = 1;           //*2
	sendFlag      = 0;
	timerFlag     = 0;
	ampNum        = 1;//2;           //the amplify multiple is 2
	SEND_RECEIVE  = 0;           //receive status
	TEST_START    = 0;           
}

void Send(bit flag)
{
	SEND_RECEIVE  = 1;           //send status
	EA = 0;
	SBUF = 0xff;
	while(TI == 0);
	TI = 0;
	SBUF = 0xff;
	while(TI == 0);
	TI = 0;       
	EA = 1;                  
	if(!flag)          //handshake
		p = handshake;
	else               //transfer the data
		p = UIData;
	TB8 = 1;           //sign address flag
    SBUF = 0x5a;       //send base's address
    while(!sendFlag);
	EA = 0;
	sendFlag = 0;
	SBUF = 0xff;
	while(TI == 0);
	TI = 0;
	SEND_RECEIVE = 0;       //receive status
	EA = 1;
}

//the frequency of MCU is 12MHz;
void Delay(UCHAR n)
{
	UCHAR i;
	for(i=0;i<n;i++);
}

void GatherUI()                
{
    typedef union 
	{
		signed int datatmp;
		struct{UCHAR hi;UCHAR lo;}bytes;
	}UNION;
    UNION newData;
//	UCHAR i;
	ES = 0;
             
	newData.datatmp = MeasureUI();
	UIData[0] = newData.bytes.hi;
	UIData[1] = newData.bytes.lo;
	UIData[2] = ampNum|(voltageShow&0x30);	//添加电池电压信息

	newData.datatmp = MeasureUI();
	UIData[3] = newData.bytes.hi;
	UIData[4] = newData.bytes.lo;
	UIData[5] = ampNum;
	ES = 1;
}

signed int MeasureUI(void)
{
	signed int datatmp1,datatmp2;
	UCHAR i;
	datatmp1 = 0;
	datatmp2 = 0;
	TH0 = TIMER0/256;
    TL0 = TIMER0%256;           //timer0 800us;
	sq.front = sq.rear = 0;
	TR0 = 1;
	MEASURE_UI = 1;           //measure u second;
	AMPGAIN =1; //*1
	ampNum = 1;//2;
	timerFlag=0;
	while(!timerFlag )
	{
	//	NOP;
	}
	timerFlag = 0;
	for(i=0;i<15;i++)
		datatmp1 += sq.d[i];
	datatmp1 /= 15;
	for(i=15;i<30;i++)
		datatmp2 += sq.d[i];
	datatmp2 /= 15;
	datatmp1 = (datatmp1+datatmp2)/2;
	return datatmp1;
}

signed int AD7895()
{
    signed int result;
    UCHAR tmpNum;
    AD7895_CONVST = 1;
    Delay(10);             //wake-up time,6us min;
    AD7895_CONVST = 0;
	NOP; 
    while(AD7895_BUSY);
    for(tmpNum=0;tmpNum<16;tmpNum++)
    {
    	AD7895_SCLK = 1;
        result <<= 1;
        result |= AD7895_DATA;            
        AD7895_SCLK = 0;
    }
    return result;
}

⌨️ 快捷键说明

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