📄 ad_collect.c
字号:
#include <string.h>
#include <stdlib.h>
#include "intrins.h>
#include "C8051f.h"
#include "net.h"
#include "ad_collect.h"
UCHAR code command[]={0xd1,0x91,0xb1,0xc1}; //channel [S A2 A1 A0 MODE SER/DFR PD1 PD0]
//采集X坐标,Y坐标,Z1,Z2值。
extern void delay(UINT i);
extern UCHAR idata point[DATA_SIZE];
extern UCHAR idata count;
//extern UCHAR idata text1[];
//extern UCHAR idata text2[];
//extern bit volatile tag;
//SIGNATURE xdata point[100];
UINT pulse(UCHAR commandbyte) //ADS7846采集坐标
{
UCHAR i,j;
UINT result=0;
//DCLK=0;
CS=1;
DIN=1;
CS=0;
for(i=0;i<8;i++)
{
commandbyte<<=1;
DIN=CY;
DCLK=0;
for(j=0;j<12;j++)
{
_nop_();
}
// _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
DCLK=1;
for(j=0;j<12;j++) //上升沿 DIN
{
_nop_();
}
// _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
}
//BUSY=1;
while(AD_BUSY);
delay(2);
DCLK=1;
for(j=0;j<8;j++)
{
_nop_();
}
// _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
DCLK=0;
for(j=0;j<8;j++) // 下降沿 DOUT
{
_nop_();
}
// _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
for(i=0;i<12;i++)
{
result=result<<1;
DCLK=1;
for(j=0;j<12;j++)
{
_nop_();
}
// _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
DCLK=0;
for(j=0;j<12;j++)
{
_nop_();
}
// _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
//DOUT=1;
if(DOUT)
{
result++;
}
}
for(i=0;i<3;i++)
{
DCLK=1;
for(j=0;j<8;j++)
{
_nop_();
}
// _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
DCLK=0;
for(j=0;j<8;j++)
{
_nop_();
}
}
CS=1;
return result;
}
void read_analog_inputs()
{
UCHAR i;
UINT temp;
UINT ad_result[4]; // X Y Z1 Z2
UINT pos[3];
RAM_CHIP_SELECT_BANK0;
EMI0CF=0x24;
for(i=0;i<4;i++)
{
ad_result[i]=pulse(command[i]);
}
pos[2]=Rx*(ad_result[0]*5/ad_result[2])/4096*(ad_result[3]-ad_result[2])/5; // 计算压力值
if (ad_result[0]>4094)
{
pos[0]=0; ///6.4;
pos[1]=0; ///8.53;
pos[2]=0;
}
else
{
// result=ad_result[0];///6.4;
pos[0]=4096-ad_result[0];
// result=ad_result[1];///8.53;
pos[1]=4096-ad_result[1];
}
for(i=0;i<3;i++)
{
temp= pos[i];
temp=temp>>8;
point[6*count+2*i]=pos[i]&0x00ff; //先低8位
point[6*count+2*i+1]=temp&0x00ff;
}
count++;
if(count==DATA_SIZE/6)
{
count=0;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -