关于51单片机串口中断问题,急!

来源:百度知道 编辑:UC知道 时间:2024/06/21 17:16:21
关于51单片机串口中断问题,急!
各位大侠好,现在我遇到51串口通信问题。程序的功能是这样的:我做的是生产线上扫描器的报警模块,我在扫描器后面加了个传感器,当扫描器漏扫了,传感器检测到物体,这个时候报警,没有漏扫就不报警,我在两边都设置了一个计数器,通过比较两个计数器的大小是否相等来判断是否要报警。我遇到的问题基本是这样的:我把51的RXD跟TX引脚接到MAX232的TTL电平引脚上,引脚接线没问题。我用串口调试助手给MAX232这边发了8位数据(在MAX232的TTL电平这边检测到有电平变化),电平转换电路没有问题。我现在采用的是串口中断方式,数据过来以后中断程序进不去(因为还有1个计数器是在中断程序里面加的,所以现在无论有没有数据过来,系统都会报警),波特率这些设置都没问题(9600,N,8,1),麻烦各位大侠指点指点!谢谢!以下是我的程序(一个非常简短的程序,麻烦大侠们看一下,问题我现在暂时看不出来,需要你们的帮忙):
ORG 0000H
AJMP MAIN
ORG 0023H
AJMP INTRP
ORG 0030H
MAIN:MOV TMOD,#02H
MOV TH0,#0FDH
MOV TL0,#0FDH
SETB TR0
MOV PCON,#00H ;波特率不倍增
MOV SCON,#50H ;设置串口工作方式1,ren=1允许接收
SETB EA ;允许总的中断
SETB ES ;允许串行中断
MOV P0,#255 ;关蜂鸣器
MOV P2,#255 ;关传感器
MOV R0,#00H ;扫描器计数器清零
MOV R1,#00H ;传感器计数器清零
JB P0.0,$ ;传感器等待物体经过

试试这样:

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 ;允许总的中断
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

太落后了~~