首先感谢蓝眼狐的热情帮助,串口还没调好;
帮忙看看下面简单的问题描述:
AT89C2051单片机程序:
ORG 0000H
AJMP MAIN
ORG 001CH
MAIN:SETB P1.2 ;P1.2 控制RS485的使能端
PUSH PSW
PUSH ACC
MOV TMOD,#20H ;定时器方式2,自动重装初值计数
MOV TL1,#0FDH ;查表得到,波特率设为9600bps
MOV TH1,#0FDH
SETB EA
SETB TR1
MOV PCON,#80H ;SMOD=1
MOV SCON,#50H ;串口方式1,SM01(多机接收通讯),10位异步收发
MOV A,SBUF ;将接收寄存器的数据读到累加器中
JNB RI,$ ;等待RI=1,接收完毕
CLR RI ;发送完后清RI,为下次接受作准备
CJNE A,#0CH,RETURN ;和本机地址比较,不同则转移
;设为单机接收数据
POP PSW
POP ACC
AJMP THISCHIP ;转到该片的服务程序
RETURN:AJMP MAIN
THISCHIP:
CLR P1.6
LCALL DELAY3S
SETB P1.6
PUSH ACC
PUSH PSW
MOV TMOD,#20H ;定时器方式2,自动重装初值计数
MOV TL1,#0FDH ;查表得到,波特率设为9600bps
MOV TH1,#0FDH
SETB EA
SETB TR1
MOV PCON,#80H
MOV SCON,#40H
CLR P1.2 ;P1.2 控制RS485的使能端
MOV R1,#05H
JKL:MOV SBUF,#22H
JNB TI,$
CLR TI
DJNZ R1,JKL
POP ACC
POP PSW
AJMP MAIN
;延时1s的服务程序
DELAY1S:MOV R7,#0FAH
LOOPA:MOV R6,#0FAH
LOOPB:NOP
NOP
NOP
NOP
NOP
NOP ;1s
DJNZ R6,LOOPB
DJNZ R7,LOOPA
RET
;延时3s的服务程序
DELAY3S:MOV R5,#03H ;3s
LOOP1:LCALL DELAY1S
DJNZ R5,LOOP1
RET
END
看到程序中加红的地方了吗?
我程序中让单片机发22H,发 5 次。收到的是162,146,145,17,111或130,146,145,17,201 就这两种。不知为什么??