VB與51單片機串口通信
Vb通信口設(shè)置```Public Sub Rs_Port_Set()On Error GoTo Err: If (MSCOMM1.PortOpen True) Then MSCO
Vb通信口設(shè)置
```
Public Sub Rs_Port_Set()
On Error GoTo Err:
If (MSCOMM1.PortOpen True) Then
MSCOMM1.PortOpen False
End If
Combo1.Text ‘設(shè)置通信口
"9600,n,8,1" ‘設(shè)置波特率
1 ‘由串口讀入字符串長度或字節(jié)個數(shù)
0 ‘?dāng)?shù)據(jù)傳送事件不會產(chǎn)生OnComm事件中的傳送事件
MSCOMM1.RThreshold 1 ‘設(shè)置或返回引發(fā)接收事件的字節(jié)數(shù)
0 ‘返回在接收寄傳器中的字符數(shù)
comInputModeBinary ‘?dāng)?shù)據(jù)以二進制形式取回
MSCOMM1.PortOpen True ‘打開串口
Exit Sub
Err:End Sub
```
Vb發(fā)送函數(shù)
```
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 ‘發(fā)送數(shù)據(jù)
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單片機通信口設(shè)置
```
void IniCom(void){
SCON 0x50; //串口工作于方式1,充許接收
PCON 0x00; //波特率不倍增
TMOD0X20; //定時器計數(shù)器1工作于方式2;
TH1TL10xFD; //波特率為9600;
EA1; //開總中斷;
ES1; //開串口中斷
TR11; //開放定時器1,程序要加定時中斷函數(shù),否則程序出錯.
}
```
查詢方式
```
for(;;)
{
while(RI0);
RI0;
ComDataSBUF; //接收數(shù)據(jù)
SBUFComData; //把收到數(shù)據(jù)再發(fā)送回去
while(TI0);
TI0;
}
```
發(fā)送函數(shù)
```
//向串口發(fā)送一個字符
void SendChar(unsigned char ch) {
SBUF ch;
while(TI0);
TI0;
}
//向串口發(fā)送一個英盆字符串,strlen為該字符串長度
void SendString(unsigned char *str,unsigned int strlen){
unsigned int k0;
do
{
SendChar(*(str k));
k ;
}while(k < strlen);
}
```
串口接收中斷函數(shù)
```
void serial () interrupt 4 using 3 {
if (RI)
{
RI0;
InBuf[0]SBUF;
}
}
```
VB與51單片機串口通信及設(shè)置方法詳解