VB与51单片机串口通信
Vb通信口设置
```
Public Sub Rs_Port_Set()
On Error GoTo Err:
If (MSCOMM1.PortOpen True) Then
MSCOMM1.PortOpen False
End If
Combo1.Text ‘设置通信口
"9600,n,8,1" ‘设置波特率
1 ‘由串口读入字符串长度或字节个数
0 ‘数据传送事件不会产生OnComm事件中的传送事件
MSCOMM1.RThreshold 1 ‘设置或返回引发接收事件的字节数
0 ‘返回在接收寄传器中的字符数
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
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 hb Then
For I 0 To hb - 1
COMBUFF(I) (0) ‘接收字符
Strtemp Strtemp Chr(COMBUFF(I))
Next I
End If
Exit Sub
Err:End Sub
```
51单片机通信口设置
```
void IniCom(void){
SCON 0x50; //串口工作于方式1,充许接收
PCON 0x00; //波特率不倍增
TMOD0X20; //定时器计数器1工作于方式2;
TH1TL10xFD; //波特率为9600;
EA1; //开总中断;
ES1; //开串口中断
TR11; //开放定时器1,程序要加定时中断函数,否则程序出错.
}
```
查询方式
```
for(;;)
{
while(RI0);
RI0;
ComDataSBUF; //接收数据
SBUFComData; //把收到数据再发送回去
while(TI0);
TI0;
}
```
发送函数
```
//向串口发送一个字符
void SendChar(unsigned char ch) {
SBUF ch;
while(TI0);
TI0;
}
//向串口发送一个英盆字符串,strlen为该字符串长度
void SendString(unsigned char *str,unsigned int strlen){
unsigned int k0;
do
{
SendChar(*(str k));
k ;
}while(k < strlen);
}
```
串口接收中断函数
```
void serial () interrupt 4 using 3 {
if (RI)
{
RI0;
InBuf[0]SBUF;
}
}
```
VB与51单片机串口通信及设置方法详解
版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。