楼主最近还看过
上面问题有了新的发现,系统被干扰后程序跳过了一段,
MOV R2,60H
MOV R0,#090H
MOV R1,#0B0H
NOP
NOP
位置0: LCALL D3SUB
位置1: MOV 60H,R2
MOV R2,61H
MOV R0,#091H
MOV R1,#0B1H
NOP
NOP
LCALL D3SUB
位置2: MOV 61H,R2
。。。。。。
LCALL HDAJCL
位置3: NOP
NOP
。。。。。。
干扰过后程序在执行了 LCALL D3SUB后没有回到“位置1”,而回到了“位置3”,
每次都如此。将子程序直接写在“位置0”替换掉 LCALL D3SUB,受到干扰后程序
在执行了第二个 LCALL D3SUB后没有回到“位置2”,仍然回到“位置3”。
将全部的 LCALL D3SUB替换掉,干扰后程序运行正常。
另一个处理办法是上面程序不改,将主程序修改了一下,
原来的主程序为:
START: NOP
NOP
MOV PCON,#1
NOP
NOP
SJMP START
NOP
NOP
SJMP START
主程序改为:
START: NOP
NOP
SJMP START
NOP
NOP
SJMP START
所有的处理程序都放在定时中断程序中,10ms处理一次,处理完后单片机进入休闲状态,
现主程序改为死循环,单片机一直运行。按此修改后也能保证系统手干扰后仍能正常运行。
请大家帮忙分析一下。