首先感谢蓝眼狐的热情帮助,串口还没调好;
帮忙看看下面简单的问题描述:
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 就这两种。不知为什么??
|