Ryan 发表于 2006-11-18 10:47:22

為什麼我把程序下到M16後可以運行,但是把ISP線從PC上拔掉就不可以了呢?

這是我第一個例子,用來使8隻LED燈動態跑起來的,用GCC編譯的,當我把ISP線從PC的並口拔掉後,燈就不能亮了,我不知道是怎麼回事,不是說程序下載到芯片中後,就可以運行嗎?我實在是不明白,請馬老師指點,非常感謝!!!

源程序如下:

#include<avr/io.h>

int main()

{

char i,j,k=1;

DDRC=0xFF;

PORTC=0x01;

while(1)

{

for(k=0;k<8;k++)   

{

   PORTC=~(1<<k);

       for(i=0;i<255;i++)

          for(j=0;j<255;j++)

                ;

}

}

}

machao 发表于 2006-11-27 02:58:16

你要不然不要将下载线从PC的打印口拔掉。要不然直接将插在目标板上的下载线插头拔掉。



原因是:并口下载线内有244芯片,当你把下载线从PC的打印口拔掉后,244输出到AVR的RESET的线成为了低电平,致使AVR处在复位状态不工作。

yorkwilliam 发表于 2007-4-18 21:17:20

为什么“把下载线从PC的打印口拔掉后,244输出到AVR的RESET的线成为了低电平”了呢?



或者说把下载线从PC的打印口拔掉后,RESET此时应处于浮空状态,那么浮空就是低电平吗?那为什么我们以前做数电实验的时候,比如一个两输入与非门,我们可以把一个输入引脚浮空,把它做接高电平处理(当然这种做法不好)?



还有一个问题就是,为什么把下载线从实验板上拔除,芯片能正常工作;而下载线接了实验板,但未连接到pc的打印口上,芯片的RESET引脚就被会拉低,造成一直在复位呢?不接下载线或接了但没连到pc上,ISP上的RESET引脚都应是高阻态,怎么有如此大的区别呢?





74244的真值表:

输入 | 输出

/OEA    Y

L   H    H

L   L    L

H   X    Z

也就是当/OE低电平时,输出等与输入内容。当/OE拉高时,输出高阻态。

machao 发表于 2007-4-18 22:45:16

肯定是由于244的原因造成的,你把ISP头拿掉,仅插下载线,AVR还是工作的,加上ISP头就不行了。看一下ISP的电路,当ISP与PC不连的话,OE也是悬空,既不是H,也不是L。此时244的状态不确定,用表量RESET为2.5V左右,AVR肯定不工作。



    理论上讲悬空可作为高电平,对TTL器件还可以这样使用,但对CMOS电路不太合适,因为非常容易受到干扰,不稳定。

yorkwilliam 发表于 2007-4-19 08:58:44

多谢马老师:)

马老师的硬件水平十分了得,我等现在花在硬件研究上的功夫实在是太少了。

向马老师学习。

yam0000 发表于 2007-5-23 20:04:04

我也出现了像楼主一样的问题,现在终于找到问题了

谢谢你

马老师
页: [1]
查看完整版本: 為什麼我把程序下到M16後可以運行,但是把ISP線從PC上拔掉就不可以了呢?