上次把程序写好,拿去运行.发现有时候死机.我四处找原因,做各种试验.始终找不到触发死机的条件.气死我了!我又检查程序,感觉程序没有错误的地方啊.于是怀疑是CPU有问题或者有干扰.郁闷了两天.后来又检查程序,突然想起来了. 原来是串口发送程序的问题,我看网上的程序一般都是这样写的,我也一直是这样写的: void ComSendChar(uchar x) { SBUF=x; while(TI==0); TI=0; } 但这样写是有隐患的.while(TI==0);要8个机器周期.在这期间如果中断调用了这个函数就死机了.因为TI已经等于0了.程序就一直运行while(TI==0);. 后来把程序改成这样,就好了. void ComSendChar(uchar x) { bit temp; temp=EA; EA=0; SBUF=x; while(TI==0); TI=0; EA=temp; } 后来一想这不是网上经常说的在中断里不能调用已经调用过的函数吗,或者是重入函数的问题吗.以前总是忽略这样的编译警告,看来以后要小心哦!
|