单片机中断服务是一个定时程序

来源:百度知道 编辑:UC知道 时间:2024/05/13 03:04:56
我做的一个电源控制器,单片机中断服务是一个定时程序,我做了地址码,控制码,输入定时码,但在这个定时的时间内就不能再接收数据了,我想再给单片机发命令,进行重新控制,也就是在定时的这个延时程序执行时还能收到我发的命令,该怎么做~~
分不是很多,但有了方法我会很感激的~~
以下是我的程序:
ORG 0000H
AJMP MAIN
ORG 23H
LCALL URT
LCALL DY
MOV P1,#0FFH
OVER:
CLR RI
RETI
ORG 30H
MAIN:
CLR P3.4
LCALL URTINIT
AJMP $
URTINIT:
MOV SCON,#0D0H
MOV TMOD,#020H
MOV TL1,#0FDH
MOV TH1,#0FDH
SETB TR1
SETB ES
SETB EA
RET
URT:
SR0:JBC RI,WT
SJMP SR0
WT:MOV A,SBUF
XRL A,#0BBH
JNZ OVER
SR1:
JBC RI,SR2
SJMP SR1
SR2:
MOV A,SBUF
MOV P1,A
SR3:JBC RI,SR4
SJMP SR3
SR4:
MOV A,SBUF
MOV R2,A
CLR RI
RET
DY:
LOOP1:MOV R6,#0FFH
LOOP2:MOV R7,#0FFH
LOOP3:NOP
NOP
NOP
NOP
NOP
NOP
DJNZ R7,LOOP3
DJNZ R6,LOOP2
DJNZ R2,LOOP1
RET
END

就说下思路吧。
可以根据RI的状态来做。
也就是在进入中断后不清除RI的标志位。
在进入中断后关闭中断。
在LCALL URT中,不要用,JBC,改为JC就可以不清零RI了.
进入URT后,就可以CLR EA

在MAIN中用,AJMP $改为START:JNB RI,$
CLR RI
SETB EA
LCALL DY
AJMP START

大概就是这个意思...:)

汇编看起来好头痛,个人观点:了解了单片机的基本结构后,会用汇编编一些比较简单的程序就足够了。用C语言吧,你要说效率我觉得相差无几,而且现在keil编译器已经优化得不错了。不好意思,没解决你的问题。