OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 10208|回复: 12

STC12C5A60S2 四路AD同时采集程序怎么写

[复制链接]

32

主题

92

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
318
金钱
318
注册时间
2014-6-20
在线时间
27 小时
发表于 2014-9-22 09:52:42 | 显示全部楼层 |阅读模式
5金钱
STC12C5A60S2 四路AD同时采集,怎么把采集到的数据放到一个数组里,。。。。。。。我写的程序能够采集,但必须是每路采集后必须通过串口发出去,在进行下一路采集,不能同时放到一个数组里,否则采集的数据都是一样的。。。。。

ADC.c

1.73 KB, 下载次数: 904

最佳答案

查看完整内容[请看2#楼]

回复【2楼】Badu_Space: ------------------------------- 我写的程序是把采集到每路的值分别放到数组的每个元素里,最后把数组里的元素分别通过出口显示出来,结果发现元素的值都是一样的,如果不放到数组里,采集完一路就显示出来,那会每路都不一样。这是为什么呀?
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

32

主题

92

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
318
金钱
318
注册时间
2014-6-20
在线时间
27 小时
 楼主| 发表于 2014-9-22 09:52:43 | 显示全部楼层
回复【2楼】Badu_Space:
-------------------------------
我写的程序是把采集到每路的值分别放到数组的每个元素里,最后把数组里的元素分别通过出口显示出来,结果发现元素的值都是一样的,如果不放到数组里,采集完一路就显示出来,那会每路都不一样。这是为什么呀?
回复

使用道具 举报

120

主题

7877

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12010
金钱
12010
注册时间
2013-9-10
在线时间
427 小时
发表于 2014-9-22 12:45:41 | 显示全部楼层
对数组每个元素进行操作即可
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复

使用道具 举报

120

主题

7877

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12010
金钱
12010
注册时间
2013-9-10
在线时间
427 小时
发表于 2014-9-23 12:36:35 | 显示全部楼层
直接贴代码吧
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复

使用道具 举报

32

主题

92

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
318
金钱
318
注册时间
2014-6-20
在线时间
27 小时
 楼主| 发表于 2014-9-23 15:08:04 | 显示全部楼层
回复【4楼】Badu_Space:
---------------------------------
#include"12.h"
#include"intrins.h"
#define uint8 unsigned char
#define uint16 unsigned int
uint8 datah0=0;
uint8 datah1=0;
uint8 datah2=0;
uint8 datah3=0;
uint8 tab[4];
void StartUART( void );
void R_S_Byte(uint8 R_Byte);
void ADC_Init0(void)
{
P1ASF=0x0F;//P1.0,P1.1,P1.2,P1.3口作为模拟功能AD使用。
ADC_CONTR=0X80;//打开ADC转换电源,540个周期转换一次,初始化ADC标志位为0,AD转换控制位初始化为0,选择P1.0作为AD输入来用。
EA=1;
EADC=1;//中断允许控制为
AUXR1=0X00;//低两位存放在ADCRESL低两位中,高八位存放在ADCRES中
// PADC=0;
}
void ADC_Init1(void)
{
ADC_CONTR=0X81;//打开ADC转换电源,540个周期转换一次,初始化ADC标志位为0,AD转换控制位初始化为0,选择P1.1作为AD输入来用。
}
void ADC_Init2(void)
{
ADC_CONTR=0X82;
}
void ADC_Init3(void)
{
ADC_CONTR=0X83;
}
void display(uint8 num)
{
uint8 hundred,ten,one;
float a;
int b;
a=(num+0.005)/51;
a=a*100;
b=a;
hundred=b/100;
ten=b%100/10;
one=b%10;
}
void main()
{
uint8 i;
StartUART();
    ADC_Init0();
    ADC_Init1();
ADC_Init2();
    ADC_Init3();
while(1)
{
ADC_CONTR=0X88;//打开ADC转换电源,540个周期转换一次,初始化ADC标志位为0,AD开始转换,选择P1.0作为AD输入来用。
_nop_();
_nop_();
_nop_();
_nop_();/*以上是四个时钟延时*/
//  R_S_Byte(datah0);
tab[0]=datah0;
    ADC_CONTR=0X89;//打开ADC转换电源,540个周期转换一次,初始化ADC标志位为0,AD开始转换,选择P1.1作为AD输入来用。
_nop_();
_nop_();
_nop_();
_nop_();
/*以上是四个时钟延时*/
//   R_S_Byte(datah1);
tab[1]=datah1;
ADC_CONTR=0X8A;
_nop_();
_nop_();
_nop_();
_nop_();
//  R_S_Byte(datah2);
tab[2]=datah2;
ADC_CONTR=0X8B;
_nop_();
_nop_();
_nop_();
_nop_();
//  R_S_Byte(datah3);
tab[3]=datah3;
R_S_Byte('#');
for(i=0;i<4;i++)
{
R_S_Byte(tab);
}
R_S_Byte('@');
}
}
void adc_isr() interrupt 5 
{
ADC_CONTR=0X80;
_nop_();
_nop_();
_nop_();
_nop_();
datah0=ADC_RES;

/***************************/
ADC_CONTR=0X81;
_nop_();
_nop_();
_nop_();
_nop_();
datah1=ADC_RES;
ADC_CONTR=0X82;
_nop_();
_nop_();
_nop_();
_nop_();
datah2=ADC_RES;
ADC_CONTR=0X83;
_nop_();
_nop_();
_nop_();
_nop_();
datah3=ADC_RES;
}
void StartUART( void )
{
    //波特率9600
    SCON = 0x50;
    TMOD = 0x20;
    TH1 = 0xFD;
    TL1 = 0xFD;
    CON = 0x00;
    TR1 = 1;
}
//************************************通过串口将接收到数据发送给PC端**************************************
void R_S_Byte(uint8 R_Byte)
{
    SBUF = R_Byte;
    while( TI == 0 );    //查询法
    TI = 0;
}




这样写。。。。。。。。。。。数值都一样。。。。。。。。。。。。。。。。。。。
如果//  R_S_Byte(datah0);
//  R_S_Byte(datah1);
//  R_S_Byte(datah2);
//  R_S_Byte(datah3);不注释掉。。。。。。。。。各通道数值就不会影响
回复

使用道具 举报

120

主题

7877

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12010
金钱
12010
注册时间
2013-9-10
在线时间
427 小时
发表于 2014-9-23 19:28:24 | 显示全部楼层
思路不错,R_S_Byte这个函数得改下,先判断标志在放上数据
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复

使用道具 举报

32

主题

92

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
318
金钱
318
注册时间
2014-6-20
在线时间
27 小时
 楼主| 发表于 2014-9-24 08:06:44 | 显示全部楼层
回复【6楼】Badu_Space:
---------------------------------
判断什么标志位,怎么判断?
回复

使用道具 举报

120

主题

7877

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12010
金钱
12010
注册时间
2013-9-10
在线时间
427 小时
发表于 2014-9-24 08:10:19 | 显示全部楼层
回复【7楼】影腾:
---------------------------------
这个函数
void R_S_Byte(uint8 R_Byte) 

    SBUF = R_Byte; 
    while( TI == 0 );    //查询法 
    TI = 0; 
}

改为这样

void R_S_Byte(uint8 R_Byte) 
{
    while( TI == 0 );    //查询法  
    SBUF = R_Byte; 
    TI = 0; 
}
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复

使用道具 举报

32

主题

92

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
318
金钱
318
注册时间
2014-6-20
在线时间
27 小时
 楼主| 发表于 2014-9-24 08:20:25 | 显示全部楼层
回复【8楼】Badu_Space:
-------------------------------
这样也不解决本质问题呀?
回复

使用道具 举报

120

主题

7877

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12010
金钱
12010
注册时间
2013-9-10
在线时间
427 小时
发表于 2014-9-24 12:58:31 | 显示全部楼层
回复【9楼】影腾:
---------------------------------
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复

使用道具 举报

32

主题

92

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
318
金钱
318
注册时间
2014-6-20
在线时间
27 小时
 楼主| 发表于 2014-9-24 15:00:13 | 显示全部楼层
回复【10楼】Badu_Space:
---------------------------------
回复【10楼】Badu_Space:
---------------------------------
你能帮我解决吗?
回复

使用道具 举报

120

主题

7877

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12010
金钱
12010
注册时间
2013-9-10
在线时间
427 小时
发表于 2014-9-24 17:04:17 | 显示全部楼层
回复【11楼】影腾:
---------------------------------
没有板子,看着逻辑可以啊
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复

使用道具 举报

0

主题

11

帖子

0

精华

初级会员

Rank: 2

积分
78
金钱
78
注册时间
2012-6-14
在线时间
6 小时
发表于 2014-11-18 16:14:01 | 显示全部楼层
同时采集?好像只能一个一个通道采集吧.
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-23 04:54

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表