為什麼我把程序下到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++)
;
}
}
} 你要不然不要将下载线从PC的打印口拔掉。要不然直接将插在目标板上的下载线插头拔掉。
原因是:并口下载线内有244芯片,当你把下载线从PC的打印口拔掉后,244输出到AVR的RESET的线成为了低电平,致使AVR处在复位状态不工作。 为什么“把下载线从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拉高时,输出高阻态。 肯定是由于244的原因造成的,你把ISP头拿掉,仅插下载线,AVR还是工作的,加上ISP头就不行了。看一下ISP的电路,当ISP与PC不连的话,OE也是悬空,既不是H,也不是L。此时244的状态不确定,用表量RESET为2.5V左右,AVR肯定不工作。
理论上讲悬空可作为高电平,对TTL器件还可以这样使用,但对CMOS电路不太合适,因为非常容易受到干扰,不稳定。 多谢马老师:)
马老师的硬件水平十分了得,我等现在花在硬件研究上的功夫实在是太少了。
向马老师学习。 我也出现了像楼主一样的问题,现在终于找到问题了
谢谢你
马老师
页:
[1]