当前位置:首页 > 代码 > 正文

串口助手源代码(串口助手源代码 vc api)

admin 发布:2022-12-19 16:06 147


本篇文章给大家谈谈串口助手源代码,以及串口助手源代码 vc api对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

用串口调试助手给单片机发送一串字符串,单片机接受完之后向串口助手回显,出现了个神奇的问题,求助

发送函数中,这样写,防止TI还未来得及置为1,就一直在发送,这样写可防止上述情况

#includereg52.h

#define uint unsigned int

#define uchar unsigned char

sbit D0=P1^0;

uchar flag;

uchar a[30];

uint y, u,c;

/*发送子程序*/

void fasong(uchar dat)

{

ES=0;

SBUF=dat;

while(!TI);

TI=0;

ES=1;

}

/*延时子程序*/

void delay(uint n)

{

uint i,j;

for(i=0;in;i++)

{

for(j=0;j250;j++);

}

}

/*主程序*/

void main()

{

SM0=0;//选择工作方式一

SM1=1;

TR1=1;

REN=1;

TMOD=0X20;//设置定时器1为工作方式2

TH1=0XFD;

TL1=0XFD;//设置波特率为9600

EA=1;//开CPU中断

ES=1;//开串行口中断

delay(1000);

D0=0;

while(1)

{

while(flag)

{

y=0;

while(a[y]!='\0')

{

fasong(a[y]);

a[y]='\0'; //清空字符,方便下次接收

y++;

}

y=0;

flag=0; }

}

}

void jsfs() interrupt 4

{

c=0;

u=1000;

ES=0;

while(u--) //一直接收 直到字符串接收完毕

{

while(RI)

{

a[c]=SBUF;

c++;

RI=0;

u=1000;

}

}

ES=1;

flag=1;

}

版的串口调试助手源代码.怎么实现串口发送文件的

如果你测试的是同一台机子上的两个串口,就连接好2个串口,然后打开两次串口调试助手,分别选好串口编号,设定波特率等参数,点连接,然后在发送区随便填点信息点发送,打开的2个串口调试助手的窗口能互相发送接收,就说明这两个串口能正常通信

如果测试2台不同机子上的串口,就分辨在两台机子上打开串口调试助手,操作一样

如果只测试一个串口,RS422和RS485方式的是测不了的,RS232的可以短接2,3针脚,打开一个串口调试助手,选好串口编号和参数,发送信息能在接收区得到回复,证明该串口能工作

串口调试助手

串口调试助手(不断完善中)

说明

说明:版权所有:沧海一声笑

邮箱:minios@yeah.net

Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal

lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String,

ByVal nShowCmd As Long) As Long

Option Explicit

Dim inputsignal

Dim text_temp As String

Dim flag_dis As Boolean '是否停止显示标志量

Dim rx_count As Single '接收到的字符数

Dim tx_count As Single '发送除去的字符数

'关闭程序

Private Sub Command6_Click()

MSComm1.PortOpen = False '关闭串口

Unload Me '关闭程序

End Sub

'单击“帮助”按钮打开网页链接

Private Sub Command7_Click()

ShellExecute Me.hwnd, "open", "", "", "", 5

End Sub

Private Sub Command8_Click()

Open Label16.Caption "\com_data.txt" For Append As #1

Write #1, " 保存时间:", Format(Now, "yyyy 年m 月dd 日 hh:mm")

Write #1, Text1.Text

Close #1 '关闭文件

End Sub

''''''''初始化

Private Sub form_load()

MSComm1.Settings = "9600,n,8,1" '串口的相关参数设置

MSComm1.CommPort = 1 '串口1

MSComm1.InputLen = 0 '表示一次读取所有数据

MSComm1.InBufferSize = 5120

MSComm1.InBufferCount = 0

MSComm1.OutBufferSize = 5120

MSComm1.OutBufferCount = 0

MSComm1.RThreshold = 1 '每接收一个字符触发一次oncomm 事件

MSComm1.SThreshold = 1

MSComm1.PortOpen = True '打开串口

Shape1.Shape = 2

Shape1.Visible = True

Shape1.FillStyle = 0 '全部填充

Shape1.FillColor = QBColor(12) '红色

flag_dis = False

Timer2.Enabled = True

Timer2.Interval = 250

rx_count = 0

tx_count = 0

Label14.Caption = rx_count '接收到的字符数

Label15.Caption = tx_count '发送出去的字符数

'串口选择

Combo1.AddItem "COM1"

Combo1.AddItem "COM2"

Combo1.AddItem "COM3"

Combo1.AddItem "COM4"

'波特率

Combo2.AddItem "300"

Combo2.AddItem "600"

Combo2.AddItem "1200"

Combo2.AddItem "2400"

Combo2.AddItem "4800"

Combo2.AddItem "9600"

Combo2.AddItem "19200"

Combo2.AddItem "38400"

Combo2.AddItem "43000"

Combo2.AddItem "115200"

'校验位

Combo3.AddItem "N"

Combo3.AddItem "E"

Combo3.AddItem "O"

'数据位

Combo4.AddItem "8"

Combo4.AddItem "7"

Combo4.AddItem "6"

'停止位

Combo5.AddItem "1"

Combo5.AddItem "2"

Call new_folder

End Sub

'自动发送

Private Sub Check1_Click()

If Check1.Value Then

If Text2.Text "" Then

Timer1.Interval = Text3.Text

Timer1.Enabled = True

End If

End If

End Sub

'手动发送

Private Sub Command1_Click()

MSComm1.Output = Text2.Text

tx_count = tx_count + Len(Text2.Text)

End Sub

'打开\关闭串口

Private Sub Command2_Click()

If Command2.Caption = "打开串口" Then

Command2.Caption = "关闭串口"

MSComm1.PortOpen = True

Shape1.FillColor = QBColor(12) '红色

Else

Command2.Caption = "打开串口"

MSComm1.PortOpen = False

Shape1.FillColor = QBColor(8) '黑色

End If

End Sub

'清空接收区

Private Sub Command3_Click()

Text1.Text = ""

End Sub

'停止显示

Private Sub Command4_Click()

If flag_dis = False Then

flag_dis = True

Command4.Caption = "继续显示"

Else

flag_dis = False

Command4.Caption = "停止显示"

End If

End Sub

'串口响应事件

Private Sub mscomm1_oncomm()

Select Case MSComm1.CommEvent

Case comEvReceive

inputsignal = MSComm1.Input

rx_count = Len(Trim(inputsignal)) + rx_count

If flag_dis = True Then

text_temp = Text1.Text '将接收区的文本信息锁存

Text1.Text = text_temp

Else

Text1.Text = (Text1.Text) (inputsignal)

End If

Case Else

End Select

End Sub

Private Sub Timer1_Timer()

If MSComm1.PortOpen = True Then '如果串口处于打开的状态

If Check1.Value Then

If Text2.Text "" Then

Timer1.Interval = Text3.Text

Timer1.Enabled = True

MSComm1.Output = Text2.Text

End If

End If

End If

End Sub

Private Sub Timer2_Timer()

Label14.Caption = rx_count

Label15.Caption = tx_count

End Sub

'创建一个文件

Public Sub new_folder()

Dim fol, fso, fil, fils, s, f, fldr

Dim aa As String

Set fso = CreateObject("Scripting.FileSystemObject")

On Error Resume Next

aa$ = "C:\COMDATA"

If fso.folderexists(aa$) = False Then

fol = fso.CreateFolder(aa$)

'MkDir aa

End If

aa$ = "C:\COMDATA\test"

If fso.folderexists(aa$) = False Then

fol = fso.CreateFolder(aa$)

'MkDir aa

End If

End Sub

用到的知识点:

1、通过单击按钮打开网页链接。

由于要调用api,故在程序开头声明如下:

Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, _

ByVal lpoperation As String, ByVal lpfile As String, ByVal lpparameters As String, _

ByVal lpdirectory As String, ByVal nshowcmd As Long) As Long

然后可以通过单击“帮助”按钮打开网页链接,click 事件代码如下:

Private Sub Command7_Click()

ShellExecute Me.hwnd, "open", "", "", "", 5

End Sub

2、如何初始化combobox 的下拉列表。

'串口选择

Combo1.AddItem "COM1"

Combo1.AddItem "COM2"

Combo1.AddItem "COM3"

Combo1.AddItem "COM4"

3、串口的相关初始化操作。

MSComm1.Settings = "9600,n,8,1" '串口的相关参数设置

MSComm1.CommPort = 1 '串口1

MSComm1.InputLen = 0 '表示一次读取所有数据

MSComm1.InBufferSize = 5120

MSComm1.InBufferCount = 0

MSComm1.OutBufferSize = 5120

MSComm1.OutBufferCount = 0

MSComm1.RThreshold = 1 '每接收一个字符触发一次oncomm 事件

MSComm1.SThreshold = 1

MSComm1.PortOpen = True '打开串口

4、如何创建多级文件夹。

Public Sub new_folder()

Dim fol, fso, fil, fils, s, f, fldr

Dim aa As String

Set fso = CreateObject("Scripting.FileSystemObject")

On Error Resume Next

aa$ = "C:\COMDATA"

If fso.folderexists(aa$) = False Then

fol = fso.CreateFolder(aa$)

'MkDir aa

End If

aa$ = "C:\COMDATA\test"

If fso.folderexists(aa$) = False Then

fol = fso.CreateFolder(aa$)

'MkDir aa

End If

End Sub

可以看出来,是先建立文件夹COMDATA 后才建立他的子文件夹,不能一次性创建多级文件夹。

5、怎样在指定目录创建文件夹和文件,并写入数据。以及时间的格式化操作。

Private Sub Command8_Click()

Open Label16.Caption "\com_data.txt" For Append As #1

Write #1, " 保存时间:", Format(Now, "yyyy 年m 月dd 日 hh:mm")

Write #1, Text1.Text

Close #1 '关闭文件

End Sub

6、用shape 控件画圆并将其用特定颜色填充满。

Shape1.Shape = 2 '圆

Shape1.Visible = True '可见

Shape1.FillStyle = 0 '全部填充

Shape1.FillColor = QBColor(12) '红色

另外,QBColor(8)是黑色,QBColor(12)是红色。

最新源码:

Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal

lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String,

ByVal nShowCmd As Long) As Long

Option Explicit

Dim inputsignal

Dim text_temp As String

Dim flag_dis As Boolean '是否停止显示标志量

Dim rx_count As Single '接收到的字符数

Dim tx_count As Single '发送除去的字符数

'***********************************

Dim x1 As String, x2 As String, x3 As String, x4 As String, x5 As String

Dim comset_temp As String

Private Sub Combo1_click()

Combo1.ForeColor = RGB(255, 0, 0)

Combo1.BackColor = RGB(12, 0, 0)

Call comm_set

End Sub

Private Sub Combo2_click()

Combo2.ForeColor = RGB(255, 0, 0)

Combo2.BackColor = RGB(12, 0, 0)

Call comm_set

End Sub

Private Sub Combo3_click()

Combo3.ForeColor = RGB(255, 0, 0)

Combo3.BackColor = RGB(12, 0, 0)

Call comm_set

End Sub

Private Sub Combo4_click()

Combo4.ForeColor = RGB(255, 0, 0)

Combo4.BackColor = RGB(12, 0, 0)

Call comm_set

End Sub

Private Sub Combo5_click()

Combo5.ForeColor = RGB(255, 0, 0)

Combo5.BackColor = RGB(12, 0, 0)

Call comm_set

End Sub

'计数清零

Private Sub Command5_Click()

rx_count = 0

tx_count = 0

End Sub

'关闭程序

Private Sub Command6_Click()

MSComm1.PortOpen = False '关闭串口

Unload Me '关闭程序

End Sub

'单击“帮助”按钮打开网页链接

Private Sub Command7_Click()

ShellExecute Me.hwnd, "open", "", "", "", 5

End Sub

Private Sub Command8_Click()

Call new_folder

Open Label16.Caption "\com_data.txt" For Append As #1

Write #1, " 保存时间:", Format(Now, "yyyy 年m 月dd 日 hh:mm")

Write #1, Text1.Text

Close #1 '关闭文件

End Sub

''''''''初始化

Private Sub form_load()

MSComm1.Settings = "9600,n,8,1" '串口的相关参数设置

MSComm1.CommPort = 1 '串口1

MSComm1.InputLen = 0 '表示一次读取所有数据

MSComm1.InBufferSize = 5120

MSComm1.InBufferCount = 0

MSComm1.OutBufferSize = 5120

MSComm1.OutBufferCount = 0

MSComm1.RThreshold = 1 '每接收一个字符触发一次oncomm 事件

MSComm1.SThreshold = 1

MSComm1.PortOpen = True '打开串口

Shape1.Shape = 2

Shape1.Visible = True

Shape1.FillStyle = 0 '全部填充

Shape1.FillColor = QBColor(12) '红色

flag_dis = False

Timer2.Enabled = True

Timer2.Interval = 250

rx_count = 0

tx_count = 0

Label14.Caption = rx_count '接收到的字符数

Label15.Caption = tx_count '发送出去的字符数

'串口选择

Combo1.AddItem "COM1"

Combo1.AddItem "COM2"

Combo1.AddItem "COM3"

Combo1.AddItem "COM4"

'波特率

Combo2.AddItem "300"

Combo2.AddItem "600"

Combo2.AddItem "1200"

Combo2.AddItem "2400"

Combo2.AddItem "4800"

Combo2.AddItem "9600"

Combo2.AddItem "19200"

Combo2.AddItem "38400"

Combo2.AddItem "43000"

Combo2.AddItem "115200"

'校验位

Combo3.AddItem "N"

Combo3.AddItem "E"

Combo3.AddItem "O"

'数据位

Combo4.AddItem "8"

Combo4.AddItem "7"

Combo4.AddItem "6"

'停止位

Combo5.AddItem "1"

Combo5.AddItem "2"

'设置combobox.text 初始值

Combo1.Text = "COM1"

Combo2.Text = "9600"

Combo3.Text = "N"

Combo4.Text = "8"

Combo5.Text = "1"

Call new_folder

Call comm_set

End Sub

'自动发送

Private Sub Check1_Click()

If Check1.Value Then

If Text2.Text "" Then

Timer1.Interval = Text3.Text

Timer1.Enabled = True

End If

End If

End Sub

'手动发送

Private Sub Command1_Click()

MSComm1.Output = Text2.Text

tx_count = tx_count + Len(Text2.Text)

End Sub

'打开\关闭串口

Private Sub Command2_Click()

If Command2.Caption = "打开串口" Then

Command2.Caption = "关闭串口"

MSComm1.PortOpen = True

Shape1.FillColor = QBColor(12) '红色

Else

Command2.Caption = "打开串口"

MSComm1.PortOpen = False

Shape1.FillColor = QBColor(8) '黑色

End If

End Sub

'清空接收区

Private Sub Command3_Click()

Text1.Text = ""

End Sub

'停止显示

Private Sub Command4_Click()

If flag_dis = False Then

flag_dis = True

Command4.Caption = "继续显示"

Else

flag_dis = False

Command4.Caption = "停止显示"

End If

End Sub

'串口响应事件

Private Sub mscomm1_oncomm()

Select Case MSComm1.CommEvent

Case comEvReceive

inputsignal = MSComm1.Input

rx_count = Len(Trim(inputsignal)) + rx_count

If flag_dis = True Then

text_temp = Text1.Text '将接收区的文本信息锁存

Text1.Text = text_temp

Else

Text1.Text = (Text1.Text) (inputsignal)

End If

Case Else

End Select

End Sub

'定时器1 用于定时发送

Private Sub Timer1_Timer()

If MSComm1.PortOpen = True Then '如果串口处于打开的状态

If Check1.Value Then

If Text2.Text "" Then

Timer1.Interval = Text3.Text

Timer1.Enabled = True

MSComm1.Output = Text2.Text

End If

End If

End If

End Sub

'定时器2 用于接收发送量显示

Private Sub Timer2_Timer()

Label14.Caption = rx_count

Label15.Caption = tx_count

End Sub

'创建一个文件

Public Sub new_folder()

Dim fol, fso, fil, fils, s, f, fldr

Dim aa As String

Set fso = CreateObject("Scripting.FileSystemObject")

On Error Resume Next

aa$ = "C:\COMDATA"

If fso.folderexists(aa$) = False Then

fol = fso.CreateFolder(aa$)

'MkDir aa

End If

aa$ = "C:\COMDATA\test"

If fso.folderexists(aa$) = False Then

fol = fso.CreateFolder(aa$)

'MkDir aa

End If

End Sub

'***************************

Public Sub comm_set()

If MSComm1.PortOpen False Then

MSComm1.PortOpen = False

End If

x1 = Combo1.Text

x2 = Combo2.Text

x3 = Combo3.Text

x4 = Combo4.Text

x5 = Combo5.Text

MSComm1.InputLen = 0 '表示一次读取所有数据

MSComm1.InBufferSize = 512

MSComm1.InBufferCount = 0

MSComm1.OutBufferSize = 512

MSComm1.OutBufferCount = 0

MSComm1.RThreshold = 1 '每接收一个字符触发一次oncomm 事件

MSComm1.SThreshold = 1

MSComm1.CommPort = Val(Right(x1, 1))

comset_temp = x2 "," x3 "," x4 "," x5

MSComm1.Settings = (comset_temp)

Command2.Caption = "打开串口"

Shape1.FillColor = QBColor(8) '黑色

End Sub

效果图:

最新工程文件:

文件: 串口调试助手.rar

大小: 18KB

下载: 下载

急!龚建伟关于串口通信的程序有问题的,期望高手解决!

粗略的看了一下,你的代码没有问题,我怀疑是其他的地方出现了问题。

给你一个我以前写的,模仿串口调试助手用串口控件的方法写的程序,你参考一下吧。

代码已发到你的邮箱。

补充:

接收就是在OnComm() 函数里啊,你的这段代码没有什么问题。

有没有做串口控件的事件映射啊:

BEGIN_EVENTSINK_MAP(CCuteComDlg, CDialog)

ON_EVENT(CCuteComDlg, IDC_MSCOMM1, 1 /* OnComm */, OnComm, VTS_NONE)

END_EVENTSINK_MAP()

如果有的话,那接收应该没有问题的。况且即使只有发没有收,那也不会点发送就会出错的。

我发给你的代码你看到了吗,那是标准串口控件的用法,里面收发演示都有的,你详细看一下吧,应该是对你有所帮助的。

有人说是因为龚建伟的串口初始化部分代码有问题,才导致了后面的安全数组出现错误。

我一直是使用如下代码进行串口控件的初始化的,已经应用到过很多程序中没有出现过问题,你可以试试:

if(m_ctrlComm.get_PortOpen())

m_ctrlComm.put_PortOpen(FALSE);

m_ctrlComm.put_CommPort(1); //选择com1

//输出方式为二进制方式

m_ctrlComm.put_InputMode(1);//text,binary

//m_ctrlComm.put_InBufferSize(64);

//m_ctrlComm.put_OutBufferSize(512);

m_ctrlComm.put_Settings("9600,n,8,1"); //波特率9600,无校验ndo,8个数据位,1个停止位

if( !m_ctrlComm.get_PortOpen())

m_ctrlComm.put_PortOpen(TRUE);//打开串口

m_ctrlComm.put_RThreshold(1);

//参数1表示每当串口接收缓冲区中有多于或等于1个字符时将引发一个接收数据的OnComm事件

m_ctrlComm.put_InputLen(0); //设置当前接收区数据长度为0

//0---读接收缓冲区的所有内容

//n---读接收缓冲区的 n 个字符(或二进制码)

m_ctrlComm.get_Input();//先预读缓冲区以清除残留数据

这是VS2008中的代码,在VC6.0中请把函数前缀get_替换为Get、put_替换为Set

求c++串口通信实例源代码

我这里倒是有一个现成的C++串口通信的程序,多线程的,可以直接运行,而且是异步触发机制,仅凭你一声感谢恐怕让我有些为难,因为我也花费了大量的时间和精力去研究和编写并应用。

串口助手源代码的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于串口助手源代码 vc api、串口助手源代码的信息别忘了在本站进行查找喔。

版权说明:如非注明,本站文章均为 AH站长 原创,转载请注明出处和附带本文链接;

本文地址:http://ahzz.com.cn/post/11955.html


取消回复欢迎 发表评论:

分享到

温馨提示

下载成功了么?或者链接失效了?

联系我们反馈

立即下载