世俱杯 2025

登录 免费注册 世俱杯 2025 | 行业黑名单 | 帮助
维库电子市场网
技术交流 | 电路欣赏 | 工控天地 | 数字广电 | 通信技术 | 电源技术 | 测控之家 | 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
我也搞不懂,何解?
 
3楼: >>参与讨论
AIRWILL
奇怪,我都是直接读取的
    好象没有发现有问题嘛

4楼: >>参与讨论
hotpower
通道切换后首次转换值最好丢弃,取下次转换结果
否则吃亏的不会是别人了...

5楼: >>参与讨论
真水无香
还是不明白
hotpower大侠
中断没有打开嵌套,这延时也没有用吧。

6楼: >>参与讨论
Loveshen
大侠帮忙啊
这个问题还真不好说
大侠们帮忙指点指点啊

7楼: >>参与讨论
hanyafeng
AVR中的采样保持电路
如果你ADC的频率很快,那么切换通道引起的采样保持电路电平激烈变化会导致ADC结果离实际值很远。
本身AVR的ADC的线性度就不好,可想而知,不这样做之后结果会更离谱。

8楼: >>参与讨论
AIRWILL
ADC 转换控制逻辑好象已经做了处理了
否则为何单次转换和连续转换的时间不同呢

9楼: >>参与讨论
hanyafeng
如果你看过SAM7S64的ADC的内容就知道了
在设置SAM7S64的ADC寄存器组的时候,我摘抄部分内容,如下。

ADC时间每个ADC 有其自身最小启动时间,通过ADC_MR 的STARTUP 域编程设定。
同样,ADC 需要最小采样与保持时间以确保在两通道间选择最好的转换值。该时间在ADC_MR的SHTIM 域编程设定。
警告: ADC 中没有隔离源的输入缓冲放大器。因此必须在SHTIM 域中写入精确值,见产品手册DC 特性部分。

注明:SAM7S系列是AVR的升级版。

参与讨论
昵称:
讨论内容:
 
 
相关帖子
pcf8563t与mega128的系统下twi通讯怎么不行呀?
高手再帮我看看GCC的输出是怎么回事?
请教ATTINY2313替代90S2313问题?
大家帮我看看这个程序对不对!
有人用过青云的段式LCD模块吗,我试了好几片都没调出来。


Copyright © 1998-2006 tgdrjb.cn 浙ICP证030469号