首页资源分类嵌入式处理器51内核 > vb与单片机串口通信

vb与单片机串口通信

已有 445786个资源

下载专区

文档信息举报收藏

标    签:单片机

分    享:

文档简介

vb与单片机串口通讯控制LED源代码,个人对其进行了详解,有助于学习PC与单片机通讯。

文档预览

-------------------------------------------------------------------------------------- 以下为单片机程序 -------------------------------------------------------------------------------------- //以下为单片机C语言程序 //以下为初始化 #include sbit lighta = P3^3; //定义某个IO口为LED灯1号 sbit lightb = P3^2; //定义某个IO口为LED灯2号 unsigned char datmsg[10]; //定义数组datmsg[10]为无符号字符 unsigned char checkdata; //定义变量checkdata为无符号字符 ---------------------------------------------------------------------------------------- //以下为各中断子程序 unsigned char CLU_checkdata(void) //子函数形参返回空值 { //checkdata=0; //计算校验位 unsigned char i; //定义变量i为无符号字符 for(i=0;i<9;i++) //for条件语句 { checkdata=checkdata | datmsg[i]; //将前9位的“或”存到checkdata里 } return(checkdata); //返回checkdata变量值 } ---------------------------------------------------------------------------------------- //以下为主程序 void main(void) { unsigned char temp,i; //定义无符号字符变量temp,i TMOD=0x20; //设置波特率为19.2kb/s ,十六进制0x20转为二进制为00100000,十进制为32 PCON=0x80; //十六进制0x80转为二进制为10000000,十进制为128 TH1=0xfd; TL1=0xfd; //十六进制0xfd转为二进制为11111101,十进制为253 TR1=1; //启动定时器1 SCON=0x50; //十六进制0x50转为二进制10100000,十进制为80 lighta=1; //设置串行口 lightb=1; //设置串行口为10位异步收发,且允许接收 while(1) //while循环语句为真用于不间断查询及执行 { for(temp=0;temp<10;temp++) //连续接收6个字节 { while(RI==0); RI=0; //将0赋予RI datmsg[temp]=SBUF; //将变量SBUF的10个值放入数组datmsg中 } for(i=0;i<1;i++) { SBUF=datmsg[i]; //将数组首位赋予变量SBUF if(SBUF==0x02) //如果发送的首字节为起始位的ASC码02,则继续发送,否则不发送 { lighta=0; //若起始位正确了,继续发送,且点亮led灯1号 for(temp=0;temp<10;temp++) //连续发送6个字节 { SBUF=datmsg[temp]; //将数组10个位放于SBUF while(TI==0); TI=0; checkdata=0; CLU_checkdata(); //调用子函数 if (checkdata==datmsg[9]) //如果校验位正确,则点亮led灯2号 { lightb=0; //给LED灯低电平 } } } } } } ---------------------------------------------------------------------------------------- 以下部分为vb中程序 ---------------------------------------------------------------------------------------- '初始化 Option Explicit Dim check As Byte '定义变量check为位 Dim i As Integer '定义变量i为整形 Dim Senddat(9) As Byte '定义变量senddat(9)为位 ---------------------------------------------------------------------------------------- '按钮cmdcomm为发送按钮代码 Private Sub cmdcomm_Click() '以下代码定义变量,进行初始化 Dim Rcvdat() As Byte '定义变量Rcvdat()为位 Dim dattemp As Variant '定义变量dattemp为变形体 cmdcomm.Enabled = False '使cmdcomm按钮失效防止误操作 '以下代码初始化MSComm1串口部件 MSComm1.CommPort = 1 '设置端口号为1 MSComm1.Settings = "19200,N,8,1" '设置波特率19200等通 信协议 MSComm1.InputLen = 10 '设置一次从串口读取10个字节 MSComm1.PortOpen = True '打开串行口 MSComm1.InputMode = comInputModeBinary '从串口读取二进制数据 MSComm1.Output = Senddat '发送数据 Do Until MSComm1.InBufferCount >= 10 '查询方式,等待接收到10个字节 DoEvents Loop dattemp = MSComm1.Input '从串口读取数据至变体变量 Rcvdat = dattemp '数据送至接收二进制数组Rvcdat中 txtRcv.Text = "" 'txtRcv.Text为空 For i = 0 To 9 '接收数据送至接收文本框txtRcv显示 txtRcv.Text = txtRcv.Text & Right("0" & Hex(Rcvdat(i)), 2) '将数组Rcvdat转为十六进制,前面加0,然后从左向右移动2位,然后再和txtRcv.Text的值一起显示 Next i MSComm1.PortOpen = False '关闭串行口 cmdcomm.Enabled = True '使能cmdcomm接钮 End Sub ---------------------------------------------------------------------------------------- '以下按钮为接收按钮代码 Private Sub Command1_Click() check = 0 '将变量check位为0 For i = 0 To 8 '从发送文本框txtSend获取发送数据 Senddat(i) = "&H" & Mid(txtSend.Text, i * 2 + 1, 2) 'i*2+1为单数位,将文本框txtSend取单数位变2前面加&H check = check Or Senddat(i) Next i Senddat(9) = check TextCheck.Text = txtSend.Text & Hex(check) '将文本框TextCheck的值显示为发送框数值加check的数值 End Sub ---------------------------------------------------------------------------------------- '以下代码为退出按钮 Private Sub Command2_Click() End End Sub ---------------------------------------------------------------------------------------- '以下代码为清除文本框按钮 Private Sub Command3_Click() txtRcv.Text = "" txtSend.Text = "" TextCheck.Text = "" End Sub ---------------------------------------------------------------------------------------- '窗体初始化 Private Sub Form_Load() txtSend.Text = "020000000000000000" End Sub ---------------------------------------------------------------------------------------------

Top_arrow
回到顶部
EEWORLD下载中心所有资源均来自网友分享,如有侵权,请发送举报邮件到客服邮箱bbs_service@eeworld.com.cn 或通过站内短信息或QQ:273568022联系管理员 高进,我们会尽快处理。