100分-关于单片机串行通信-

来源:百度知道 编辑:UC知道 时间:2024/05/04 10:14:06
接口连接方式是电脑USB 转 RS232 再通过 MAX 232 接单片机 RXD 、TXD脚,为什么用调试软件调试不了,单片机收不到数据也发不出数据。我用的是下面这程序试的。
ORG 000H
AJMP MAIN
ORG 23H
LCALL URT
RETI
ORG 30H
MAIN:
LCALL URTINIT
AJMP $
URTINIT:
MOV SCON,#50H ;设置成串口工作方式在8位URT
MOV TMOD,#20H ;设置T1为可重装8位定时器
MOV TL1,#0FDH ;256-FOSC/BTL/32/12
MOV TH1,#0FDH
SETB TR1 ;开启定时器
SETB ES ;开启串口中断
SETB EA ;开总中断
RET
URT:
MOV A,SBUF ;接收到数据后将数据返回
MOV SBUF,A ;将送缓冲区的数据送A
CLR RI ;清接收中断标志
JNB TI,$ ;发送是否完成
CLR TI ;清发送中断标志
RET
END
顺便帮我看下我自己写的下面的有没有哪里错了
ORG 0000H
AJMP KS
ORG 0023H
AJMP JS
KS:MOV TH0,#0FDH
MOV TL0,#0FDH
MOV TMOD,#02H
SETB TR0
MOV SCON,#50H
MOV PCON,#00H
SETB ES
SETB EA

AW:AJMP AW ; 等待中断

JS:JB TI,JS2 ;中断服务程序(判断是发送还是接收中断)
JB RI,JS1
RETI

JS1:CLR RI ;接收子程序

MOV A,SBUF ;接收到数据后将数据返回
MOV SBUF,A ;将送缓冲区的数据送A

你这2句什么意思?第1个,接受到数据后返回? 你这句 应该是把接受到的数据存到了累加器A中吧.你返回到哪了?或则说你想返回到哪?

第2个,你这是把A中的数据给SBUF了,貌似正好和你后面解释的意思相反了.我想是不是汇编指令mov的用法记反了!
下面的程序我没有再看,最好把你的问题说详细点,说明你出现这个问题,到底是哪段程序出的.不然,别人不好分析!

通讯协议好不好。

ORG 000H
AJMP MAIN
ORG 23H
LCALL URT
RETI
ORG 30H
MAIN:
LCALL URTINIT
AJMP $
URTINIT:
MOV SCON,#50H ;设置成串口工作方式在8位URT
MOV TMOD,#20H ;设置T1为可重装8位定时器
MOV TL1,#0FDH ;256-FOSC/BTL/32/12
MOV TH1,#0FDH
SETB TR1 ;开启定时器
SETB ES ;开启串口中断
SETB EA ;开总中断
RET
URT:
MOV A,SBUF ;接收到数据后将数据返回
MOV SBUF,A ;将送缓冲区的数据送A
CLR RI ;清接收中断标志
JNB TI,$ ;发送是否完成
CLR TI ;清发送中断标志
RET
END
顺便帮我看下我自己写的下面的有没有哪里错了
ORG 0000H
AJMP KS
ORG 0023H
AJMP JS
KS:MOV TH0,#0FDH
MOV TL0,#0FDH
MOV TMOD,#02H
SETB TR0
MOV SCON,#50H
MOV PCON,#00H