我现在做一个电路:单片机用的是89s52,由于单片机只有一个串口,需要用IO模拟一个串口,详见电路的框图。现在板子的两个部分max232和max485我已经分别调通,但是现在联调时,通讯就不正常了,我的调试过程如下:打开两个串口调试助手,从串口1发送数据,看串口2能否正确收到数据。可调试不成功,我从串口1发送“K”,串口2收到数据却是“R”。可能是程序没有写好,自己是新手,还没有写过多少单片机程序,还请大虾们多多指点! 我的程序如下: ORG 0000H AJMP MAIN;转入主程序 ORG 000BH LJMP LOOP2 ORG 0100H
MAIN:MOV TMOD,#22H MOV SCON,#50H;设置成串口1方式 MOV PCON,#00H MOV TH0,#0A0H ;9600bps 就是1000000/9600=104.167微秒,执行的时间是104.167*11.0592/12=96 MOV TL0,#0A0H ;定时器初值为(256-96) MOV TH1,#0FDH;预置初值(按照波特率9600BPS预置初值) MOV TL1,#0FDH;预置初值(按照波特率9600BPS预置初值) CLR TR0 SETB ET0 SETB EA SETB TR1;启动定时器T1
SETB P2.7;max485设置成接收状态 LOOP: JNB RI,$ MOV A,SBUF MOV R2,#09H CLR F0 CLR P1.0 SETB TR0 SETB C LOOP1: JNB F0,$ RRC A;把A.0的值移入到C中 MOV P1.0,C;把C的值输出到模拟发送端 CLR F0 DJNZ R2,LOOP1 CLR TR0 CLR RI AJMP LOOP
LOOP2: SETB F0 RETI END |