adc0832.c
来自「STC51系列的源码」· C语言 代码 · 共 136 行
C
136 行
/********************************************************************************/
/* filename : ADC0832.c */
/* created : xillinx */
/* descript : 处理ADC0832相关的函数 */
/********************************************************************************/
#include "../CPU/CPU.h"
#include "../ADC0832/ADC0832.h"
/********************************************************************************/
/* function : ADC_set_clk() */
/* recension: xillinx */
/* descript : 设置或者清除ADC的CLK引脚 */
/********************************************************************************/
void ADC_set_clk(unsigned char clk)
{ if(clk)
{ c51_U19_latch|=0x08;
}
else
{ c51_U19_latch&=0xF7;
}
c51_hc138_cs_io2[0x0]=c51_U19_latch;
}
/********************************************************************************/
/* function : ADC_set_sel() */
/* recension: xillinx */
/* descript : 设置或者清除ADC的CS引脚 */
/********************************************************************************/
void ADC_set_sel(unsigned char sel)
{ if(sel)
{ c51_U19_latch|=0x04;
}
else
{ c51_U19_latch&=0xFB;
}
c51_hc138_cs_io2[0x0]=c51_U19_latch;
}
/********************************************************************************/
/* function : ADC_set_dat() */
/* recension: xillinx */
/* descript : 设置或者清除ADC的DATA引脚 */
/********************************************************************************/
void ADC_set_dat(unsigned char dat)
{ ADC_DA=dat;
}
/********************************************************************************/
/* function : ADC_set_dat() */
/* recension: xillinx */
/* descript : 设置或者清除ADC的DATA引脚 */
/********************************************************************************/
unsigned char ADC_get_dat(void)
{ return ADC_DA;
}
/********************************************************************************/
/* function : ADC_delay() */
/* recension: xillinx */
/* descript : 简单延时处理 */
/********************************************************************************/
void ADC_delay(unsigned char time)
{ unsigned char i;
for(i=0;i<time;i++)
{ ;
}
}
/********************************************************************************/
/* function : ADC_read_1_channel() */
/* recension: xillinx */
/* descript : 读取第一通道的数据 */
/********************************************************************************/
unsigned char ADC_read_channel(unsigned char channel)
{ unsigned char mdata=0x0;
unsigned char i;
ADC_set_sel(0x1); //* CS=1,CK=0,禁止芯片工作,设置初始工作态;
ADC_delay(0x2);
ADC_set_clk(0x0);
ADC_delay(0x2);
ADC_set_sel(0x0); //* 启动工作
ADC_set_dat(0x1); //* 第1个时钟,上升沿采样 START位, 此时DATA=1
ADC_delay(0x2);
ADC_set_clk(0x1);
ADC_delay(0x2);
ADC_set_clk(0x0);
ADC_set_dat(0x1); //* 第2个时钟,上升沿采样 通道/差分 选择(本设计选择通道,所以为1)
ADC_delay(0x2);
ADC_set_clk(0x1);
ADC_delay(0x2);
ADC_set_clk(0x0);
if( channel==0x0)
{ ADC_set_dat(0x0); //* 第3个时钟,上升沿采样 通道编号 0 通道
}
else
{ ADC_set_dat(0x1); //* 通道编号 1 通道
}
ADC_delay(0x2);
ADC_set_clk(0x1);
ADC_delay(0x2);
ADC_set_clk(0x0);
ADC_set_dat(0x1); //* 第4个时钟之前,需要把ADC_DA设置成为1,作为输入引脚用了,这个时钟周期是空闲的
ADC_delay(0x2);
/****************************************************************************/
/* 读取ADC数据 */
/****************************************************************************/
for(i=0x0;i<0x8;i++)
{ mdata<<=0x1;
ADC_set_clk(0x1); //* 上升沿ADC不处理
ADC_delay(0x2);
ADC_set_clk(0x0); //* 下降沿ADC输出数据
ADC_delay(0x2);
if(ADC_get_dat())
{ mdata|=0x01;
}
}
/****************************************************************************/
/* 恢复初始化状态 */
/****************************************************************************/
ADC_delay(0x2);
ADC_set_sel(0x1); //* CS=1,CK=0,禁止芯片工作,设置初始工作态;
ADC_delay(0x2);
ADC_set_clk(0x0);
ADC_delay(0x2);
return mdata;
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?