comreti:
clr ES ;不允许串行中断
push acc
jnb ri,chkti ;ri=1表示为接收中断
push psw
mov 4FH,r0 ;因为其它中断会用到R0,怕出错,先送出
push 4FH
lcall chk4546 ;检查否一段时间内的开始数据,如果是,已将
;指针回到00
inc 50h ;用于记录第几次收到数!
mov A, 50H ;50H中的数值转到A中
CLR C
ADD A, #0F9H ;有没有可能是FF?不断发来是有可能的
JC sriexit ;超过6个就不再处理直接退出
;即收到的6个数据按顺序放在51H~55H中,
mov a, #50H
add a, 50H ;开始地址+1也是开始地址,前面有了加1操作
mov r0,a ;将新的地址装入R0用于新的寻址方式
mov @r0,sbuf ;放入相对的地址中
mov A,50H
cjne A,#06H,sriexit ;不是6位就不检查
;已是6位数接着检查数据是不是合理,不管是否合理也会发送数,只是不全时发的数不一样
lcall chkPCdata ;检查数据的合理性
sriexit: ;其它的收数不理会!并清空标收数标志
clr ri ;COM1这样写?
pop 4FH
mov r0,4FH
pop psw
chkti: ;发送主动等待不用中断,由发送处清空处理,这里也不清空
pop acc
SETB ES ;允许串行中断
exitcom1:
reti
sendTempToPc: ;发送数据到PC机
ret
请pqsh老大帮忙看看我这个中断有问题吗?
现在又有一个新的问题了
如果我现在想在检查数据之后将单片机的相关数据送回PC,也就是
sendTempToPc:这个子程序了
我在哪里回入才行呢?
在reti之前加入?它会有产生发送中断的问题,
两个中断同时存在会否产生错误
如果我在主程序里发送,因为主程序的循环时间较长(10S)就不能达到即时应答的效果了
请老大指点
谢谢
11-12-24 14:16