串行通信51汇编

来源:百度知道 编辑:UC知道 时间:2024/05/25 15:09:40
org 0000h
sjmp main
org 0050h
main:
mov p3,#00h
mov tmod,#20h ;模式2
mov tl1,#0fdh
mov th1,#0fdh
mov pcon,#00h ;不加倍,9600
mov scon,#40h ;工作方式1,REN=0
mov ie,#00h
setb tr1

send:
nop
clr ti
mov a,#33h
mov sbuf,a
jnb ti,$
clr ti
lcall delay
nop
ljmp send

delay:
MOV R1,#18
DEL1: MOV R2,#102
DEL2: MOV R3,#250
DEL3: DJNZ R3,DEL3 ;2*2*250*100*10=1000000us
DJNZ R2,DEL2
DJNZ R1,DEL1
RET

end

这是我写的最基本的发送数据,不停的发33H,但是PC串口调试助手始终显示为十六进制00,而且每打开一次只显示一个00。这是为什么啊,EI中断打开没打开都试过,结果都一样。
小弟初学,请高手帮忙

org 0000h
sjmp main
org 0050h
main:
mov p3,#00h
mov tmod,#20h ;模式2
mov tl1,#0fdh
mov th1,#0fdh
mov pcon,#00h ;不加倍,9600
mov scon,#40h ;工作方式1,REN=0(这个地方有问题,不停的发的话应该将Ti置1,也就是发送中断标志置1,就应该是42H)
mov ie,#00h
setb tr1

send:
nop
clr ti
mov a,#33h
mov sbuf,a
jnb ti,$
clr ti
lcall delay
nop
ljmp send

delay:
MOV R1,#18
DEL1: MOV R2,#102
DEL2: MOV R3,#250
DEL3: DJNZ R3,DEL3 ;2*2*250*100*10=1000000us
DJNZ R2,DEL2
DJNZ R1,DEL1
RET

end
如果首先你的Ti置0的话,上面程序则不能发送,就是那点出了错,你改了试一下
MoV scon,#42H
附加一点:你的延时程序得不到一秒的延时
Delay:mov r5,#10
del1:mov r6,#250
del2:mov r7,#200
djnz r7,$
djnz r6,del1
djnz r5,delay