VB与RS232通讯请教
近日要做个计算机串口控制单片机的小系统,上位机程序用VB写,但是以前没有用过VB所以向各位请教。
协议如下:
发送十进制数“11”则P17变低电平(发光管点亮)
发送十进制数“12”则P17变高电平(发光管熄灭)
发送十进制数“13”则P16变低电平(发光管点亮)
发送十进制数“14”则P16变高电平(发光管熄灭)
上位机中用一个Check控件表示,打勾表示有效,即使发光管亮。实验中用了Check1和Check2分别控制P17和P16,VB实验程序如下:(波特率4800)
Private Sub Check1_Click()
If Check1.value = 1 Then
MSComm1.Output = send(0)
Else
MSComm1.Output = send(1)
End If
End Sub
Private Sub Check2_Click()
If Check2.value = 1 Then
MSComm1.Output = send(2)
Else
MSComm1.Output = send(3)
End If
End Sub
Private Sub Form_Load()
MSComm1.PortOpen = True
Dim buf As Byte
Dim send(4) As Byte
send(0) = 11
send(1) = 12
send(2) = 13
send(3) = 14
End Sub
VB调试时发现串口发送数据时有问题,如:MSComm1.Output = send(0)等都不行。
单片机实验程序如下:
ORG 0000H
LJMP START
ORG 0030H
START:
MOV TMOD ,#20H; 定时器方式2
MOV TH1,#0FAH; 置初值
MOV TL1,#0FAH; 置初值
MOV PCON ,#00H; 波特率不增倍
MOV SCON,#50H; 串行方式1,REN=1允许接收
SETB TR1; 启动定时
RECEIVE:
MOV P1,#0FFH
LOOP: JNB RI,$; 没有收到原地等待
CLR RI; 收完后置0
MOV A,SBUF; 将接收缓冲区中的数放A
CJNE A,#11,NEXT01; 收到的数与00比较,相同转NEXT00,不同转NEXT01与其它数比较
NEXT00:CLR P1.7; 上到00后执行动作
NEXT01:CJNE A,#12,NEXT02
SETB P1.7
NEXT02:CJNE A,#13,NEXT03 与01比
CLR P1.6
NEXT03:CJNE A,#14,GOEND
SETB P1.6
GOBACK:AJMP LOOP
GOEND:END
按以上的程序调试发现无法实现计算机串口与单片机之间的通讯,请高手指点。
发表时间:2004年2月4日22:05:20