📄 adc0832.c
字号:
CODE:
/**********************************************
程序名称:ADC0832子程序
作 者:liuanggh
时 间:2006.12.30
**********************************************/
#ifndef ADC0832_H
#define ADC0832_H
#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
#define first_channel 0x02 //通道1
#define second_channel 0x03 //通道2
sbit ADCLK =P0^0; //时钟接口
sbit ADDI =P0^1; //数据输入接口
sbit ADDO =P0^2; //数据输出接口
sbit ADCS =P0^3; //使能接口
uchar buff[] = {0};
/********************************************************
函数名称:void AD_init(uchar i)
函数作用:初始化ADC0832
参数说明:i=2,表示通道0,i=3,表示通道1
********************************************************/
void AD_init(uchar i)
{
ADDI = 1; /*在第1 个时钟脉冲的下沉之前DI端必须是高电平,表示启始信号*/
_nop_();
_nop_();
ADCS = 0; //使能ADC0832
_nop_();
_nop_();
ADCLK = 1;
_nop_();
_nop_();
ADCLK = 0; //形成下降沿1
_nop_();
_nop_(); /*在第2、3个脉冲下沉之前DI端应输入2位数据用于选择通道功能*/
if( (i&&0x01) == 0)
ADDI = 0;
if( (i&&0x01) == 1)
ADDI = 1;
_nop_();
_nop_();
ADCLK = 1;
_nop_();
_nop_();
ADCLK = 0; //形成下降沿2
_nop_();
_nop_();
if( (i&&0x02) == 0)
ADDI = 0;
if( (i&&0x02) == 1)
ADDI = 1;
ADCLK = 1;
_nop_();
_nop_();
ADCLK = 0; //形成下降沿3
_nop_();
_nop_();
}
/********************************************************
函数名称:uchar AD_read()
函数作用:读取ADC0832转换的数据
参数说明:无
函数返回:返回8位的数据
********************************************************/
uchar AD_read()
{
uchar temp = 0;
uchar temp1 = 0;
uchar temp2 = 0;
uchar i = 0;
for(i = 0; i < 8; i++)
{
ADCLK = 1;
_nop_();
_nop_();
ADCLK = 0; //形成下降沿
_nop_();
_nop_();
if(ADDI)temp1 |= 0x01;
else temp1 |= 0x00;
temp1 = temp1 << 1;
}
for(i = 0; i < 8; i++)
{
if(ADDI)temp = 0x01;
else temp = 0x00;
temp = temp << i;
temp2 |= temp;
ADCLK = 1;
_nop_();
_nop_();
ADCLK = 0; //形成下降沿
_nop_();
_nop_();
}
if(temp1 == temp2)
flag = 0;
return temp1;
}
void delay(void)//延时5ms
{
unsigned char i,j;
for(i=10;i>0;i--)
for(j=248;j>0;j--);
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -