一个关于单片机RS232口通信的问题
我用万用板做了一个简单的AT89S51和MAX232构成的与PC实现RS232通信的实验电路,电源用电脑USB口供电,晶振用12MHZ,波特率设置为2400,程序成功下载到单片机,用三根单芯线和一个串口母头的2、3、5脚与MAX232的7、8脚,地线相连后和电脑串口连接,程序是循环向SBUF发送08H,A6H;用串口调试助手观察。
结果:
万用表量AT89S51P3.0/TXD和P3.1/RXD电压4.7V,MAX232各引脚电压值都正常
AT89S51的悬空引脚用万用表量电压都是4.7V
串口调试助手勾选16进制显示,窗口未显示任何东西
注:检查线路应该没有什么问题,程序肯定下载到单片机了,查FLASH可以看到,这么简单的程序请大家相信俺,大家帮帮忙啊,现在做一个18B20的电脑显示温度传感模块实验,第一步就遇到问题了,温度采集及通过RS232发送至PC程序贴在5楼,帮忙啊帮忙!
程序有木有问题?
应该没有啊
贴出来看看
我用两个DS18B20,单独供电(非寄生供电接线),单总线分别接P1.0、P1.1(分别控制两个温度传感器)
tempvalue_1 equ 30h
tempvalue_2 equ 31h
flag bit 00h
regedit_com:
mov scon,#50h
mov tmod,#20h
mov th1,#0f3h
mov tl1,#0f3h
setb tr1
start:
org 00h
collect_t1:
init_18201:
setb p1.0
nop
clr p1.0
mov r0,#06bh
tsr11:
djnz r0,tsr11
setb p1.0
mov r0,#25h
tsr12:
jnb p1.0,tsr13
djnz r0,tsr12
jmp tsr14
tsr13:
setb flag
jmp tsr15
tsr14:
clr flag
jmp tsr17
tsr15:
mov r0,06bh
tsr16:
djnz r0,tsr16
tsr17:
setb p1.0
ret
re_config1:
jb flag,re_config11
jmp collect_t2
re_config11:
mov a,#0cch
call write_18201
mov a,#04eh
call write_18201
mov a,#00h
call write_18201
mov a,#00h
call write_18201
mov a,#1fh
call write_18201
ret
get_temp1:
setb p1.0
call init_18201
jb flag,tss1
jmp collect_t2
tss1:
mov a,#0cch
call write_18201
mov a,#044h
call write_18201
call init_18201
mov a,#0cch
call write_18201
mov a,#0beh
call write_18201
call read_18201
mov tempvalue_1,a
jmp collect_t2
write_18201:
mov r0,#8
clr c
wr1:
clr p1.0
mov r3,#6
djnz r3,$
rrc a
mov c,p1.0
mov r3,#23
djnz r3,$
setb p1.0
nop
djnz r0, wr1
setb p1.0
ret
read_18201:
mov r2,#8
re1:
clr c
setb p1.0
nop
nop
clr p1.0
nop
nop
nop
setb p1.0
mov r3,#7
djnz r3,$
mov c,p1.0
mov r3,#23
djnz r3,$
rrc a
djnz r2,re1
ret
collect_t2:
init_18202:
setb p1.1
nop
clr p1.1
mov r0,#06bh
tsr21:
djnz r0,tsr21
setb p1.1
mov r0,#25h
tsr22:
jnb p1.1,tsr23
djnz r0,tsr22
jmp tsr24
tsr23:
setb flag
jmp tsr25
tsr24:
clr flag
jmp tsr27
tsr25:
mov r0,06bh
tsr26:
djnz r0,tsr26
tsr27:
setb p1.1
ret
re_config2:
jb flag,re_config21
ret
re_config21:
mov a,#0cch
call write_18202
mov a,#04eh
call write_18202
mov a,#00h
call write_18202
mov a,#00h
call write_18202
mov a,#1fh
call write_18202
ret
get_temp2:
setb p1.1
call init_18202
jb flag,tss2
ret
tss2:
mov a,#0cch
call write_18202
mov a,#044h
call write_18202
call init_18202
mov a,#0cch
call write_18202
mov a,#0beh
call write_18202
call read_18202
mov tempvalue_2,a
ret
write_18202:
mov r0,#8
clr c
wr3:
clr p1.1
mov r3,#6
djnz r3,$
rrc a
mov c,p1.1
mov r3,#23
djnz r3,$
setb p1.1
nop
djnz r0, wr3
setb p1.1
ret
read_18202:
mov r2,#8
re2:
clr c
setb p1.1
nop
nop
clr p1.1
nop
nop
nop
setb p1.1
mov r3,#7
djnz r3,$
mov c,p1.1
mov r3,#23
djnz r3,$
rrc a
djnz r2,re2
ret
value_txd:
mov a,tempvalue_1
call value_txd1
mov a,tempvalue_2
call value_txd1
jmp start
end
value_txd1:
mov sbuf,a
mov r0,0ffh
vt1:
djnz r0,vt2
vt2:
jb ti,vt1
clr ti
ret
首先,建议晶振用11.0592的,这样波特率和电脑的9600配合是最合适的,你下载程序正常证明硬件连接是OK的,那么比较大的可能是1,程序问题,2,电脑串口和单片机的波特率不匹配,你的问题中没有提及电脑端串口波特率的设置是多少,这个可能性比较大
指点指点吧,昨天问题还是没有解决!
波特率没有问题,调试助手中设置的也是2400,程序放在5楼,请帮忙看看,谢谢!
我又试了一下将MAX232不通电情况下将7、8短掉,结果用串口调试助手发送后也不能接收,直接短串口的2、3脚是可以发收的,我的极性电容用的是22uF的,不知到有没有影响?
有没有人给个回应啊?
c语言