VB6.0与51单片机、STM32进行串口通信

参考资料:https://wenku.baidu.com/view/7c9fdc3e1ed9ad51f11df207.html

1.功能描述——控制LED的亮灭

(1)通过设备管理器设置端口(右击属性,端口设置—>高级),然后选择相匹配的端口

(2)运行LED控制系统.exe,点击打开串口,再点击打开按钮(向单片机发送信号1),单片机上的小灯亮起,同时界面上的灯泡变绿,最后,点击关闭按钮(向单片机发送信号2),单片机上的小灯熄灭。

2.VB上位机程序

Dim buff(0) As Byte
Private Sub Command1_Click()
If Command1.Caption = "打开" Then
buff(0) = &H1
If (MSComm1.PortOpen = True) = True Then
MSComm1.Output = buff
Shape1.BackColor = RGB(0, 255, 0)
Command1.Caption = "关闭"
End If
Else
buff(0) = &H2
If (MSComm1.PortOpen = True) = True Then
MSComm1.Output = buff
Shape1.BackColor = RGB(222, 222, 222)
Command1.Caption = "打开"
End If
End If
End Sub

Private Sub Command2_Click()
If Command2.Caption = "打开串口" Then
Command2.Caption = "关闭串口"
Shape2.BackColor = RGB(0, 255, 0)
MSComm1.CommPort = Combo1.ListIndex + 1
MSComm1.PortOpen = True
Else
Command2.Caption = "打开串口"
Shape2.BackColor = RGB(255, 0, 0)
MSComm1.PortOpen = False
End If
End Sub

Private Sub Form_Load()
Shape1.BackColor = RGB(222, 222, 222)
Shape2.BackColor = RGB(255, 0, 0)
Combo1.AddItem "COM1"
Combo1.AddItem "COM2"
Combo1.AddItem "COM3"
Combo1.AddItem "COM4"
Combo1.ListIndex = 0
End Sub

上位机界面:

VB6.0与51单片机、STM32进行串口通信_第1张图片

3. 51单片机程序

#include 

sbit led = P1^0;			//LED灯定义
//对串口进行初始化
void InitUart()
{										  
	SCON = 0x50;			//配置串口相关寄存器
	TMOD = 0x20;			//配置定时器1相关寄存器
	TH1  = 0xfd;			//给定时器1装初值
	TL1  = 0xfd;
	TR1  = 1;				// 启动定时器1
	ES   = 1;				// 开串口中断
	EA   = 1;				// 开总中断
}


void main(void)
{
	InitUart();
	while(1);
}



void Inter() interrupt 4      //串口中断处理
{
	if(RI==1)
	{
		RI=0;
		if(SBUF == 0x01)
		{
			led = 0;
		}
		if(SBUF == 0x02)
		{
			led = 1;
		}
	}	
}

 4.STM32主程序

这里利用定时器Timer来实现判断收发数据是否完成的功能(压缩包中含有子程序)

#include "led.h"
#include "delay.h"
#include "key.h"
#include "sys.h"
#include "usart.h"

 int main(void)
 {		 
	u16 len;	
	delay_init();	    	 //延时函数初始化  
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
	uart_init(9600);	 //串口初始化为9600
 	LED_Init();			     //LED端口初始化
 	while(1)
	{
		if(USART_RX_STA&0x8000)
		{	
			len=USART_RX_STA&0x3fff;//得到此次接收到的数据长度	
			if(USART_RX_BUF[0]==0x01){
				LED1=0;
			}
			if(USART_RX_BUF[0]==0x02){
				LED1=1;
			}
			
			USART_RX_STA=0;
		}
	}	 
 }

STM32串口通信压缩包下载:

链接:https://pan.baidu.com/s/1gmoMpd0oQc1efCWYK8ifuQ 
提取码:zmuz 
 

你可能感兴趣的:(VB)