这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界» 论坛首页» 嵌入式开发» MCU» 帮看看基于stc12c5a60s2的简单内部A/D转换程序错误在哪?

共20条 1/2 1 2 跳转至

帮看看基于stc12c5a60s2的简单内部A/D转换程序错误在哪?

助工
2014-05-31 19:35:15 打赏
#include #define uchar unsigned char #define uint unsigned int main() { unsigned long i; uchar status; ADC_CONTR|=0X80; //打开A/D转换电源 for(i=0;i<10000;i++); P1ASF=0x01; //选择P1^0作为A/D转换通道 ADC_CONTR=0XE0; for(i=0;i<10000;i++); while() { ADC_CONTR|=0X08; //重新启动A/D转换 status=0; ADC_RES=0; //清除以前数据 while(!(ADC_CONTR|=0X10)); //判断转换是否结束 ADC_CONTR=0XE7; status=ADC_RES; } }

以上是我写的stc12c5a60s2内部A/D转换程序,P1^0作为转换通道与传感器模块的AO端相连,麻烦看看有没有问题,下面是利用LCD1602显示光强传感器采集的光强数据程序,和运行结果,数据没有显示出来,拜托各位大神帮忙找找原因,做好能帮忙写一个A/D转换程序,急求············拜托了···········

显示程序:

#include #define uchar unsigned char #define uint unsigned int uchar code table[]="hello world!"; uchar code table1[]="guan:--.- C"; sbit en = P2^5; sbit rs = P2^7; sbit rw = P2^6; uchar num; void delay(uint z) { uint x, y; for(x = z;x > 0;x--) for(y = 110;y > 0;y--); } void write_c(uchar c) { rs = 0; P0 = c; delay(5); en = 1; delay(5); en = 0; } void write_da(uchar date) { rs = 1; P0 = date; delay(5); en = 1; delay(5); en = 0; } void init() { rw = 0; en = 0; write_c(0x38); write_c(0x0c); write_c(0x06); write_c(0x01); write_c(0x80); for(num = 0;num < 12;num++) { write_da(table[num]); delay(5); } delay(20000); write_c(0x01); write_c(0x80); for(num = 0;num < 11;num++) { write_da(table1[num]); delay(5); } } void yjxianshi(uint date) { uchar a, b, c; // ds = 0; a = date/100; b = date%100/10; c = date%10; write_c(0x80 + 5); write_da(0x30 + a); write_c(0x80 + 6); write_da(0x30 + b); write_c(0x80 + 8); write_da(0x30 + c); } uint guangqiang(void) { unsigned long i; uint status; ADC_CONTR|=0X80; //打开A/D转换电源 for(i=0;i<10000;i++); P1ASF=0x01; //选择P1^0作为A/D转换通道 ADC_CONTR=0XE0; for(i=0;i<10000;i++); ADC_CONTR|=0X08; //重新启动A/D转换 status=0; ADC_RES=0; while(!(ADC_CONTR|=0X10)); ADC_CONTR=0XE7; status=ADC_RES; return(status); } void main() { uint t = 0; uchar e; init(); while(1) { for(e = 240;e > 0;e--) yjxianshi(t); t = guangqiang(); } }




关键词: A/D stc12c5a60s2 转换 程序

高工
2014-06-01 09:42:48 打赏
2楼

就给楼主贴一段,以前我调试没问题的程序啊。

void ADC_INIT() { P1ASF |= 0X40; //ADC通道P1.6 ADC_CONTR = 0x8E; //初始化ADC寄存器 DELAY_5US(); //适当延时 AUXR1 |= ADRJ; //调整采样数据存储位置 EADC = 1; //允许中断 ADC_RESL = 0X00; //清空数据寄存器 } /***************************************************************** ADC中断 *****************************************************************/ void ADC_CH() interrupt 5 { ADC_CONTR &= 0XEF; DELAY_5US(); ADC_DAT = ADC_RESL; ADC_CONTR |= 0X08; }


专家
2014-06-01 10:29:09 打赏
3楼

疑点:P1ASF=0x01;//选择P1^0作为A/D转换通道


----->按照后面的注释,通道选择错了,应该为P1ASF=0x00;


院士
2014-06-01 10:39:23 打赏
4楼

助工
2014-06-01 10:48:46 打赏
5楼
改后还是不行呀!

助工
2014-06-01 10:51:21 打赏
6楼
看不懂!可不可以把通道改为P1^0口,程序也发全点。拜托了,急求

助工
2014-06-01 10:58:22 打赏
7楼
拜托帮找找,错误就在A/D转换那一块

专家
2014-06-01 11:06:55 打赏
8楼
不好意思 刚看错了 通道选择没错

专家
2014-06-01 11:15:38 打赏
9楼
  1. 1\while(!(ADC_CONTR|=0X10)); 改为while(!(ADC_CONTR&=0X10));
  2. 2\ ADC_CONTR=0XE7;

1 2 两句交换下位置。



专家
2014-06-01 11:20:06 打赏
10楼
这款单片机没用过,帮顶

共20条 1/2 1 2 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册]