串口中断只能执行一次,让它循环等待中断就错误
我的程序如下:ORG0000HAJMPMAINORG0023HAJMPINTRPORG0030HMAIN:MOVTMOD,#20HMOVTH1,#0FDHMOVTL1,#...
我的程序如下:
ORG 0000H
AJMP MAIN
ORG 0023H
AJMP INTRP
ORG 0030H
MAIN:MOV TMOD,#20H
MOV TH1,#0FDH
MOV TL1,#0FDH
SETB TR1
MOV PCON,#00H ;波特率不倍增
MOV SCON,#50H ;设置串口工作方式1,ren=1允许接收
SETB EA ;允许总的中断
CLR ET1 ;关T1中断
SETB PS
SETB ES ;允许串行中断
MOV P0,#255
MOV P2,#255
MOV R0,#00H ;扫描器计数器清零
MOV R1,#00H ;传感器计数器清零
JB P0.0,$ ;传感器等待物体经过
INC R1 ;物体经过传感器计数器加1
MOV A,R1
MOV 20H,R0
CJNE A,20H,BEEP
AJMP MAIN
BEEP:CLR P2.0
LCALL DELAY
SETB P2.0
LCALL DELAY
CLR P2.0
LCALL DELAY
SETB P2.0
LCALL DELAY
CLR P2.0
LCALL DELAY
SETB P2.0
AJMP MAIN
INTRP:CLR ES
CLR RI
INC R0
RETI
DELAY:MOV R5,#5
M: MOV R6,#200
N: MOV R7,#248
DJNZ R7,$
DJNZ R6,N
DJNZ R5,M
RET
END
将程序中第一个AJMP MAIN改成AJMP $,整个程序是正常的,也就是说我的程序只能执行一次串口中断,不知道哪里出了问题,我想让程序一直等待串口中断,麻烦大虾们指点一下,谢谢了! 展开
ORG 0000H
AJMP MAIN
ORG 0023H
AJMP INTRP
ORG 0030H
MAIN:MOV TMOD,#20H
MOV TH1,#0FDH
MOV TL1,#0FDH
SETB TR1
MOV PCON,#00H ;波特率不倍增
MOV SCON,#50H ;设置串口工作方式1,ren=1允许接收
SETB EA ;允许总的中断
CLR ET1 ;关T1中断
SETB PS
SETB ES ;允许串行中断
MOV P0,#255
MOV P2,#255
MOV R0,#00H ;扫描器计数器清零
MOV R1,#00H ;传感器计数器清零
JB P0.0,$ ;传感器等待物体经过
INC R1 ;物体经过传感器计数器加1
MOV A,R1
MOV 20H,R0
CJNE A,20H,BEEP
AJMP MAIN
BEEP:CLR P2.0
LCALL DELAY
SETB P2.0
LCALL DELAY
CLR P2.0
LCALL DELAY
SETB P2.0
LCALL DELAY
CLR P2.0
LCALL DELAY
SETB P2.0
AJMP MAIN
INTRP:CLR ES
CLR RI
INC R0
RETI
DELAY:MOV R5,#5
M: MOV R6,#200
N: MOV R7,#248
DJNZ R7,$
DJNZ R6,N
DJNZ R5,M
RET
END
将程序中第一个AJMP MAIN改成AJMP $,整个程序是正常的,也就是说我的程序只能执行一次串口中断,不知道哪里出了问题,我想让程序一直等待串口中断,麻烦大虾们指点一下,谢谢了! 展开
1个回答
2013-06-29
展开全部
你的程序MAIN总是在做初始化(不停地对串口做),串口初始化只要做一次,然后开中断,响应中断时关中断,响应完再开中断,你不停地做串口初始化,中断刚要来,又被你初始化了,没法响应,你的循环入口应设在初始化程序后面。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询