|
本帖最后由 hollandcy 于 2016-11-24 08:23 编辑
c语言代码
void doLightSensor(void)
{
RLED_StateReadNow=RLEDInputState();
if(RLED_StateNow!=RLED_StateReadNow)//如果为高说明 无光
{
if(RLED_StateReadNow==0)
{
//如果524ms*n内一直为高
if(newTim2Updated)
{
newTim2Updated=0;
if(RLED_HighStateCount<10) //524ms*n
{
RLED_HighStateCount++;
}
else
{
RLED_StateNow=RLED_StateReadNow;
if(relayState==0)
{
openRelay();
}
RLED_LowStateCount=0;
}
}
}
else
{
if(newTim2Updated)
{
newTim2Updated=0;
if(RLED_LowStateCount<10)
{
RLED_LowStateCount++;
}
else
{
RLED_StateNow=RLED_StateReadNow;
if(relayState==1)
{
closeRelay();
}
RLED_HighStateCount=0;
}
}
}
}
}
编译后汇编代码
board.c:166 if(RLED_StateNow!=RLED_StateReadNow)//如果为高说明 无光
0x81e5 <doLightSensor+8> 0xC60101 LD A,0x0101 LD A,RLED_StateNow
0x81e8 <doLightSensor+11> 0xC10117 CP A,0x0117 CP A,RLED_StateReadNow
0x81eb <doLightSensor+14> 0x2750 JREQ 0x823d JREQ 0x823d
board.c:168 if(RLED_StateReadNow==0)
0x81ed <doLightSensor+16> 0x2027 JRT 0x8216 JRT 0x8216
board.c:171 if(newTim2Updated)
0x81ef <doLightSensor+18> 0x725D010C TNZ 0x010c TNZ _newTim2Updated
0x81f3 <doLightSensor+22> 0x2748 JREQ 0x823d JREQ 0x823d
board.c:173 newTim2Updated=0;
0x81f5 <doLightSensor+24> 0x725F010C CLR 0x010c CLR _newTim2Updated
board.c:174 if(RLED_HighStateCount<10) //524ms*n
0x81f9 <doLightSensor+28> 0xC60102 LD A,0x0102 LD A,RLED_HighStateCount
0x81fc <doLightSensor+31> 0xA10A CP A,#0x0a CP A,#0x0a
0x81fe <doLightSensor+33> 0x2405 JRNC 0x8205 JRNC 0x8205
board.c:177 RLED_HighStateCount++;
0x8200 <doLightSensor+35> 0x725C0102 INC 0x0102 INC RLED_HighStateCount
0x8204 <doLightSensor+39> 0x81 RET RET
board.c:181 RLED_StateNow=RLED_StateReadNow;
0x8205 <doLightSensor+40> 0x5501170101 MOV 0x0101,0x0117 MOV RLED_StateNow,RLED_StateReadNow
board.c:183 if(relayState==0)
0x820a <doLightSensor+45> 0xC60103 LD A,0x0103 LD A,relayState
0x820d <doLightSensor+48> 0x2602 JRNE 0x8211 JRNE 0x8211
board.c:185 openRelay();
0x820f <doLightSensor+50> 0xAD36 CALLR 0x8247 CALLR _openRelay
board.c:189 RLED_LowStateCount=0;
0x8211 <doLightSensor+52> 0x725F0104 CLR 0x0104 CLR RLED_LowStateCount
0x8215 <doLightSensor+56> 0x81 RET RET
board.c:202 if(newTim2Updated)
0x8216 <doLightSensor+57> 0x725D010C TNZ 0x010c TNZ _newTim2Updated
0x821a <doLightSensor+61> 0x2721 JREQ 0x823d JREQ 0x823d
board.c:204 newTim2Updated=0;
0x821c <doLightSensor+63> 0x725F010C CLR 0x010c CLR _newTim2Updated
board.c:205 if(RLED_LowStateCount<10)
0x8220 <doLightSensor+67> 0xC60104 LD A,0x0104 LD A,RLED_LowStateCount
0x8223 <doLightSensor+70> 0xA10A CP A,#0x0a CP A,#0x0a
0x8225 <doLightSensor+72> 0x2405 JRNC 0x822c JRNC 0x822c
board.c:208 RLED_LowStateCount++;
编译后从汇编 代码看 if(RLED_StateReadNow==0)语句直接变成跳转指令 JRT 0x8216 这是为什么啊 |
阿莫论坛20周年了!感谢大家的支持与爱护!!
月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!
|