基于51单片机和Labview的多路模拟数据采集(AD采集)
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
ES=1;//ES-串行中断允许控制位 ES = 1 允许串行中断。 TR1=1;//启动定时器开始工作 } void send_char(unsigned char txd)// 传送一个字符 { SBUF = txd; while(!TI); // 等特数据传送 TI = 0; // 清除数据传送标志 }
原理图
干货联盟
外接 USB 转 TTL 线
最小系统
AD DA
程序
/****************************************************************************** ****
*
标题:
*
************* 数 控 恒 压 源 *************
uint8 aa,adc2,adc3; int adc0=0,dac=65,adcx; float adcnum = 0; uint16 adc1=0;
unsigned char tmp,tmp1; //tmp 是接收到 Labview 的字节 tmp1 是发送的字节数据
//初始化串行口 void csh() {
case 4: DACconversion(PCF8591,0x40, dac); //DAC
数模转换
break;
}
if(++aa>4) aa=0; //控制循环
//
keys(); // 不能对换回的 dac,adc0 等参数进行操作,否则不能显示屏 1602 正常
工作。可在显示的时候操作或是在完成转换时操作
send_char(adc3); // 传数据 send_char(adc2); // 传数据
send_char(adc1); // 传数据 send_char(adc0); // 传数据 } }
Lv51.taobao.com
Labview 界面
write_first(3,adc3);
write_first(12,adc2);
write_second(3,adc1);
write_second(12,adc0); } }
void intrr() interrupt 4
//接收中断
{
RI = 0;
tmp = SBUF;
// 暂存接收到的数据
if(tmp==0x7A) {
* *
* *
实现 DA 输出 0 到 5V 的变化
* *
通过电压比较放大为 0 到 15V 输出
* *
检测采样电阻的电压,计算出输出电流
******************************************************************************* ****/ #include "main.h" #include "DAAD.h" #include "lcd1602.h" //#include "keyscan.h" #define PCF8591 0x90 //PCF8591 地址
switchቤተ መጻሕፍቲ ባይዱaa) {
case 0: ISendByte(PCF8591,0x41); adc0 = IRcvByte(PCF8591); //ADC0 模数转换 1 break;
case 1: ISendByte(PCF8591,0x42); adc1 = IRcvByte(PCF8591); //ADC1 模数转换 2 break;
case 2: ISendByte(PCF8591,0x43); adc2 = IRcvByte(PCF8591); //ADC2 模数转换 3 break;
case 3: ISendByte(PCF8591,0x40);
adc3 = IRcvByte(PCF8591); //ADC3 模数转换 4 break;
SM0=0; SM1=1; REN=1; TI=0; RI=0;//以上是初始化 scon 寄存器,想当于 SCON=0x50; PCON=0;//初始化电源,为波特率不增加 TH1=0xFd;
TL1=0XFd;//设置波特率为 9600 TMOD|=0X20;//设置定时器,定时器 1 工作于 8 位自动重载模式, 用于产生波特率 EA=1;//开总中断
main() {
csh(); lcd_init(); dac = 65; DACconversion(PCF8591,0x40, 65); //DAC 数模转换 while(1) {
/****************************************************** 以 下 AD-DA 处 理 **************************************************************/
原理图
干货联盟
外接 USB 转 TTL 线
最小系统
AD DA
程序
/****************************************************************************** ****
*
标题:
*
************* 数 控 恒 压 源 *************
uint8 aa,adc2,adc3; int adc0=0,dac=65,adcx; float adcnum = 0; uint16 adc1=0;
unsigned char tmp,tmp1; //tmp 是接收到 Labview 的字节 tmp1 是发送的字节数据
//初始化串行口 void csh() {
case 4: DACconversion(PCF8591,0x40, dac); //DAC
数模转换
break;
}
if(++aa>4) aa=0; //控制循环
//
keys(); // 不能对换回的 dac,adc0 等参数进行操作,否则不能显示屏 1602 正常
工作。可在显示的时候操作或是在完成转换时操作
send_char(adc3); // 传数据 send_char(adc2); // 传数据
send_char(adc1); // 传数据 send_char(adc0); // 传数据 } }
Lv51.taobao.com
Labview 界面
write_first(3,adc3);
write_first(12,adc2);
write_second(3,adc1);
write_second(12,adc0); } }
void intrr() interrupt 4
//接收中断
{
RI = 0;
tmp = SBUF;
// 暂存接收到的数据
if(tmp==0x7A) {
* *
* *
实现 DA 输出 0 到 5V 的变化
* *
通过电压比较放大为 0 到 15V 输出
* *
检测采样电阻的电压,计算出输出电流
******************************************************************************* ****/ #include "main.h" #include "DAAD.h" #include "lcd1602.h" //#include "keyscan.h" #define PCF8591 0x90 //PCF8591 地址
switchቤተ መጻሕፍቲ ባይዱaa) {
case 0: ISendByte(PCF8591,0x41); adc0 = IRcvByte(PCF8591); //ADC0 模数转换 1 break;
case 1: ISendByte(PCF8591,0x42); adc1 = IRcvByte(PCF8591); //ADC1 模数转换 2 break;
case 2: ISendByte(PCF8591,0x43); adc2 = IRcvByte(PCF8591); //ADC2 模数转换 3 break;
case 3: ISendByte(PCF8591,0x40);
adc3 = IRcvByte(PCF8591); //ADC3 模数转换 4 break;
SM0=0; SM1=1; REN=1; TI=0; RI=0;//以上是初始化 scon 寄存器,想当于 SCON=0x50; PCON=0;//初始化电源,为波特率不增加 TH1=0xFd;
TL1=0XFd;//设置波特率为 9600 TMOD|=0X20;//设置定时器,定时器 1 工作于 8 位自动重载模式, 用于产生波特率 EA=1;//开总中断
main() {
csh(); lcd_init(); dac = 65; DACconversion(PCF8591,0x40, 65); //DAC 数模转换 while(1) {
/****************************************************** 以 下 AD-DA 处 理 **************************************************************/