VB与51单片机串口通信
的有关信息介绍如下:通过一些简单程序,说明VB与51单片机的串口通信
VB 通信口设置:
Public Sub Rs_Port_Set()
On Error GoTo Err:
If (MSCOMM1.PortOpen = True) Then
MSCOMM1.PortOpen = False
End If
MSCOMM1.CommPort = Combo1.Text‘设置通信口
MSCOMM1.Settings = "9600,n,8,1" ‘设置波特率
MSCOMM1.InputLen = 1‘由串口读入字符串长度或字节个数
MSCOMM1.SThreshold = 0 ‘数据传送事件不会产生OnComm事件中的传送事件
MSCOMM1.RThreshold = 1‘设置或返回引发接收事件的字节数
MSCOMM1.InBufferCount = 0‘返回在接收寄传器中的字符数
MSCOMM1.InputMode = comInputModeBinary‘数据以二进制形式取回
MSCOMM1.PortOpen = True‘打开串口
Exit Sub
Err:
End Sub
VB发送函数:
Public Sub SendDataToCom(Num As Byte)
Dim oDt As Variant
Dim Y(0 To 0) As Byte
Y(0) = &H30 + Num
'//Y(1)= &HD ‘附加特定字符,可作协议。
'//Y(2)= &HA
oDt = Y
MSCOMM1.InBufferCount = 0 ‘清空缓冲
If MSCOMM1.PortOpen = True Then MSCOMM1.Output = oDt ‘发送数据
End Sub
VB OnComm事件:
Private Sub MSCOMM1_OnComm()
Dim I, hb As Integer
Static COMBUFF(10) As Byte
Dim Strtemp As String
On Error goto Err
hb = 1
Strtemp = ""
If MSCOMM1.InBufferCount = hb Then
For I = 0 To hb - 1
COMBUFF(I) = MSCOMM1.Input(0) ‘接收字符
Strtemp = Strtemp +Chr(COMBUFF(I))
Next I
End If
Exit Sub
Err:
End Sub
51单片机通信口设置:
void IniCom(void)
{
SCON = 0x50;//串口工作于方式1,充许接收
PCON = 0x00; //波特率不倍增
TMOD=0X20;//定时器计数器1工作于方式2;
TH1=TL1=0xFD;//波特率为9600;
针板 EA=1;
//ET1=1;//不能开截肥陕启定时器中断,否则进入不了串口中断
ES=1;//开串口中断
TR1=1; //开放定时器1,程序要加定时中断函数,否则程序出错.
}
查询方式:
for(;;)
{
while(RI==0);
RI=0;
ComData=SBUF;//接收数据
SBUF=ComData;//把收到数据再发送回去
while(TI==0);
TI=0;
}
发送函数:
//向串口发送一个字符
void SendChar(unsigned char ch)
{
SBUF=ch;
while(TI==0);
TI=0;
}
//向串口发送一个英盆字符串,strlen为该字符串长度
void SendString(unsigned char *str,unsignedint strlen)
{
unsigned int k=0;
do
{
SendChar(*(str + k));
k++;
}while(k < strlen);
}
//串口接收中断函数
void serial () interrupt 4 using 3
{
if (RI)
{
RI=0;
InBuf=SBUF;
}
}