我详细说一下
我用的正是51,所有设置和你说得的一样,并且将晶体振荡器的一侧的电容,换成5/25pf
的可调电容,以方便调节频率。在程序编写时,采用窜口工作方式1,接收采用窜口中断
程序如下:
org 0000h
ljmp satar
org 0023h
ljmp zd
org 0100
satar:mov tmod,#20h
mov th1,#0fdh
mov tl1,#0fdh
mov pcon,#00h ;晶振11。0592mhz,波特率9600
setb ea ;cpu 开中断
setb es ;开窜行中断
clr et1 ;ti中断关
setb tr1
mov scon,#50h
ajmp satar
;中断接收
zd: mov r0,#04h
mov r1,#30h
loop:jnb ri,$
clr ri
mov a,sbuf
mov @r1,a
inc r1
djnz r0,loop
;发射
mov r0,#04h
mov r1,#30h
loop1: mov a,@r1
mov sbuf,a
jnb ti,$
clr ti
inc r1
djnz r0,loop1
reti
end
另外,当我改成接收为一个字节数据时,比如pc发ox0d,单片机在9600b时,在8位数据,一个停止位,无效验的情况下,接收数据大多为ox8d,偶尔才有ox0d.在7位数据,一个停止位,无效验的情况下,接收数据大多为ox4d,偶尔才有ox0d.由此,我也怀疑波特率不准
,又换了刚买的3个11.0592晶振,且没用频率计调,效果一样。单片机我也换了。
我实在想不出该怎么调试了,请帮忙分析一下可能的原因。
谢谢
发表时间:2006年7月6日10:12:15