ADC0832作AD转换及串口显示程序
来源:互联网 发布:如何清除mac桌面图标 编辑:程序博客网 时间:2024/05/29 04:41
最近用了一个模拟的火焰传感器,很不好用,于是用0832芯片作了AD转换,加了串口显示,方便调试。
先给出0832的工作资料
· 8位分辨率;
· 双通道A/D转换;
· 输入输出电平与TTL/CMOS相兼容;
· 5V电源供电时输入电压在0~5V之间;
· 工作频率为250KHZ,转换时间为32μS;
· 一般功耗仅为15mW;
· 8P、14P—DIP(双列直插)、PICC 多种封装;
· 商用级芯片温宽为0°C to +70°C,工业级芯片温宽为-40°C to +85°C;
图3 ADC0832引脚图
芯片接口说明:
· CS_ 片选使能,低电平芯片使能。
· CH0 模拟输入通道0,或作为IN+/-使用。
· CH1 模拟输入通道1,或作为IN+/-使用。
· GND 芯片参考零电位(地)。
· DI 数据信号输入,选择通道控制。
· DO 数据信号输出,转换数据输出。
· CLK 芯片时钟输入。
· Vcc/REF 电源输入及参考电压输入(复用)
ADC0832的工作原理:
通道地址
通道
工作方式说明
SGL/DIF
ODD/SIGN
0
1
0
0
+
-
差分方式
0
1
-
+
1
0
+
单端输入方式
1
1
+
表1:通道地址设置表
ADC0832的工作时序
图4 ADC0832工作时
用的单片机为无AD转换功能的51单片机
程序如下
#include<reg52.h>
sbit ADC_CLK=P0^0;
sbit ADC_DI=P0^1;// DI DO也可用同一引脚,因为IO口双向且DI DO在不同时间使用,互不干扰
sbit ADC_DO=P0^2;
sbit ADC_CS=P0^3;
/*******************************************************************/
void Delay(unsigned char x)
{
unsigned char i;
for(i=0;i<x;i++);
}
unsigned char ADC0832(void) //把模拟电压值转换成8位二进制数并返回
{
unsigned char i,data_c;
data_c=0;
ADC_CS=0;
ADC_DO=0;//片选,DO为高阻态
for(i=0;i<10;i++)
{;}
ADC_CLK=0;
Delay(2);
ADC_DI=1;
ADC_CLK=1;
Delay(2); //第一个脉冲,起始位
ADC_CLK=0;
Delay(2);
ADC_DI=1;
ADC_CLK=1;
Delay(2); //第二个脉冲,DI=1表示双通道单极性输入
ADC_CLK=0;
Delay(2);
ADC_DI=1;
ADC_CLK=1;
Delay(2); //第三个脉冲,DI=1表示选择通道1(CH2)
ADC_CLK=0;//
ADC_DI=0;
ADC_DO=1;//DI转为高阻态,DO脱离高阻态为输出数据作准备
ADC_CLK=1;
Delay(2);
ADC_CLK=0;
Delay(2);//经实验,这里加一个脉冲AD便能正确读出数据,
//不加的话读出的数据少一位(最低位d0读不出)
for (i=0; i<8; i++)
{
ADC_CLK=1;
Delay(2);
ADC_CLK=0;
Delay(2);
data_c=(data_c<<1)|ADC_DO;//在每个脉冲的下降沿DO输出一位数据,最终ch为8位二进制数
}
ADC_CS=1;//取消片选 一个转换周期结束
return(data_c);//返回
}
void senddata(unsigned char dat)
{
SBUF =dat;
while(!TI);
TI = 0;
}
void init(void)
{
SCON=0x50; //设定串口工作方式
PCON=0x00; //波特率不倍增
TMOD=0x20; //定时器1工作于8位自动重载模式, 用于产生波特率
EA=1;
ES = 1; //允许串口中断
TL1=0xfd;
TH1=0xfd; //波特率9600
TR1=1;
}
/*********************************************************
串行中断服务函数
*********************************************************/
void main()
{
unsigned char ss;
init();
while(1)
{
P1= ADC0832();
ss= ADC0832();//观察P1仿真结果变化
senddata(ss/1000+0x30);
senddata(ss%1000/100+0x30);
senddata(ss%100/10+0x30);
senddata(ss%10+0x30);
senddata(0x0d);
senddata(0x0a);
}
}
- ADC0832作AD转换及串口显示程序
- ADC0832双通道实现AD电压转换
- ADC0832转换数据
- C语言程序>>ADC0832
- arm板做的ad转换(用串口 发送至超级终端显示)
- arm板做的ad转换(用串口 发送至超级终端显示)
- 52单片机串口控制AD转换显示到共阳极数码管
- 四路AD转换数码管显示
- 单片机AD转换程序 TLC2543
- PIC16F877A PICC AD转换程序
- AD/DA转换(程序)
- MOSS ad组的获取及Hashtable作缓存总结
- ADC0832程序完整版 源码+Proteus仿真
- PCF8591学习(二)-AD转换,算法,串口打印
- AVR 模数(AD)转换程序
- PIC18F4520单片机AD转换程序与注释
- stc单片机ad转换程序心得
- 51单片机AD转换的程序
- 递归神经网络
- if __name__ == '__main__'的理解
- bootstrap-table行内编辑表格的实现
- Apache POI for Microsoft Office
- 排它平方数
- ADC0832作AD转换及串口显示程序
- leetcode练习 Kth Smallest Element in a Sorted Matrix
- 消息队列activemq小测试
- spring通过xml方式配置AOP时,提示错误信息:匹配的通配符是严格的,但是对于元素'aop:aspectj- 自动代理”。
- getParameter 与 getAttribute的区别
- 原码反码和补码区别
- springMVC的执行原理及与spring的关系
- HTTP请求中POST与GET的区别
- Java并发编程:Lock(包含synchronized的不足之处)