近段时间编制、调试的程序终于可以运行了,那种兴奋劲儿不言而喻。到了脱离仿真器将程序拷贝到芯片中这个步骤了,谁知拷贝后的程序在电路板上没有一丝生机,原本不停地眨眼的“看门狗”——发光二极管,却异常沉默起来,变得不那么讨人喜欢。我有些心急了……
怎么会这样?不应该啊!
到了这个时候,我没有惊慌,而是把程序又重头至尾反反复复地看了很多遍,在编制上没有什么问题,可是问题出在那里呢?
为了能使问题更加明朗,我拷贝了三个芯片,在同一块电路板的片座上,反复试了好多次,都没有使“狗灯”正常运行,后来担心用仿真器调试时经常拔插仿真头而导致片座与芯片接触不良,于是就把PLCC封装的28P引脚的芯片座用烙铁拆下来,重新换上一个新的。本以为这次一锤定音,芯片插上,接上电源后,“狗灯”就会乖乖地闪动起来。可是这次又令我失望。
片座也换了,芯片用的也不只是一个。重新用仿真器仿真,电路板上的“狗灯”很守规矩,是那么的忠于职守。可是为什么拷贝后就不行了呢?
带着满腹的疑虑,我真的好想在我们的论坛上发出一求救贴,帮助我分析分析问题所在。可是同时在心底却有一种不屈的最强音:一定要找到问题的所在!
为了解决这个问题,我将程序缩减成最简单的几句:
sbit showled=P1^6;/////喂狗指示输出端
/********子函数*******************/
void delays(int x)
{ int i;
for(i=0;i<x;i++){;};
}
void main(void)
{
P2M1=0X00; //////////////////////I/O口初始化
P2M2=0X00;
P0M1=0X00;
P0M2=0X00;
P1M1=0X0C;
P1M2=0X4C;
P3M1=0X00;
P3M2=0X00;
P0=0XfF;
P1=0XFF;
P2=0XfF;
P3=0X03;
showled=1;
while(1){
showled=~showled;
delays(10000);
}
}
我就是要看看究竟是怎么回事,当我用仿真器仿真时,狗灯闪烁,用编程器把程序拷贝到芯片上还是那么令我伤心……
折腾一天半了,到了中午休息时,我想午睡一会儿,就在我要进入睡眠状态时,突然一个灵感在脑中闪动:我折腾了这么久,犯了一个最低级的错误,应该说是我兴奋过头,忽略了在烧制芯片时需要配置一些状态字,如图:
应将其配置成如下图:
经过如此的配置之后,拷贝后的芯片放到电路板上接通电源后,那个久违的“狗灯”终于可以在它应有的轨道上运行了。这时的我没有那么多的兴奋了,有的是自责,这么重要的一步竟然给忽略了。这个教训是深刻的。
之所以把它写出来,就是想让自己永远记住这个教训,记住这个本不该发生的事情;也想提醒还有犯我如此低级错误的朋友,遇到问题不要慌,不远处答案就在那里看着你……