|
技术交流 | 电路欣赏 | 工控天地 | 数字广电 | 通信技术 | 电源技术 | 测控之家 | EMC技术 | ARM技术 | EDA技术 | PCB技术 | 嵌入式系统 驱动编程 | 集成电路 | 器件替换 | 模拟技术 | 新手园地 | 单 片 机 | DSP技术 | MCU技术 | IC 设计 | IC 产业 | CAN-bus/DeviceNe |
程序中延时的作用,双龙的程序!! |
作者:真水无香 栏目:单片机 |
今天看了一下双龙光盘中的程序: /****************************************************** 双龙电子公司//www.sl.com.cn AT90S8535--AD转换演示程序(ICCAVR) 作者:詹卫前 使用注意:1、应包含头文件slavr.h 2、在工程选项中的Additional Lib中填入slavr 使用编译器使用附加库文件libslavr.a 3、使用SL-AVRAD实验设备 接线说明:1、PA.0(PIN40)处接电平指示LED的短路块跳开 2、A/D和VX之间的短路块闭合 3、AREF(PIN32)和AVCC(PIN30)接VCC 4、AGND(PIN31)接GND *******************************************************/ #include<iom16v.h> #include<slavr.h> #include<macros.h> unsigned int ad_con;//存放PA0的AD转换结果 unsigned CHAR adcval[6];//存放电压ASCII码 /* 将AD结果转换成电压 */ #define vref 497 unsigned CHAR * adctoasc(unsigned int adc) { unsigned int TEMP; unsigned CHAR i; unsigned CHAR *CHAR_p; TEMP=(unsigned int)(((unsigned LONG)((unsigned LONG)adc*vref))/1024); for(i=0;i<3;i++) { adcval[3-i]=TEMP%10+0x30; TEMP=TEMP/10; } adcval[0]=adcval[1]; adcval[1]='.'; adcval[4]='V'; adcval[5]=0; CHAR_p=adcval; return CHAR_p; } /* AD转换程序 */ #pragma interrupt_handler adc_isr:15 void adc_isr(void) { unsigned int TEMP=0; while(TEMP<6) TEMP++; ad_con=ADC; ADCSRA|=(1<<ADSC);//启动转换 } //将AD转换结果转换成电压数值,然后在LCD上显示 void main(void) { MCUCR=0; ADMUX=0x01;//0通道 ADCSRA=(1<<ADEN)|(1<<ADSC)|(1<<ADIF)|(1<<ADIE)|0x06; lcd_init(); SEI(); while(1) { lcd_gotoxy(2,0); lcd_puts("AD--Converter"); lcd_gotoxy(2,1); lcd_puts("Voltage:"); lcd_gotoxy(10,1); lcd_puts(adctoasc(ad_con)); delay_ms(500); lcd_clear(); } } 不明白在ADC中断中的这个延时的作用。 unsigned int TEMP=0; while(TEMP<6) TEMP++; 为什么不直接读取ADC的值,而要在延时后再读取? 进入ADC中断,不就表示ADC转换结束了吗???? |
2楼: | >>参与讨论 |
作者: AVRx007 于 2006/1/23 14:17:00 发布:
我也搞不懂,何解? |
3楼: | >>参与讨论 |
作者: AIRWILL 于 2006/1/23 18:37:00 发布:
奇怪,我都是直接读取的 好象没有发现有问题嘛 |
4楼: | >>参与讨论 |
作者: hotpower 于 2006/1/23 19:52:00 发布:
通道切换后首次转换值最好丢弃,取下次转换结果 否则吃亏的不会是别人了... |
5楼: | >>参与讨论 |
作者: 真水无香 于 2006/1/24 9:46:00 发布:
还是不明白 hotpower大侠 中断没有打开嵌套,这延时也没有用吧。 |
6楼: | >>参与讨论 |
作者: Loveshen 于 2006/1/24 14:07:00 发布:
大侠帮忙啊 这个问题还真不好说 大侠们帮忙指点指点啊 |
7楼: | >>参与讨论 |
作者: hanyafeng 于 2006/1/25 15:08:00 发布:
AVR中的采样保持电路 如果你ADC的频率很快,那么切换通道引起的采样保持电路电平激烈变化会导致ADC结果离实际值很远。 本身AVR的ADC的线性度就不好,可想而知,不这样做之后结果会更离谱。 |
8楼: | >>参与讨论 |
作者: AIRWILL 于 2006/1/25 16:06:00 发布:
ADC 转换控制逻辑好象已经做了处理了 否则为何单次转换和连续转换的时间不同呢 |
9楼: | >>参与讨论 |
作者: hanyafeng 于 2006/1/25 23:19:00 发布:
如果你看过SAM7S64的ADC的内容就知道了 在设置SAM7S64的ADC寄存器组的时候,我摘抄部分内容,如下。 ADC时间每个ADC 有其自身最小启动时间,通过ADC_MR 的STARTUP 域编程设定。 同样,ADC 需要最小采样与保持时间以确保在两通道间选择最好的转换值。该时间在ADC_MR的SHTIM 域编程设定。 警告: ADC 中没有隔离源的输入缓冲放大器。因此必须在SHTIM 域中写入精确值,见产品手册DC 特性部分。 注明:SAM7S系列是AVR的升级版。 |
|
|
Copyright © 1998-2006 tgdrjb.cn 浙ICP证030469号 |