微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 一个关于单片机RS232口通信的问题

一个关于单片机RS232口通信的问题

时间:10-02 整理:3721RD 点击:

我用万用板做了一个简单的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语言

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top