VB与51单片机串口通信

2025-09-28 08:22:42

1、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

2、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

3、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

4、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,程序要加定时中断函数,否则程序出错.

}

5、查询方式:

for(;;)

       {  

              while(RI==0);

              RI=0;

              ComData=SBUF;//接收数据

              SBUF=ComData;//把收到数据再发送回去

             while(TI==0);

              TI=0;

       }

6、发送函数:

//向串口发送一个字符

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);

}

7、//串口接收中断函数

void serial () interrupt 4 using 3

{

        if (RI)

        {

             RI=0;

              InBuf[0]=SBUF;

        }

}

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢