感谢8L的回答,这个和卖板子的技术支持一样的答复,就是PC从0开始在flash里面一直跑到头,然后又指回0,重新开始跑!
那么关于我的第二问题,有谁可以解释清楚吗?反汇编就是点那个放大镜(debug),我的汇编不是很熟,但是个人认为灯的亮度应该没有什么影响。现象我再描述一遍,程序如下,是示例,我自己也写了个不要P04,P05的,就不发了:
#include <reg51.h>
#include <intrins.h>
sbit BEEP = P1^5;
sbit RELAY = P1^4;
sbit K1 = P0^0; sbit K2 = 0x80^1;
sbit K3 = P0^2; sbit K4 = 0x80^3;
sbit K5 = P0^4; sbit K6 = 0x80^5;
void beep();
/*********************************************************/
main()
{
// while(1)
{
P2 = 0xff;
if(K1 == 0) P2 = 0xfe;
if(K2 != 1) P2 = 0xfd;
if(!K3) P2 = 0xfb;
if(~K4) P2 = 0xf7;
if(!K1&&!K2) P2 = 0x00
if(!K5 ) beep();
if (!K6 )
RELAY = 0;
else
RELAY = 1;
}
}
/**********************************************************/
void beep()
{
unsigned char i , j;
for (i=0;i<100;i++)
{
BEEP=!BEEP;
for (j = 0 ; j<250 ; j++)
_nop_();
}
BEEP=1;
}
程序如上,main中如果有while(1),那么我先按下K1,不松手再按下K3,两个灯都会亮,亮度相同,假设是亮度A。
但是我删除while(1)后,先按下K1,对应的LED灯发光,亮度基本也是A。然后K1不松开,再按下K3,这时K3对应的LED发光,亮度基本为A,但是这时K1对应的LED会变得很暗,这个是什么原因,求大神们指教下小弟
|