📄 7841.c
字号:
#include "SPCE061A.h"
void delay_7841(unsigned int i)
{
for(;i>0;i--);
}
void P_IOA_IOB_INIT(void)
{
*P_IOA_Dir|=0x0007;
*P_IOA_Dir&=0xfff7;
*P_IOA_Attrib |=0x0007;
*P_IOA_Attrib &=0xfff7;
*P_IOA_Data |=0x0000;
*P_IOA_Data &=0xffe0;
}
unsigned int ADS7841_read_data(unsigned int Channel)
{
unsigned int ADResult=0,ADS7841_CHANNEL;
unsigned int DataInput=0;
unsigned int i,a=0,b=0;
*P_IOA_Dir |= 0x0004; //DIN(IOA2)为带数据缓存器的低电平输出。
*P_IOA_Attrib |= 0x004;
*P_IOA_Data &= 0xfffb;
switch(Channel)
{
case 0: ADS7841_CHANNEL=0x10;break;
case 1: ADS7841_CHANNEL=0x50;break;
case 2: ADS7841_CHANNEL=0x20;break;
case 3: ADS7841_CHANNEL=0x60;break;
default:ADS7841_CHANNEL=0x10;break;
}
DataInput=0x80 | ADS7841_CHANNEL | 0x04;
*P_IOA_Data &=0xfffd; //CS==L
delay_7841(1);
*P_IOA_Data &=0xfffe; //DCLK==L
delay_7841(1);
for(i=0;i<8;i++) //发送DIN
{
a=DataInput&0x80;
a=a>>5; //送到IOA2 DIN
*P_IOA_Data &=0xfffb;
*P_IOA_Data |=a;
*P_IOA_Data &=0xfffe; //DCLK==L
delay_7841(3);
*P_IOA_Data |=0x0001; //DCLK==H
DataInput = DataInput <<1;
}
*P_IOA_Data &=0xfffe; //DCLK==L
delay_7841(1);
while(*P_IOA_Data&0x0008) //是否转换完成
{
delay_7841(3);
*P_IOA_Data &=0xfffe; //DCLK==L
delay_7841(3);
*P_IOA_Data |=0x0001; //DCLK==H
*P_Watchdog_Clear = 0x0001;
}
delay_7841(1);
for(i=0;i<12;i++)
{
*P_IOA_Data |=0x0001; //DCLK==H
delay_7841(1);
a = *P_IOA_Data&0x0010;
a = a>>4;
a = a<<(11-i);
b = b | a;
*P_IOA_Data &=0xfffe; //DCLK==L
ADResult=b;
}
for(i=0;i<4;i++) //滤掉多余的4个时钟
{
*P_IOA_Data |=0x0001; // clk high将CLK置1。且不影响其他位,
delay_7841(1);
*P_IOA_Data &=0xfffe; // clk low
delay_7841(1);
}
ADResult &= 0x0fff;
*P_IOA_Data |= 0x0002; // CS(IOA14)为高电平,禁止芯片
return ADResult;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -