上位机程序:
Public i As Integer
Public buf As String
Private Sub Form_Load()
MCom1.CommPort = 1
If MCom1.PortOpen = False Then
MCom1.Settings = "9600,n,8,1" '设置通信口参数,采用奇校验
MCom1.InputMode = comInputModeText '数据以文字形式接收
MCom1.RThreshold = 1 '接收一个字节便产生OnComm事件
MCom1.PortOpen = True
MCom1.InputLen = 0
End If
MCom1.InBufferCount = 0 '清空接收缓冲区
MCom1.RTSEnable = True ' 使RTS输出为高电平,即MAX485的RE、DE为“0”接收信号
'Timer1.Enabled = True
End Sub
Private Sub MCom1_OnComm()
Select Case MCom1.CommEvent
Case comEventRxParity '极性错误
MCom1.Output = "1"
Case comEvCD 'CD线的状态发生变化
Case comEvRing 'Ring Indicator 变化
Case comEvReceive ' 收到RThreshold # of chars
'MCom1.RThreshold = 0 '关闭接收事件
buf = MCom1.Input
Text1.Text = buf
i = Asc(buf)
Text2.Text = Asc(buf)
End Select
End Sub
下位机程序:
ORG 0100H
MAIN:MOV TMOD,#20H ;定时器T1为方式2
MOV TH1,#0FDH ;波特率为9600
MOV TL1,#0FDH
MOV SCON,#0F0H;串行通信方式3,允许接收
MOV PCON,#00H ;使SMOD=0,即波特率不加倍
CLR ES ;开串行中断
SETB TR1;开启定时器T1
SETB P1.1 ;准备发送,控制MAX485
TT: CLR TI ; 清TI ,为发送做准备
MOV SBUF,#41H ;向主机发回本机地址
JNB TI ,$ ;等待发送结束
AJMP TT
下位机的数据传不到上位机,硬件电路没有问题.
雅正一端VB程序