串口助手源代码(串口助手源代码 vc api)
admin 发布:2022-12-19 16:06 147
本篇文章给大家谈谈串口助手源代码,以及串口助手源代码 vc api对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:
- 1、用串口调试助手给单片机发送一串字符串,单片机接受完之后向串口助手回显,出现了个神奇的问题,求助
- 2、版的串口调试助手源代码.怎么实现串口发送文件的
- 3、串口调试助手
- 4、急!龚建伟关于串口通信的程序有问题的,期望高手解决!
- 5、求c++串口通信实例源代码
用串口调试助手给单片机发送一串字符串,单片机接受完之后向串口助手回显,出现了个神奇的问题,求助
发送函数中,这样写,防止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站长 原创,转载请注明出处和附带本文链接;
相关推荐
- 05-16百度手机助手官网下载,百度手机助手官网免费下载
- 05-15百度收录量查询,百度收录查询api
- 05-07pb超级报表源代码(pb报表工具)[20240507更新]
- 05-07简历源代码可以上传照片的简单介绍[20240507更新]
- 05-07广告切换源代码免费下载(广告切换源代码免费下载安装)[20240507更新]
- 05-06阁楼网源代码(阁楼是什么网站)[20240506更新]
- 05-06源代码管理资源管理器(资源管理器运行代码)[20240506更新]
- 05-06人脸识别源代码pdf的简单介绍[20240506更新]
- 05-06包含超市管理系统java源代码的词条[20240506更新]
- 05-06商城app源代码免费(商城App源码)[20240506更新]
取消回复欢迎 你 发表评论:
- 标签列表
- 最近发表
- 友情链接