VB6.0与51单片机、STM32进行串口通信
参考资料:
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
上位机界面:
3. 51单片机程序
#include <reg52.h>
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串口通信压缩包下载:
链接: 提取码:zmuz
