51单片机和VB串口程序

合集下载

基于VB_NET的PC机和MCS_51单片机之间的串行通信

基于VB_NET的PC机和MCS_51单片机之间的串行通信

第14卷第4期北京电子科技学院学报2006年12月Vol.14No.4JournalofBeijingElectronicScienceandTechnologyInstituteDec.2006基于VB.NET的PC机和MCS-51单片机之间的串行通信何文才1,2杜鹏1,2刘培鹤1牛晓蕾1,2张媛媛1,2(1.北京电子科技学院通信工程系,北京,100070;2.西安电子科技大学通信工程学院,陕西西安,710071)摘要:本文介绍了基于VisualStudio2005的VisualBasic2005(简称VB.NET)进行串口程序开发的方法,它具有开发周期短、可靠性强等特点。

同时给出了PC机与51单片机串行通信的应用实例,这对快速掌握最新的PC机与单片机串口通信技术有一定的参考价值。

关键词:VisualBasic.NET;Serialport控件;串行通信;单片机中图分类号:TP368.2文献标识码:A文章编号:1672-464X(2006)04-0061-041引言PC机和单片机之间的通信问题一直是业界的热门话题,它广泛应用于工业控制系统、智能检测系统、数据采集系统等。

PC机与单片机之间通常采用两种通信方式:并行通信和串行通信。

并行通信是指将待发送数据的各位同时传送,串行通信则将数据一位一位地按顺序传送。

并行通信虽然传输效率高、速度快,但可靠性差,所需硬件设备复杂,不适于长距离通信(通常不超过三十米),所以一般只适用于要求实时性强,传送速率较高的系统中,实用面较窄。

相比之下,串行通信虽然速度较慢、效率较低,但可靠性好,简单易实现,传输距离较长,所以被广泛应用于多种场合,特别适合于计算机与计算机、计算机与外设之间的远距离通信[1]。

串行通信包括同步通信和异步通信。

在同步通信中,数据开始传送前用同步字符来指示,并由时钟信号来实现发送端和接受端同步。

同步通信可以提高传输速率,但硬件实现比较复杂,常用于信息量大,传输速率要求高的场合;而在异步通信中,规定了标准的字符数据传输格式,即每一帧信息由起始位、数据位、奇偶校验位和停止位组成。

51单片机 12864液晶显示并口和串口连接程序

51单片机  12864液晶显示并口和串口连接程序
sent(DATA&0XF0); //先写高位后写低位
sent((DATA&0X0F)<<4); //低位
}
void AUTO(uchar *add)
{
uchar cnt=0;
while(*(add+cnt)!='\0')
{
writLCD(1,*(add+cnt));
cnt++;
}
}
void wirtthings(uchar lines,uchar *add)//writ data to which line
else
RW=0;
delay(10);
SCK=1;
DATA=DATA<<1;
}
}
void writLCD(bit flag,uchar DATA) //writ COM or data in address
{
if(flag)
sent(0xfa);//1写数据
else
sent(0xf8);//0写指令
//writLCD(0,0x01);
wirtthings(4,"什么,only You!");
//writLCD(0,0x01);
wirtthings(1,"联系方式:");
//writLCD(0,0x01);
wirtthings(2,"QQ:452658536");
delay(100);
writLCD(0,0x01);
}
}
void delay(uchar i)
{
uchar j;
while(i--)

51单片机串口设置及应用

51单片机串口设置及应用

51单片机串口设置及应用单片机的串口设置及应用是指通过单片机的串口功能来进行通信的一种方式。

串口通信是一种全双工通信方式,可以实现双向数据传输。

单片机通过串口可以与其他设备进行通信,如计算机、传感器、LCD显示屏等。

1. 串口设置:单片机的串口通信一般需要进行以下设置:(1)串口模式选择:要根据实际情况选择串口工作模式,一般有异步串口和同步串口两种。

(2)波特率设置:串口通信需要设置一个波特率,即数据传输速率。

常见的波特率有9600、19200、115200等,需要与通信的设备保持一致。

(3)数据位设置:设置传输的数据位数,常见的有8位、9位等。

(4)停止位设置:设置停止位的个数,常见的有1位、2位等。

(5)校验位设置:可以选择是否启用校验位,校验位主要用于检测数据传输的正确性。

2. 串口应用:串口通信在很多领域都得到广泛应用,下面列举几个常见的应用场景:(1)串口与计算机通信:通过串口可以实现单片机与计算机的通信,可以进行数据的读写、控制等操作。

例如,可以通过串口将传感器采集到的数据发送给计算机,由计算机进行进一步处理分析。

(2)串口与传感器通信:串口可以与各种传感器进行通信,可以读取传感器采集到的数据,并进行处理和控制。

例如,可以通过串口连接温度传感器,读取实时的温度数据,然后进行温度控制。

(3)串口与LCD显示屏通信:通过串口可以实现单片机与LCD显示屏的通信,可以将需要显示的数据发送给LCD显示屏进行显示。

例如,可以通过串口将单片机采集到的数据以数字或字符的形式显示在LCD上。

(4)串口与外部存储器通信:通过串口可以与外部存储器进行通信,可以读写存储器中的数据。

例如,可以通过串口读取SD卡中存储的图像数据,然后进行图像处理或显示。

(5)串口与其他设备通信:通过串口可以和各种其他设备进行通信,实现数据的传输和控制。

例如,可以通过串口与打印机通信,将需要打印的数据发送给打印机进行打印。

总结:单片机的串口设置及应用是一种实现通信的重要方式。

51单片机串口通信程序。。含详细例子

51单片机串口通信程序。。含详细例子
while(RI == 0); RI = 0; c = SBUF; // 从缓冲区中把接收的字符放入 c 中 SBUF = c; // 要发送的字符放入缓冲区 while(TI == 0); TI = 0; } }
4.//////////////// /////////////////////////////////////////////////////////
pw.fpReadSign(); SendData();//通知上位机,送出读出器件特征字 }
void Erase()//擦除器件 {
pw.fpErase(); SendData();//通知上位机,擦除了器件 }
void Write()//写器件 {
BYTE n; pw.fpInitPro();//编程前的准备工作 SendData();//回应上位机表示进入写器件状态,
{
unsigned char c;
TMOD = 0x20; // 定时器 1 工作于 8 位自动重载模式, 用于产生波特率
TH1=(unsigned char)(256 - (XTAL / (32L * 12L * baudrate)));
TL1=(unsigned char)(256 - (XTAL / (32L * 12L * baudrate))); SCON = 0x50; PCON = 0x00; TR1 = 1; IE = 0x00; // 禁止任何中断 while(1) {
///////////////////////////////////////////////////////////////////////////////// //所支持的 FID,请在这里继续添加
///////////////////////////////////////////////////////////////////////////// extern void PreparePro00();//FID=00:AT89C51 编程器 extern void PreparePro01();//FID=01:AT89C2051 编程器 extern void PreparePro02();//FID=02:AT89S51 编程器

51单片机串口通信程序。。含详细例子

51单片机串口通信程序。。含详细例子

{ P3_4=0; P3_3=1;
} void RstPro()//编程器复位 {
pw.fpProOver();//直接编程结束 SendData();//通知上位机,表示编程器就绪,可以直接用此函数因为协议号(ComBuf[0])还没被修改,下同 }
void ReadSign()//读特征字 {
} void serial () interrupt 4 using 3 //串口接收中断函数 {
if (RI) { RI = 0 ; ch=SBUF; read_flag= 1 ; //就置位取数标志 }
} main()
{ init_serialcom(); //初始化串口 while ( 1 ) { if (read_flag) //如果取数标志已置位,就将读到的数从串口发出 { read_flag= 0 ; //取数标志清 0 send_char_com(ch); } }
while(RI == 0); RI = 0; c = SBUF; // 从缓冲区中把接收的字符放入 c 中 SBUF = c; // 要发送的字符放入缓冲区 while(TI == 0); TI = 0; } }
4.//////////////// /////////////////////////////////////////////////////////
SendData(); } else break;//等待回应失败 } pw.fpProOver();//操作结束设置为运行状态 ComBuf[0]=0;//通知上位机编程器进入就绪状态 SendData(); }
void Lock()//写锁定位
{
pw.fpLock();
SendData();

自制VB上位机串口监控简单程序

自制VB上位机串口监控简单程序
三、
将该控件拖到Form1里,然后按照界面的要求把要到得控件都添加到Form1里去,然后按照自己的想法去改每个控件的属性。(不一定非按我这个,你自己怎么想的就怎么定义即可,这个名字什么的其实是很灵活的)(NAME属性是在界面上看不到的,在写程序的时候会用到)
四.
写程序,双击每一个控件都会出来对应的程序。编好之后生成.EXE文件即可。就能和你的单片机进行简单的通讯啦!(注:你在上位机里设置的波特率是要和你的单片机里的下位机程序中的波特率是匹配的要不也是没有办法通讯的。)
如果没有我这给你提供下载。
下载完之后就是注册(我也不明白为什么,谁看了MSDN上的文档谁知道,我没看)
注册步骤:
一、开始------>运行----->输入 Regsvr32 MSComm32.ocx(注:我这里写的并不是我看的原始的文件上的注册表达式 原始式是 Regsvr32 C:\winnt\system32\MSComm32.ocx我试过之后不行才改到现在的表达式)这一步完了之后你已经有MSComm控件选项了,但是你还不能用还需要再次注册下(为什么?我也不知道)
自制VB上位机串口监控简单程序(内详)
前两天说要做一个VB的上位机程序,今天算是做出来最基础的部分了,趁有时间,先拿出来和大家分享下。自我感觉很有用,并且附件里的.exe和程序都可以直接用是本人调试过的,没有任何问题。
此上位机程序要实现的功能就是和51单片机进行简单的串口接收发送。
步骤:
1、装上VB的软件(废话)我用的是VB6.0的软件
2、装完之后看看有没有要的MSComm控件。如果没有还要下哦!
3、就是编写相应的上位机下位机程序啦。(我用VB编的感觉做这个还是很方便的前后用了两天半左右吧中间还又返回去重新看了串口编程的部分)

用VB控制电脑串口(正确版)

用VB控制电脑串口(正确版)

如何用VB 实现电脑串口通信无协技术顾问: 陈文斯什么是串口,为何要学习串口串口是计算机上一种非常通用设备通信的协议。

大多数台式计算机包含两个基于RS232的串口(一般用9针公头接出其中一个接口,如图1所示)。

串口同时也是仪器仪表设备通用的通信协议;很多GPIB 兼容的设备也带有RS-232口。

鉴于串口应用如此广泛,大多数单片机也内置了串口。

通过串口,单片机可以很轻松地与其它设备交换信息。

用VB 编写串口通信的好处Windows 操作系统由于其友好的用户界面赢得了很多用户的青睐。

Visual Basic 即是微软公司基于Windows 操作系统的可视化编程平台。

有些同学会疑问:我又不是计算机专业的,学习VB 是不是十分痛苦。

我告诉你们,非也!要是你对它感兴趣,很快,你会爱上它的。

VB 十分容易入门。

设计用户界面就像我们平时制作PPT 的界面一样。

只需把你需要的控件拖到界面上并调整即可。

VB 的代码也很通俗易懂。

其实基本上都是调用系统函数的。

为抛砖引玉,现举个例子,简要介绍一下VB 编写。

(以下的所有例程都是基于VB6.0的,对于较高.net 版本,可能有所不同)任务1:软件界面上有一个文本框和按钮,当点击按钮时,文本框上显示“爱电子,爱生活。

华南理工大学电子爱好者协会”1、 运行VB ,在新建程序的界面上画出一个文本框(textbox )和按钮(commandbotton )。

如图2所示;2、 双击按钮,出现代码编辑窗口。

并在其中输入代码,如图3所示;3、 运行程序,点击按钮,即可看到如图4所示的效果:是不是很简单呢?!图2图3图1图4个人建议大一大二的师弟师妹应该学习如何用VB操作串口,特别是学会如何实现电脑跟单片机的通信。

这样子,我们日后设计的电子作品必定增色不少。

现在详细讲解一下如何用VB操作串口。

(读者可去图书馆借阅相关图书,掌握串口跟VB的基础知识)要用VB操作串口,需要用到Mscomm控件。

VB串口通信程序实例

VB串口通信程序实例

VB 串口通信程序设计典型实例利用 VB 开发串口通信程序既可以使用 MSComm 控件也可以调用 Windows API 函数实 现。

不过,只要 MSComm 控件可以被选用,我们推荐选择此控件实现,因为 MSComm 控 件的功能和 API 调用一样强,甚至比它还好且使用起来更加简单。

在本章提供的串口通信程序设计中,除了 PC 与 PC 串口通信外,PC 与单片机、PC 与 智能仪表、PC 与 PLC、PC 与 GSM 短信模块等串口通信任务的实现均采用 MSComm 控件。

6.1 PC 与 PC 串口通信程序设计当两台串口设备通信距离较近时,可以直接连接,最简单的情况,在通信中只需 3 根线 (发送线、接收线、信号地线)便可实现全双工异步串行通信。

本设计通过两台 PC 串口 3 线连接,介绍了利用 API 函数和 MSComm 控件设计串口通 信程序的方法,包括字符与文件的发送与接收。

6.1.1 PC 与 PC 串口通信程序设计目的(1)掌握 PC 与 PC 串口通信的线路连接方法。

(2)利用 MSComm 控件和 API 函数实现 PC 与 PC 串口通信的程序设计方法。

6.1.2 PC 与 PC 串口通信程序设计用软、硬件本设计用到的硬件和软件清单如表 6-1 所示。

表 6-1 序 1 2 3 号 PC 或 IPC 串口通信线(三线制) Visual Basic 6.0 设计用软、硬件 名 称 数 2 1 1 量6.1.3 PC 与 PC 串口通信程序硬件线路图线路说明,在计算机通电前,按图 6-1 所示将两台 PC 通过串口线连接起来:计算机 A 串口 COM1 端口的 TXD 与计算机 B 串口 COM1 端口的 RXD 相连, 计算机 A 串口 COM1 端 口的 RXD 与计算机 B 串口 COM1 端口的 TXD 相连, 计算机 A 串口 COM1 端口的 GND 与 计算机 B 串口 COM1 端口的 GND 相连。

C51LCD1602VB上位机实现简单通信.

C51LCD1602VB上位机实现简单通信.

设计基本原理主要功能:上位机和下位机连接好后握手,如果成功,上位机就可以发字符串让下位机的LCD显示出来,如果没有握手就不显示上位机发来的内容.下位机设计:主程序首先初始化串口和LCD,然后进入一个死循环,这个循环往LCD写dataArray这个数组中的数据,因此只要改变了这个数组中的第0-31位的内容就相当于改变了屏幕上显示的内容. 当串口发来消息的时候,执行中断号为4(串口中断)的服务子程序.这时候还不能让上位机往下位机传字符串,因此需要判断是否已经握手,判断的标志就是dispEn (display enable),如果等于0说明还没有握手,就把用户发来的数据当成是控制字control,如果是等于1说明之前已经握过手了,就把用户发来的数据放到dataArray中.最后判断控制字是否是握手,如果control等于0x00是就握手信号,然后回复0x01.然后把dispEn=1,最后把控制字control改掉(因为下一次中断可能已经不是握手信号了)上位机设计:由于已经把端口号写在vb程序中了,所以要改端口号的话要进vb的代码中把mPort = 4 中的4 改为自己需要的串行端口号.然后运行程序,打开端口,此时没有和下位机握手,所以输入数据后单击发送是没有反应的,所以需要先单击握手按钮,向传哭发送0x00,然后延时800毫秒等待回复,然后接收数据,如果回复的是0x01那就表明握手成功,如果没有回复那就是握手失败.用户点击发送信息,上位机把字符串拆分成字符来发送一次发送一个字符,每个字符发送延时30毫秒避免因为连续发送而造成的乱码.a)原理框图b)硬件电路原理图AT89C521~8:I/OP1口(P1.0~P1.7);9:复位脚(RST/Vpd);10~17:I/OP3口(P3.0=RXD,P3.1=TXD,P3.2=-INT0,P3.3=-INT1,P3.4=T0,P3.5=T1,P3.6=-WR,P3.7=-RD)主要是此引脚;18、19:晶振(18=XTAL2,19=XTAL1);20:地(Vss);21~28:I/OP2口(P2.0~P2.7);29:-PSEN;30:ALE/-PROG;31:-EA/Vpp32~39:I/OP0口(P0.7~P0.0);40:+5V电源。

VB串口通信源程序[1]

VB串口通信源程序[1]

Private Sub Form_Load()'设置打开端口If OpenPort(3) = False ThenMsgBox "串口打开失败!"End IfEnd SubPrivate Sub Command1_Click()Dim sBuf(2) As BytesBuf(0) = &H55sBuf(1) = &H31sBuf(2) = &HFFIf SendByte(sBuf) = False ThenEnd IfEnd Sub'收到数据产生MSComm事件Private Sub MSComm1_OnComm()Dim i As IntegerDim rBuf() As ByterBuf = MSComm1.InputFor i = 0 To UBound(rBuf)Debug.Print rBuf(i)Next iEnd Sub'串口初始化Private Function OpenPort(PortNum As Integer) As BooleanOn Error GoTo ErrExit '出错转移到ErrExit处理With Me.MSComm1.CommPort = PortNum '端口号.Settings = "9600,n,8,1" '波特率=9600bps;n(无奇偶校验)e(偶校验)o(奇校验);8位数据位;1位停止位.InputMode = 1 '采用二进制数据传输.NullDiscard = False 'NULL字符从端口传送到接受缓冲区.DTREnable = False 'DTR线无效.EOFEnable = False '不寻找EOF符.RTSEnable = False 'RTS线无效.InBufferCount = 0 '清空接受缓冲区.OutBufferCount = 0 '清空传输缓冲区.SThreshold = 0 '不产生MSComm事件.RThreshold = 1 '产生MSComm事件.InputLen = 0 '当输入占用时,告诉控件读入整个缓冲区。

vb串口编程实例

vb串口编程实例

VB串口编程实例介绍VB(Visual Basic)是一种基于对象的编程语言,可用于开发Windows应用程序。

串口编程是指通过串行通信接口与外部设备进行数据交互。

本文将介绍如何使用VB进行串口编程,以实现与外部设备的通信。

前提条件在开始编写VB串口程序之前,需要确保以下条件已满足: - 安装了Visual Studio开发环境,可以选择最新版本的Visual Studio Community免费版。

- 确保计算机上有可用的串口(如COM1、COM2等)或USB转串口适配器。

步骤1. 创建新项目打开Visual Studio,选择创建一个新的VB Windows应用程序项目。

2. 添加控件在窗体上添加以下控件: - 一个ListBox控件用于显示接收到的数据。

- 两个Button控件分别用于打开和关闭串口。

- 一个ComboBox控件用于选择串口号。

- 一个TextBox控件用于输入要发送的数据。

- 一个Button控件用于发送数据。

3. 设置串口属性在窗体代码中添加如下代码:Imports System.IO.PortsPublic Class Form1Dim serialPort As New SerialPort()Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Lo ad' 获取可用的串口号并添加到ComboBox中Dim ports As String() = SerialPort.GetPortNames()ComboBox1.Items.AddRange(ports)End SubPrivate Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click' 打开串口TryserialPort.PortName = ComboBox1.SelectedItem.ToString()serialPort.BaudRate = 9600serialPort.Parity = Parity.NoneserialPort.DataBits = 8serialPort.StopBits = StopBits.OneserialPort.Open()Button1.Enabled = FalseButton2.Enabled = TrueCatch ex As ExceptionMessageBox.Show("无法打开串口:" + ex.Message)End TryEnd SubPrivate Sub Button2_Click(sender As Object, e As EventArgs) Handles Button 2.Click' 关闭串口TryserialPort.Close()Button1.Enabled = TrueButton2.Enabled = FalseCatch ex As ExceptionMessageBox.Show("无法关闭串口:" + ex.Message)End TryEnd SubEnd Class4. 接收数据和发送数据在窗体代码中添加如下代码:Imports System.IO.PortsPublic Class Form1Dim serialPort As New SerialPort()Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Lo ad' 获取可用的串口号并添加到ComboBox中Dim ports As String() = SerialPort.GetPortNames()ComboBox1.Items.AddRange(ports)End SubPrivate Sub Button1_Click(sender As Object, e As EventArgs) Handles Button 1.Click' 打开串口' 省略部分代码...AddHandler serialPort.DataReceived, AddressOf DataReceivedHandlerserialPort.Open()Button1.Enabled = FalseButton2.Enabled = TrueEnd SubPrivate Sub Button2_Click(sender As Object, e As EventArgs) Handles Button 2.Click' 关闭串口' 省略部分代码...RemoveHandler serialPort.DataReceived, AddressOf DataReceivedHandler serialPort.Close()Button1.Enabled = TrueButton2.Enabled = FalseEnd SubPrivate Sub DataReceivedHandler(sender As Object, e As SerialDataReceivedE ventArgs)' 接收数据并显示在ListBox中Dim data As String = serialPort.ReadLine()ListBox1.Invoke(Sub() ListBox1.Items.Add(data))End SubPrivate Sub Button3_Click(sender As Object, e As EventArgs) Handles Button 3.Click' 发送数据If serialPort.IsOpen ThenDim dataToSend As String = TextBox1.TextserialPort.WriteLine(dataToSend)TextBox1.Clear()ElseMessageBox.Show("请先打开串口")End IfEnd SubEnd Class5. 运行程序点击运行按钮,程序将打开一个窗口,其中包含串口选择、打开/关闭串口、接收数据和发送数据的功能。

VB和51单片机串口通信讲解

VB和51单片机串口通信讲解

VB和51单片机串口通信讲解Commport;设置或返回串口号。

SettingS:以字符串的形式设置或返回串口通信参数。

Portopen:设置或返回串口状态。

InputMode:设置或返回接收数据的类型。

Inputlen:设置或返回一次从接收缓冲区中读取字节数。

InBufferSize:设置或返回接收缓冲区的大小,缺省值为l 024字节。

InBufferCount:设置或返回接收缓冲区中等待计算机接收的字符数。

Input:从接收缓冲区中读取数据并清空该缓冲区,该属性设计时无效,运行时只读。

OutBufferSize:设置或返回发送缓冲区的大小,缺省值为512字节。

OutBufferCount:设置或返回发送缓冲区中等待计算机发送的字符数。

Output:向发送缓冲区发送数据,该属性设计时无效,运行时只读。

设置好这些属性和方法,程序很容易就可以编出来了,其中要注意的是串口的波特串设置,OnComm事件的程序编写。

程序的设计是这样的,计算机向单片机发送一个’S’,表示通信开始。

然后紧接着又发送9个字符,其中最后一个字符是前面9个字符(包括’S’)的校验和。

单片机正确接收到10个字符后,把10个字符从新又送回来。

//---------------------------------------初始化串口设计-----------------------------Private Sub Form_Load()Comm1.Setting="9600,n,8,1," ’设置波特率和发送字符格式mPort=1 ’设置通讯串口Comm1.InputLen=0 ’设置或返回一次从接收缓冲区中读取字节数,0表示一次读取所有数据Comm1.InBuffersize=512Comm1.InBufferCount=0Comm1.OutBufferCount=0Comm1.Rthreshold=1Comm1.PortOpen=TrueEnd Sub ’打开串口//--------------------------------------给单片机发送’S’,开始通信-----------------------------Private Sub Command1_C1ick()Timer1.Enabled=TrueEnd SubPrivate Sub Command2_C1ick()Varbuffet=“S”Comm1.Ouput=varbuffeTimer2.Enabled=TrueEnd SubPrivate Sub Form_Unload(Cancel As Integer)Comm1.PortOpen=FalseEnd Sub//---------------------------------------向单片机发送数据-----------------------------Private Sub Timer2_ Timer()Outputsignal=Str(Text2.text) ’向单片机发送数据Temp(1)=Cbyte(outputsignal)Varbuffer=tempComml.Output=varbufferTimer2.Enabled=FalseEnd Sub//---------------------------------------接收单片机发送的数据,并显示-----------------------------Private Sub Comm1_OnComm()Select Case mEvent ’设置oncomm事件,读取片机存的值Case comEvReceiveInputsignal=comm1.InputText1.Text=Asc(Inputsignal) ’单片机存的值用textbox显示出Case ElseEnd selectEnd Sub关于MSCOMM控件的一些说明VB5.0/6.的MSComm通信控件提供了一系列标准通信命令的接口,它允许建立串口连接,可以连接到其他通信设备(如Modem).还可以发送命令、进行数据交换以及监视和响应在通信过程中可能发生的各种错误和事件,从而可以用它创建全双工、事件驱动的、高效实用的通信程序。

51单片机串行口中断服务程序

51单片机串行口中断服务程序

51单片机串行口中断服务程序单片机串行口中断服务程序是指在单片机进行串行通信时,当接收到数据时会触发中断,然后执行相应的中断服务程序。

下面是一个示例的单片机串行口中断服务程序,共计1200字以上。

#include <reg51.h> // 引入reg51.h头文件//定义串行口中断标志sbit RI_FLAG = P3^0; // 数据接收中断标志sbit TI_FLAG = P3^1; // 数据发送中断标志//定义串行口接收数据缓冲区unsigned char receiveBuffer[10];unsigned char receiveCount = 0;//定义串行口发送数据缓冲区unsigned char sendBuffer[10];unsigned char sendCount = 0;//串行口中断服务函数void serialInterrupt( interrupt 4if(RI_FLAG) // 判断是否是数据接收中断receiveBuffer[receiveCount] = SBUF; // 读取串行口接收数据receiveCount++; // 接收计数加1RI_FLAG=0;//清除中断标志位}if(TI_FLAG) // 判断是否是数据发送中断if(sendCount < 10) // 判断是否还有数据需要发送SBUF = sendBuffer[sendCount]; // 发送串行口数据sendCount++; // 发送计数加1}elsesendCount = 0; // 重置发送计数TI_FLAG=0;//清除中断标志位}}//主函数void mainES=1;//允许串行口中断TMOD=0x20;//设置定时器1为模式2,串行口使用定时器1 TH1=0xFD;//设置波特率为9600,定时器初值为0xFDTL1=0xFD;//定时器初值为0xFDSCON=0x50;//设置串行口工作在方式1,允许接收TR1=1;//启动定时器1while(1)//主程序逻辑//将数据存入发送缓冲区sendBuffer[0] = 'H';sendBuffer[1] = 'e';sendBuffer[2] = 'l';sendBuffer[3] = 'l';sendBuffer[4] = 'o';sendBuffer[5] = '\r'; // 发送回车符sendBuffer[6] = '\n'; // 发送换行符while(sendCount != 0) //等待数据发送完毕//主程序逻辑}}。

51单片机的2个串口分别通信的方法

51单片机的2个串口分别通信的方法

51单片机的2个串口资源分别通信的方法当使用51单片机的2个串口资源进行通信时,比如用一个串口与PLC的串口使用RS485协议通信,一个串口通过蓝牙模块和另一个单片机无线通信时,该如何处理呢?传统的51单片机只有1个串口资源,只能采用分时复用的方法。

STC的15系列增强版51单片机具有多个串口资源,本文将描述如何使用IAP15W4K58S单片机用一个串口资源与PLC的RS485有线通信,另一个串口资源与Arduino单片机通过蓝牙模块无线通信,该通讯连接过程中PLC作为主机,IAP15W4K58S作为中间机,Arduino单片机作为最低层级。

工作过程是按下启动按键,PLC发信息给IAP15W4K58S单片机发高速脉冲控制步进电机驱动的机械臂运动取走货物,当货物取走后,IAP15W4K58S单片机通过蓝牙模块通知Arduino单片机控制的小车将新货物运送过来。

连接结构示意图如下图所示。

本例程使用的单片机型号为:IAP15W4K58S,该单片机有4个采用UART 工作方式的全双工异步串行通信接口(分别为串口1、串口2、串口3和串口4),每个串行口由2个数据缓冲器、1个移位寄存器、1个串行控制寄存器和1个波特率发生器等组成。

本项目使用串行口1和串行口2。

串行口1的两个缓冲器共用寄存器SBUF (99H),串行口2的两个缓冲器共用寄存器S2BUF(9BH)。

10位(1起始位,8位数据位,1停止位)可变波特率(9600)。

串口1对应的硬件部分是TxD和RxD,串行口2对应硬件部分是TxD2和RxD2。

串口1选择引脚P3.0(RxD)和P3.1(TxD),串口2选择引脚P1.0(RxD)和P1.1(TxD)。

串口1既可以选择T1作为波特率发生器,也可以选择T2作为波特率发生器。

本文串口1提供2个选择(T1和T2),串口2只能选择T2作波特率发生器。

但是当串口1和串口2的波特率相同时,可以共用T2作为波特率发器,当T2工作在1T模式时,串行口1的波特率=SYSclk/(65536-[RL_TH2,RL_TL2])/4,SYSclk表示系统时钟频率,[RL_TH2,RL_TL2]表示T2H,T2L的定时初值设置值。

用VB实现单片机和计算机的串口通信

用VB实现单片机和计算机的串口通信

用VB实现单片机和计算机的串口通信//ex99 单片机数据发送程序#include //包含单片机寄存器的头文件/*****************************************************函数功能:向PC 发送一个字节数据***************************************************/void Send(unsigned char dat){ SBUF=dat; while(TI==0) ; TI=0;}/*****************************************************函数功能:延时1ms(3j+2)i=(3乘以33+2) 乘以10=1010(微秒),可以认为是1毫秒***************************************************/void delay1ms(){ unsigned char i,j; for(i=0;i<10;i++) for(j=0;j<33;j++) ;}/*****************************************************函数功能:延时若干毫秒***************************************************/void delaynms(unsigned char x){unsigned char i; for(i=0;i<x;i++) delay1ms();}/*****************************************************函数功能:主函数***************************************************/void main(void){ unsigned char i; TMOD=0x20; //定时器T1工作于方式2 TH1=0xfd; //根据规定给定时器T1赋初值TL1=0xfd; //根据规定给定时器T1赋初值PCON=0x00; //波特率9600 TR1=1; //启动定时器t1 SCON=0x40; //串口工作方式1 while(1) { for(i=0;i<200;i++) //模拟检测数据{ Send(i); //发送数据i delaynms(100); //100ms发送一次检测数据} }}tips:感谢大家的阅读,本文由我司收集整编。

VBmscomm串口控件及及51单片机通讯使用指南

VBmscomm串口控件及及51单片机通讯使用指南

一、概述串口通讯作为一种古老而又灵活的通讯方式,被广泛地应用于PC间的通讯以及PC和单片机之间的通讯之中。

提到串口通讯的编程,人们往往立刻想到C、汇编等对系统底层操作支持较好的编程语言以及大串繁琐的代码。

实际上,只要我们借助相关ActiveX控件的帮助,即使是在底层操作一向不被人看好的VB中,一样能够实现串口通讯,甚至其实现方法和C、汇编相比,要更加快捷方便。

下面,笔者就介绍一下在VB中实现串口通讯的方法。

在Visual Basic中有一个名为Microsoft Communication Control(简称MSComm)的通讯控件。

我们只要通过对此控件的属性和事件进行相应编程操作,就可以轻松地实现串口通讯。

下面,笔者就简要地介绍一下MSComm控件的使用方法。

二、MSComm控件的主要属性、事件1、MSComm的属性常用属性和方法利用MSComm控件实现计算机通信的关键是理解并正确设置MSComm控件众多属性和方法。

以下是MSComm控件的常用属性和方法:●Commport:设置通讯所占用的串口号。

如设成1(默认值),表示对Com1进行操作。

语法 mPort[value ] (value 一整型值,说明端口号。

)说明在设计时,value 可以设置成从 1 到 16 的任何数(缺省值为 1)。

但是如果用PortOpen 属性打开一个并不存在的端口时,MSComm 控件会产生错误 68(设备无效)。

注意:必须在打开端口之前设置 CommPort 属性。

●CTSHolding 属性:确定是否可通过查询 Clear To Send (CTS) 线的状态发送数据。

Clear To Send 是调制解调器发送到相联计算机的信号,指示传输可以进行。

该属性在设计时无效,在运行时为只读。

语法: object.CTSHolding(Boolean)Mscomm 控件的 CTSHolding 属性设置值:True Clear To Send 线为高电平。

用VB开发PC与单片机通信的上位机程序

用VB开发PC与单片机通信的上位机程序

1 符号位2 百位3 十位4 个位注释:1,符号符,+(2B)或—(2D),表示数据的正负2,3,4,百位,十位,和个位数字5,结束符,用大写字母A(41)表示接着,我们就要明确设计思路了,这个程序的设计将采用Microsoft Visual Basic 6.0(以下简称VB6.0)作为编译环境,运用串口通讯控件MSComm,通过计时器控件实现以查询方式编写的串口数据的接收和实时绘图。

二,程序界面设计(1)创建一个标准EXE工程:启动VB6.0,在自动弹出的“新建工程”窗口中单击“标准EXE”图标,然后单击“打开”按钮即可创建一个标准EXE工程。

将弹出的窗体的Caption属性设置为串口通讯与实时绘图程序。

[attachment=1364699](1)添加串口通信控件MSComm:VB的串口通信控件MSComm并不会主动出现在工具箱中,当我们需要MSComm控件时,首先要把它加入工具箱中,选择“工程”菜单下的“部件...”子菜单,在弹出的“部件”对话框中,在“控件”选项卡属性中选中“Microsoft Comm Control 6.0”,单击“确定”按钮后,在工具箱中就出现了一个形似电话的图标,这就是MSComm控件,选择MSComm控件的图标,将它添加到适当位置,采用默认名称MSComm1。

[attachment=1364697][attachment=1364696](1)添加一个Timer控件用于自动接收字符:选择Timer控件的图标,将它添加到适当位置,采用默认名称Timer1,Interval属性为1,Enabled属性为False。

(2)添加两个文本框控件用于显示数据:选择TexrBox控件的图标,将它添加到适当位置,采用默认名称Text1与Text2,Text属性均设置为空,设置Text2的属性MultiLine=True,ScrollBars=2-Vertical。

Text1用于显示最新的一组数据,Text2用于储存之前的所有数据。

使用VB开发串口、USB通信软件

使用VB开发串口、USB通信软件
说明:当EOFEnable属性设置为False,OnComm控件将不在输入流中
寻 找EOF字符。
使用VB开发串口、USB通信软件
使用Windows的API应用程序接口
• Handshake常数。 Handshake常数如表所示。
常数

描述
comNone 0 无握手
comXonXoff 1 XOn/Xoff握手
使用VB开发串口、USB通信软件
使用串口通信控件
针对串口通信,微软公司专门提供了MSComm控件, 使用该控件进行串口通信设计是十分方便的,程序员不必 花时间去了解较为复杂的API函数。通过简单修改控件的 属性和使用控件提供的方法,就可以实现对串口的配置、 完成串口接收和发送数据。
使用VB开发串口、USB通信软件
使用VB开发串口、USB通信软件
使用Windows的API应用程序接口
• Settings属性的设置由4个设置组成,格式如下:
BBBB
P
D
S
各个属性值间用逗号隔开,其中BBBB为波特率,P为奇偶校验,D为数 据位数,S为停止位数。其默认值为“9600,N,8,1”。
• InputLen属性。设置并返回Input属性从接收缓冲区中读取的字符数。 InputLen 属性的默认值是0。设置InputLen为0时,使用Input将使MSComm 控件读取缓冲区中全部的内容。
4
comEvCD
5
comEvRing
6
使用VB开co发mE串v口EO、F USB通信7软件
描述 发送事件 接收事件 clear-to-send线变化 data-set ready线变化 carrier detect线变化 振铃检测 文件结束
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Exit Sub
Else
End If
Next
Exit Sub
uerror:
'Print "出错或占用Com号= "; a
Resume Next
End Sub
Private Sub Form_Load()
If Len(Hex(BytReceived(i))) = 1 Then
strData = strData & "0" & Hex(BytReceived(i))
Else
strData = strData & Hex(BytReceived(i))
If MSComm1.PortOpen = True Then
MSComm1.Output = sj
Else
MSComm1.PortOpen = True
Shape1.FillColor = vbGreen
Text2 = ""
Call cmdOpen_Click
End Sub
Private Sub MSComm1_OnComm() '接收数据
Dim strBuff As String
Select Case mEvent
Case 2
MSComm1.Output = sj
End If
Else
MsgBox ("格式不对!")
End If
End Sub
'字符串表示的十六进制数据转化为相应的字节串,返回转化后的字节数
Private Sub ortNum()
End If
End Sub
Private Sub cmdSendHex_Click() '16进制发送
Dim sj() As Byte
Dim sj_Txt As String
Dim i As Integer
sj_Txt = TxtSend
If Len(TxtSend) Mod 2 = 0 And Len(TxtSend) <> 0 Then '检验16进制字符串长
End If
Next
txtReceive = strData
End Function
cmdOpen.Caption = "打开串口"
MSComm1.PortOpen = False '打开端口
Shape1.FillColor = vbRed
Label1 = "COM" & a & " 关闭"
Else
OpenPortNum
Text2 = lenInput \ 2
'数据处理代码
End Select
End Sub
Public Function jieshou() '接收数据处理为16进制
Dim i As Integer
For i = 0 To UBound(BytReceived)
MSComm1.InputLen = 0
strBuff = MSComm1.Input
BytReceived() = strBuff
jieshou
lenInput = Len(strData)
cmdOpen.Caption = "关闭串口"
Shape1.FillColor = vbGreen
Label1 = "COM" & a & " 打开"
End If
openFlag = Not openFlag
End Sub
Dim strSendText As String '发送文本数据
Dim blnAutoSendFlag As Boolean
Dim openFlag As Boolean
Private Sub cmdOpen_Click() '打开关闭端口
If openFlag Then
Private Sub cmdSendASc_Click() '文本发送
Dim sj_Txt As String
sj_Txt = TxtSend
If MSComm1.PortOpen = True Then
MSComm1.Output = sj_Txt
On Error GoTo uerror
For a = 1 To 16
mPort = a
MSComm1.PortOpen = True
If MSComm1.PortOpen = True Then
'Print "可用Com号= "; a
ReDim sj(Len(sj_Txt) / 2 - 1)
For i = 0 To Len(sj_Txt) - 1 Step 2
sj(i / 2) = Val("&H" & Mid(sj_Txt, i + 1, 2))
Next
Option Explicit
Dim a As Integer
Dim BytReceived() As Byte
Dim strData As String
Dim lenInput As Integer
Dim bytSendByte() As Byte '发送二进制数据
MSComm1.RThreshold = 1 '产生MSComm事件
MSComm1.InBufferSize = 1024
TxtSend = ""
TxtSend = "" '800A00113135323634389794"
txtReceive = ""
MSComm1.Settings = "9600,n,8,1"
MSComm1.InputMode = comInputModeBinary '采用二进制传输
MSComm1.InBufferCount = 0 '清空接受缓冲区
MSComm1.OutBufferCount = 0 '清空传输缓冲区
相关文档
最新文档