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
