AVR单片机mega16,采用外部8M晶振。我用片内的adc对模拟信号采样,怎么影响了我单片机的工作速度?

比方说我原来1ms延时函数在用adc功能的情况下变成了5ms左右。
我的adc中断程序中就把adc转化值付给两个变量,没有别的语句。
我的熔丝位设置都没有问题。
我的中断程序是;
#pragma interrupt_handler adc_isr:15
void adc_isr(void)
{
adcl=ADCL;
adch=ADCH;
SREG|=BIT(7);
}
adc工作方式是:
ADMUX=0X66;//01100110b;
ADCSRA=0XEF;//11101111b;
SFIOR=0X00;
我用数码管动态显示四位数字时就能看出问题。当打开adc时,数码管就一位一位的显示,而不打adc时,数码管正常显示四位。

如果是指令型的延时程序,一般而言,中断程序只会加长延时程序的时间。
如果延时程序的时间由定时器控制,中断程序执行时间较长的话,也会延长延时程序的时间,你是缩短了,估计是ADC中断中,改变了定时器的参数。
温馨提示:内容为网友见解,仅供参考
第1个回答  2013-06-07
你用外部晶振时 ,编译器的设置参数也要改,不然他系统的延时函数会跟你自己的延时函数不同
第2个回答  2013-06-07

ADC中断程序中没有保护好现场追问

什么意思啊

AVR晶振问题
1、内部时钟源,可分为内部晶振和外部晶振,用的是单片机内部的振荡电路。内部晶振可以设置1M、2M、4M、8MHz晶振频率,外部可支持到16MHz(MEGA16或者MEGA16A)MEGA16L可支持最高8MHz的外部晶振(通过熔丝设置)。2、外部时钟源,靠外部振荡电路提供时钟,可以用外部同步时钟信号(如用其他单片机提供时钟...

我学mega16定时器,出现问题?就是内部时钟和外部时钟的问题!还有就是内...
例如把时钟配置为内部8M,则熔丝位低字节的低四位可写4;把时钟配置为外部晶振,则熔丝位低字节的低四位写成F,这里的数值为16进制。再说定时器:单片机的定时器可选择内部时钟源和外部时钟源,其中内部时钟源指的是系统当前工作的时钟源;外部时钟源则是从I\/O口输入的方波信号,外部时钟源的采集又分...

AVR单片锁死了怎么办?
你的情况应该是熔丝位误设置为外部时钟,这个和外部晶振是两个概念。外部时钟是外部直接输入时钟脉冲,普通外部晶振和单片机内部电路共同构成时钟,不一样。补救的办法很简单:找一个4M的有源晶振或者4M的时钟源接在XTAL1上,然后通过下载器重新设置熔丝位,使能内部震荡或者外部无源晶振就搞定了。

MEGA16 AD,转换结果为什么是0.帮帮我!
你在DEBUG 里只能进行软件的仿真,首先不管你的ADC程序对不对,在DEBUG里你无法在ADC0和ADC1两引脚间加一个实际的位置电压呀!!!所以DEBUG在仿真时你可以注意到PORTA.0与PORTA.1两个引脚的值都是0,那么自然这个差分输入信号必然是0V,AD转化后结果也必然是0!你要真想验证调试一下你的AD程序是否...

熟悉单片机 芯片的高手请进啊!!!
AVR单片机是应用低功耗、非挥发式的CMOS工艺制造的,通过SPI口和一般的编程器,就可以对AVR单片机的Flash存储器进行编程。这种系列的单片机有良好的性能价格比,由于AVR单片机是采用Harvard结构,所以它们的程序存储器和数据存储器是分开的,可以直接访问8M字节程序存储器和8M字节数据存储器,寄存器文件被双向...

相似回答