📄 function.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 + -