串口调试助手源程序编程详细过程

合集下载

经典的串口调试工具源代码(一)

经典的串口调试工具源代码(一)

经典的串口调试助手源代码(一)Dim OutputAscii As BooleanDim InputString As StringDim OutputString As String'=====================================================================================' 变量定义'=====================================================================================Option Explicit ' 强制显式声明Dim ComSwitch As Boolean ' 串口开关状态判断Dim FileData As String ' 要发送的文件暂存Dim SendCount As Long ' 发送数据字节计数器Dim ReceiveCount As Long ' 接收数据字节计数器Dim InputSignal As String ' 接收缓冲暂存Dim OutputSignal As String ' 发送数据暂存Dim DisplaySwitch As Boolean ' 显示开关Dim ModeSend As Boolean ' 发送方式判断Dim Savetime As Single ' 时间数据暂存延时用Dim SaveTextPath As String ' 保存文本路径' 网页超链接申明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 AsString, ByVal nShowCmd As Long) As LongPrivate Sub CloseCom() '关闭串口On Error GoTo ErrIf MSComm.PortOpen = True Then MSComm.PortOpen = False ' 先判断串口是否打开,如果打开则先关闭txtstatus.Text = "STATUS:COM Port Cloced" ' 串口状态显示mnuconnect.Caption = "断开串口"cmdswitch.Caption = "打开串口"'ImgSwitch.Picture = LoadPicture("f:\我的VB\串口调试软件\图片\guan.jpg") ' 显示串口已经关闭的图标ImgSwitchoff.Visible = TrueImgSwitchon.Visible = FalseErr:End SubPrivate Sub UpdateStatus()If MSComm.PortOpen ThenStatusBar1.Panels(1).Text = "Connected"mnuautosend.Caption = "自动发送"mnuconnect.Caption = "断开串口"ElseStatusBar1.Panels(1).Text = "断开串口"mnuautosend.Caption = "disautosend"mnuconnect.Caption = "打开串口"End IfStatusBar1.Panels(2).Text = "COM" & mPortStatusBar1.Panels(3).Text = MSComm.SettingsIf (OutputAscii) ThenStatusBar1.Panels(4) = "ASCII"ElseStatusBar1.Panels(4) = "HEX"End If'On Error GoTo ErrIf ChkAutoSend.Value = 1 Then ' 如果有效则,自动发送If MSComm.PortOpen = True Then ' 串口状态判断mnuautosend.Caption = "Dis&autosend"TmrAutoSend.Interval = Val(TxtAutoSendTime) ' 设置自动发送时间TmrAutoSend.Enabled = True ' 打开自动发送定时器Elsemnuautosend.Caption = "autosend"ChkAutoSend.Value = 0 ' 串口没有打开去掉自动发送MsgBox "串口没有打开,请打开串口", 48, "串口调试助手" ' 如果串口没有被打开,提示打开串口End IfElseIf ChkAutoSend.Value = 0 Then ' 如果无效,不发送mnuautosend.Caption = "autosend"TmrAutoSend.Enabled = False ' 关闭自动发送定时器End IfErr:End SubPrivate Sub CmdSendFile_Click() '发送文件On Error GoTo ErrIf MSComm.PortOpen = True Then ' 如果串口打开了,则可以发送数据If FileData = "" Then ' 判断发送数据是否为空MsgBox "发送的文件为空", 16, "串口调试助手" ' 发送数据为空则提示ElseIf ChkHexReceive.Value = 1 Then ' 如果按十六进制接收时,按二进制发送,否则按文本发送MSComm.InputMode = comInputModeBinary ' 二进制发送ElseMSComm.InputMode = comInputModeText ' 文本发送End IfMSComm.Output = Trim(FileData) ' 发送数据ModeSend = True ' 设置文本发送方式End IfElseMsgBox "串口没有打开,请打开串口", 48, "串口调试助手" ' 如果串口没有被打开,提示打开串口End IfErr:End SubPrivate Sub Comm_initial(Port As Byte, BaudRate As String, ParityBit As String, DataBit As Integer,StopBit As Integer)On Error GoTo ErrorTrap ' 错误则跳往错误处理If MSComm.PortOpen = True Then MSComm.PortOpen = False ' 先判断串口是否打开,如果打开则先关闭mPort = Port ' 设定端口MSComm.Settings = BaudRate & "," & ParityBit & "," & DataBit & "," & StopBit ' 设置波特率,无校验,8位数据位,1位停止位MSComm.InBufferSize = 1024 ' 设置接收缓冲区为1024字节MSComm.OutBufferSize = 4096 ' 设置发送缓冲区为4096字节MSComm.InBufferCount = 0 ' 清空输入缓冲区MSComm.OutBufferCount = 0 ' 清空输出缓冲区MSComm.SThreshold = 1 ' 发送缓冲区空触发发送事件MSComm.RThreshold = 1 ' 每X个字符到接收缓冲区引起触发接收事件MSComm.OutBufferCount = 0 ' 清空发送缓冲区MSComm.InBufferCount = 0 ' 滑空接收缓冲MSComm.PortOpen = True ' 打开串口If MSComm.PortOpen = True Thentxtstatus.Text = "STATUS:" & cbocom.Text & " OPEND," & cbobaudrate.Text & "," & Left(cboparitybit.Text, 1) & "," & cbodatabit.Text & "," & cbostopbit.TextElsetxtstatus.Text = "STATUS:COM Port Cloced" ' 串口没打开时,提示串口关闭状态End IfExit SubErrorTrap: ' 错误处理Select Case Err.NumberCase comPortAlreadyOpen ' 如果串口已经打开,则提示MsgBox "没有发现此串口或被占用", 49, "串口调试助手"CloseComCase ElseMsgBox "没有发现此串口或被占用", 49, "串口调试助手"CloseComEnd SelectErr.ClearEnd SubPrivate Sub Comm_reSet(Port As Byte, BaudRate As String, ParityBit As String, DataBit As Integer,StopBit As Integer)On Error GoTo ErrorHint ' 错误则跳往错误处理If MSComm.PortOpen = True Then MSComm.PortOpen = False ' 先判断串口是否打开,如果打开则先关闭mPort = Port ' 设定端口MSComm.Settings = BaudRate & "," & ParityBit & "," & DataBit & "," & StopBit ' 设置波特率,无校验,8位数据位,1位停止位MSComm.PortOpen = True ' 打开串口If MSComm.PortOpen = True Thencmdswitch.Caption = "关闭串口"'ImgSwitch.Picture = LoadPicture("f:\我的VB\串口调试软件\图片\kai.jpg") ' 显示串口已经打开的图标ImgSwitchoff.Visible = Falsemnuconnect.Caption = "disconnect"ImgSwitchon.Visible = Truetxtstatus.Text = "STATUS:" & cbocom.Text & " OPEND," & cbobaudrate.Text & "," & Left(cboparitybit.Text, 1) & "," & cbodatabit.Text & "," & cbostopbit.TextElsecmdswitch.Caption = "打开串口"'ImgSwitch.Picture = LoadPicture("f:\我的VB\串口调试软件\图片\guan.jpg") ' 显示串口已经关闭的图标ImgSwitchon.Visible = FalseImgSwitchoff.Visible = Truetxtstatus.Text = "STATUS:COM Port Cloced"End IfExit SubErrorHint: ' 错误处理Select Case Err.NumberCase comPortAlreadyOpen ' 如果串口已经打开,则提示MsgBox "没有成功,请重试", vbExclamation, "串口调试助手"CloseCom ' 调用关闭串口函数Case ElseMsgBox "没有成功,请重试", vbExclamation, "串口调试助手"CloseCom ' 调用关闭串口函数End SelectErr.Clear ' 清除Err 对象的属性End SubPrivate Sub Command1_Click()End SubPrivate Sub cbobaudrate_Change()Call Comm_reSet(Val(Mid(cbocom.Text, 4, 2)), cbobaudrate.Text, Left(cboparitybit.Text, 1),cbodatabit.Text, cbostopbit.Text) '串口设置End SubPrivate Sub cbocom_Change()Call Comm_reSet(Val(Mid(cbocom.Text, 4, 2)), cbobaudrate.Text, Left(cboparitybit.Text, 1), cbodatabit.Text, cbostopbit.Text) '串口设置End SubPrivate Sub cbodatabit_Change()Call Comm_reSet(Val(Mid(cbocom.Text, 4, 2)), cbobaudrate.Text, Left(cboparitybit.Text, 1), cbodatabit.Text, cbostopbit.Text) '串口设置End SubPrivate Sub cboparitybit_Change()Call Comm_reSet(Val(Mid(cbocom.Text, 4, 2)), cbobaudrate.Text, Left(cboparitybit.Text, 1), cbodatabit.Text, cbostopbit.Text) '串口设置End SubPrivate Sub cbostopbit_Change()Call Comm_reSet(Val(Mid(cbocom.Text, 4, 2)), cbobaudrate.Text, Left(cboparitybit.Text, 1), cbodatabit.Text, cbostopbit.Text) '串口设置End SubPrivate Sub chkautosend_Click()On Error GoTo ErrIf ChkAutoSend.Value = 1 Then ' 如果有效则,自动发送If MSComm.PortOpen = True Then ' 串口状态判断mnuautosend.Caption = "取消自动发送"TmrAutoSend.Interval = Val(TxtAutoSendTime) ' 设置自动发送时间TmrAutoSend.Enabled = True ' 打开自动发送定时器ElseChkAutoSend.Value = 0 ' 串口没有打开去掉自动发送MsgBox "串口没有打开,请打开串口", 48, "串口调试助手" ' 如果串口没有被打开,提示打开串口End IfElseIf ChkAutoSend.Value = 0 Then ' 如果无效,不发送mnuautosend.Caption = "自动发送数据"TmrAutoSend.Enabled = False ' 关闭自动发送定时器End IfErr:End SubPrivate Sub cmdamend_Click()Dim spShell As Object ' 定义存放引用对象的变量Dim spFolder As Object ' 定义存放引用对象的变量Dim spFolderItem As Object ' 定义存放引用对象的变量Dim spPath As String ' 定义存放的变量On Error GoTo Err ' 错误处理,防止取消打开文件夹时报错Const WINDOW_HANDLE = 0Const NO_OPTIONS = 0Set spShell = CreateObject("Shell.Application")Set spFolder = spShell.BrowseForFolder(WINDOW_HANDLE, "选择目录:", NO_OPTIONS,"C:\Scripts")Set spFolderItem = spFolder.SelfspPath = spFolderItem.PathspPath = Replace(spPath, "\", "\") ' Replace函数的返回值是一个字符串txtsavepath.Text = spPath ' 把文件夹路径显示在标签上SaveTextPath = txtsavepath.Text ' 路径暂存Err:End SubPrivate Sub CmdClearCounter_Click()On Error GoTo ErrSendCount = 0 ' 发送计数器清零ReceiveCount = 0 ' 接收计数器清零txtRXcount.Text = "RX:" & 0 ' 接收计数txtTXcount.Text = "TX:" & 0 ' 发送计数Err:End SubPrivate Sub cmdclearrecieve_Click()TxtReceive.Text = ""End SubPrivate Sub cmdclearsend_Click()txtsend.Text = ""End SubPrivate Sub CmdHelp_Click()FrmHelp.ShowEnd SubPrivate Sub CmdQuit_Click()If MSComm.PortOpen = True Then MSComm.PortOpen = False ' 先判断串口是否打开,如果打开则先关闭Unload Me ' 卸载窗体,并退出程序EndEnd SubPrivate Sub cmdsavedisp_Click()On Error GoTo Err ' 错误处理SaveTextPath = txtsavepath ' 路径暂存Open txtsavepath & "\1.txt" For Output As #1 ' 打开文件' 不存在的话会创建文件,如已存在会覆盖' output 改为append 为追加' 改为input 则只读Print #1, Year(Date) & "年" & Month(Date) & "月" & Day(Date) & _"日" & Hour(Time) & "时" & Minute(Time) & "分" & Second(Time) & _"秒" & vbCrLf & TxtReceive.Text + vbCrLf ' 把接收区的文本保存文本前加上保存时间(0000年00月00日00时00分00秒)' vbcrlf 为回车换行Close #1 ' 关闭文件txtsavepath = "OK,1.txt Save" ' 提示保存成功cmdsavedisp.Enabled = FalseSavetime = Timer ' 记下开始的时间While Timer < Savetime + 5 ' 循环等待5 - 要延时的时间DoEvents ' 转让控制权,以便让操作系统处理其它的事件。

经典串口调试助手源程序及串口通信设置

经典串口调试助手源程序及串口通信设置

经典串口调试助手源程序及串口通信设置标题:串口调试助手之经典源程序及通信设置导言:串口调试助手是一种用于串口通信的调试工具,广泛应用于工业控制、测试等领域。

本文将介绍一种基于Windows平台的经典串口调试助手源程序及相关的串口通信设置,旨在帮助读者更好地了解该工具的使用和配置方法。

一、经典串口调试助手源程序1.开发平台:本程序采用C++ Builder 6.0开发。

2.功能概述:(1)串口设置包括设置串口波特率、数据位、校验位、停止位、流控、超时等参数。

(2)发送数据支持以字符串或Hex方式发送数据。

(3)接收数据实时显示串口接收到的数据,并支持数据格式设置。

(4)自动发送数据支持单次或循环发送,可设置发送时间间隔和发送次数。

(5)保存数据支持将接收到的数据保存为文本或二进制文件。

3.源程序结构本程序主要由以下几个模块组成:(1)Main Form:主窗体,包含图形界面显示和基本操作控件。

(2)Serial:串口类,负责串口相关操作,例如打开、关闭、设置参数、发送、接收等。

(3)SaveToFile:文件保存类,负责数据保存到文件中。

(4)Config:配置类,负责程序设置和读取。

(5)Hex:十六进制转换类,用于将字符串转换为Hex格式。

二、串口通信设置1.串口连接串口连接有两种方式:一种是通过RS232串口连接,需要将串口线插入串口,然后将串口线连接到目标设备;另一种是通过USB转串口连接,需要将USB转串口转接器插入计算机USB接口,然后将串口线连接到USB转串口转接器。

2.串口参数设置在使用串口调试助手前,必须先设置串口参数。

打开主窗体后,点击“串口设置”按钮,在弹出的窗口中设置串口的参数,包括波特率、数据位、校验位、停止位、流控和超时等参数。

其中,波特率是指通信时的数据传输速率,常用的有9600、19200、38400、57600、115200等。

数据位是指每次传输的数据位数,常用的有8位、7位、6位等。

MSP430串口调试全记录

MSP430串口调试全记录
先交代一下相关背景:
Mcu型号:MS9430F149;
实验板:自制(有些毛病,稍后坦白:)
开发环境:IAR Embedded Workbench V2.10A+串口调试助手;
试验仪器:泰克数字示波器,万用表等;
笔者的底细:马上步入而立之年,学习点新东西,已感到有些力不从心了:)以前有些51基础,430是第一次搞!当然这些都是业余爱好,以乐以闹为主:)
UTCTL1|=SSEL0; //ACLK
UBR01=0x03; //bode rate 9600.
UBR11=0x00;
UMCTL1=0x4a;
UCTL1=CHAR; //8 bits data format. enable UART
IFG2&=~UTXIFG1;
IE2|=URXIE1; //enable receive interrupt.
没问题啊,我测到的波形在±6V左右啊,正在一筹莫展之际,想到了波特率是否一致的问题,从示波器观察PC发给430的1Bit数据的宽度约100us,频率f=10k和设定的9600非常接近,没问题;在测430发给PC的1Bit数据宽度为6.4us,频率f=156250,于是发现问题所在,重新检查源程序时钟源选择,发现程序(▲2)的疏忽,更改后,一切ok,再看<串口调试助手接收区>正反复的显示“MSP430 MSP430 MSP430 MSP430…”
以为是MAX3232的硬件(包括4个电容,典型值是0.1uF,当时没找到0.1的就用4.7uF的代替了)出问题了,或者是RS232判决电平的毛病,这时在网上搜到了如下资料:
MAX232/MAX202接口输出的电平为何比计算机输出的RS-232电平低?

串口调试助手通信调试原理图PCB及使用手册

串口调试助手通信调试原理图PCB及使用手册

串口调试助手通信调试原理图PCB及使用手册【简要说明】一、尺寸:长170mmX宽72mmX高18mm二、主要芯片:单片机,MAX485,MAX232三、工作电压:6V至40V,功耗小于1W四、特点:1、具有稳压电路,输入电压广,具有电源指示灯。

2、具有485通信和232通信及TTL通信。

3、具有数码管数据显示,蜂鸣器提示音4、波特率可调分别是 2400 4800 9600 192005、采用大按键,机械寿命长。

6、单片机编程,提供源代码7、可发送20组数据8、具有系统复位按键9、端子采用螺旋压接端子10、工作温度-40度至 +70度11、工作湿度 40% ~ 80%RH12、板子静态功耗小于1W13、具有续流保护14、具有电磁抗干扰能力15、板子稳定工作可靠16、板子可安装在DIN导轨上面使用说明:【标注说明】【功能描述】【原理图】【PCB图】【元件清单】【应用举例】【应用举例2】例如:将下面一组数据通过串口发送给电脑。

波特率是9600,电脑用串口助手显示出来。

数据是:A0 B2 CC FF EF D8 90 88第一步:板子供电,串口连接电脑,查看串口号。

如下图:我的电脑--属性--硬件---设备管理器---端口设备。

下图:第三步:从发送板,按下下面一组数据,数据是:A0 B2 CC FF EF D8 90 88数据按完之后,按发送键“S2”,如果数据输入错误,可以按”S1”按键清零,重新输入。

如果要发送多遍,重复按“S2”按键。

单遍发送如下图。

【源代码程序】/*一次最多发送20组数据,大于这个数据就不再发送*/#include <STC12C5A60S2.H>#define uchar unsigned char#define uint unsigned int/**************************************************************/unsigned char T0RH = 0; //T0重载值的高字节unsigned char T0RL = 0; //T0重载值的低字节extern void UartDriver(); //串口驱动函数,监测数据帧的接收,调度功能函数,需在主循环中调用extern void ConfigUART(unsigned int baud); //串口配置函数,baud-通信波特率extern void ConfigUART1(unsigned int baud1); //串口配置函数,baud-通信波特率extern void UartRxMonitor(unsigned char ms); //串口接收监控,由空闲时间判定帧结束,需在定时中断中调用,ms-定时间隔extern void SendString(char *s) ;extern void UartWrite(unsigned char *buf, unsigned char len); //串口数据写入,即串口发送函数,buf-待发送数据的指针,len-指定的发送长度extern void fengming();uchar zh[] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};uchar jieshou[] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}; uchar jj = 0;/*****************************************************************/sbit out0 = P2^0;sbit out1 = P2^1;sbit out2 = P2^2;sbit out3 = P2^3;sbit in0 = P2^4;sbit in1 = P2^5;sbit in2 = P2^6;sbit in3 = P2^7;sbit smgk = P3^6;sbit boma1 = P1^1;sbit boma2 = P1^0;bit d1 = 1;bit d2 = 1;sbit in4 = P1^6;sbit in5 = P1^5;uchar code xianshi [] ={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0xbf};uchar dangqianzhuangtai[4][4] = {{1,1,1,1},{1,1,1,1},{1,1,1,1},{1,1,1,1}};void t0 () interrupt 1{uchar i;static uchar lie = 0;static uchar sao[2] = {1,1};static uchar saomiaobaocun [4][4] = {{0xff,0xff,0xff,0xff},{0xff,0xff,0xff,0xff},{0xff,0xff,0xff,0xff},{0xff,0xff,0xff,0xff}};TH0 = 0xfc;TL0 = 0x67;UartRxMonitor(1); //串口接收监控sao[0] = (sao[0]<<1) |in4;sao[1] = (sao[1]<<1) |in5;saomiaobaocun [lie][0] = (saomiaobaocun [lie][0]<<1) | in0; saomiaobaocun [lie][1] = (saomiaobaocun [lie][1]<<1) | in1; saomiaobaocun [lie][2] = (saomiaobaocun [lie][2]<<1) | in2; saomiaobaocun [lie][3] = (saomiaobaocun [lie][3]<<1) | in3;if(sao[0] == 0x00){d1 = 0;}else if(sao[0] == 0xff){d1 = 1;}if(sao[1] == 0x00){d2 = 0;}else if(sao[1] == 0xff){d2 = 1;}for (i=0;i<4;i++){if ((saomiaobaocun [lie][i] & 0x0f) == 0x00){dangqianzhuangtai[lie][i] = 0;}else if ((saomiaobaocun [lie][i] & 0x0f) == 0x0f){dangqianzhuangtai[lie][i] = 1;}}lie++;lie = lie & 0x03;switch (lie){case 0 : out1 = 1; out2 = 1; out3 = 1; out0 = 0; break;case 1 : out0 = 1; out2 = 1; out3 = 1; out1 = 0; break;case 2 : out0 = 1; out1 = 1; out3 = 1; out2 = 0; break;case 3 : out0 = 1; out1 = 1; out2 = 1; out3 = 0; break;}}void main (){uchar i,j;bit q1 = 1;bit q2 = 1;uchar qianyicizhuangtai[4][4] = {{1,1,1,1},{1,1,1,1},{1,1,1,1},{1,1,1,1}};smgk = 0;TMOD = 0x01;TH0 = 0xfc;TL0 = 0x67;TR0 = 1;EA = 1;ET0 = 1;P0 = xianshi[16];// ConfigUART(9600); //配置波特率为9600while (1){UartDriver(); //调用串口驱动if((boma1 == 0)&&(boma2 != 0)){ConfigUART(2400); //配置波特率为1200}if((boma2 == 0)&&(boma1 != 0)){ConfigUART(4800); //配置波特率为4800}if((boma1 == 0)&&(boma2 == 0)){ConfigUART(9600); //配置波特率为9600}if((boma1 != 0)&&(boma2 != 0)){ConfigUART1(19200); //配置波特率为19200 }if(d1 != q1){q1 = d1;if(d1 == 0){if((jj != 0)&&(jj <= 2)){zh[0] = jieshou[0] | jieshou[1];UartWrite(zh, 1);fengming();}if((jj > 2)&&(jj <= 4)){zh[0] = jieshou[0] | jieshou[1];zh[1] = jieshou[2] | jieshou[3];UartWrite(zh, 2);fengming();}if((jj > 4)&&(jj <= 6)){zh[0] = jieshou[0] | jieshou[1];zh[1] = jieshou[2] | jieshou[3];zh[2] = jieshou[4] | jieshou[5];UartWrite(zh, 3);fengming();}if((jj > 6)&&(jj <= 8)){zh[0] = jieshou[0] | jieshou[1];zh[1] = jieshou[2] | jieshou[3];zh[2] = jieshou[4] | jieshou[5];zh[3] = jieshou[6] | jieshou[7];UartWrite(zh, 4);fengming();}if((jj > 8)&&(jj <= 10)){zh[0] = jieshou[0] | jieshou[1];zh[1] = jieshou[2] | jieshou[3];zh[2] = jieshou[4] | jieshou[5];zh[3] = jieshou[6] | jieshou[7];zh[4] = jieshou[8] | jieshou[9];UartWrite(zh, 5);fengming();}if((jj > 10)&&(jj <= 12)){zh[0] = jieshou[0] | jieshou[1];zh[1] = jieshou[2] | jieshou[3];zh[2] = jieshou[4] | jieshou[5];zh[3] = jieshou[6] | jieshou[7];zh[4] = jieshou[8] | jieshou[9];zh[5] = jieshou[10] | jieshou[11];UartWrite(zh, 6);fengming();}if((jj > 12)&&(jj <= 14)){zh[0] = jieshou[0] | jieshou[1];zh[1] = jieshou[2] | jieshou[3];zh[2] = jieshou[4] | jieshou[5];zh[3] = jieshou[6] | jieshou[7];zh[4] = jieshou[8] | jieshou[9];zh[5] = jieshou[10] | jieshou[11];zh[6] = jieshou[12] | jieshou[13];UartWrite(zh, 7);fengming();}if((jj > 14)&&(jj <= 16)){zh[0] = jieshou[0] | jieshou[1];zh[1] = jieshou[2] | jieshou[3];zh[2] = jieshou[4] | jieshou[5];zh[3] = jieshou[6] | jieshou[7];zh[4] = jieshou[8] | jieshou[9];zh[5] = jieshou[10] | jieshou[11];zh[6] = jieshou[12] | jieshou[13];zh[7] = jieshou[14] | jieshou[15];UartWrite(zh, 8);fengming();}if((jj > 16)&&(jj <= 18)){zh[0] = jieshou[0] | jieshou[1];zh[1] = jieshou[2] | jieshou[3];zh[2] = jieshou[4] | jieshou[5];zh[3] = jieshou[6] | jieshou[7];zh[4] = jieshou[8] | jieshou[9];zh[5] = jieshou[10] | jieshou[11];zh[6] = jieshou[12] | jieshou[13];zh[7] = jieshou[14] | jieshou[15];zh[8] = jieshou[16] | jieshou[17];UartWrite(zh, 9);fengming();}if((jj > 18)&&(jj <= 20)){zh[0] = jieshou[0] | jieshou[1];zh[1] = jieshou[2] | jieshou[3];zh[2] = jieshou[4] | jieshou[5];zh[3] = jieshou[6] | jieshou[7];zh[4] = jieshou[8] | jieshou[9];zh[5] = jieshou[10] | jieshou[11];zh[6] = jieshou[12] | jieshou[13];zh[7] = jieshou[14] | jieshou[15];zh[8] = jieshou[16] | jieshou[17];zh[9] = jieshou[18] | jieshou[19];UartWrite(zh, 10);fengming();}}}if(d2 != q2){q2 = d2;if(d2 == 0){jj = 0;jieshou[0] = 0x00;jieshou[1] = 0x00;jieshou[2] = 0x00;jieshou[3] = 0x00;jieshou[4] = 0x00;jieshou[5] = 0x00;jieshou[6] = 0x00;jieshou[7] = 0x00;jieshou[8] = 0x00;jieshou[9] = 0x00;P0 = xianshi[16];fengming();}}for (i=0;i<4;i++){for (j=0;j<4;j++){if(dangqianzhuangtai[i][j] != qianyicizhuangtai[i][j] ){qianyicizhuangtai[i][j] = dangqianzhuangtai[i][j];if(qianyicizhuangtai[i][j] != 0){jj++;if((i*4+j) < 9){P0 = xianshi[i*4+j+1];}if((i*4+j) == 9){P0 = xianshi[0];}if((i*4+j) > 9){P0 = xianshi[i*4+j];}fengming();/******************1组**************************/if(jj == 1){//jieshou[0] = i*4+j;//jieshou[0] = jieshou[0] << 4;if((i*4+j) < 9){jieshou[0] = i*4+j+1;if((i*4+j) == 9){jieshou[0] = 0;}if((i*4+j) > 9){jieshou[0] = i*4+j;}jieshou[0] = jieshou[0] << 4;}if(jj == 2){//jieshou[1] = i*4+j;if((i*4+j) < 9){jieshou[1] = i*4+j+1;}if((i*4+j) == 9){jieshou[1] = 0;}if((i*4+j) > 9){jieshou[1] = i*4+j;}}/******************2组**************************/ if(jj == 3){//jieshou[2] = i*4+j;if((i*4+j) < 9){jieshou[2] = i*4+j+1;}if((i*4+j) == 9){jieshou[2] = 0;}if((i*4+j) > 9){jieshou[2] = i*4+j;jieshou[2] = jieshou[2] << 4;}if(jj == 4){//jieshou[3] = i*4+j;if((i*4+j) < 9){jieshou[3] = i*4+j+1;}if((i*4+j) == 9){jieshou[3] = 0;}if((i*4+j) > 9){jieshou[3] = i*4+j;}}/******************3组**************************/ if(jj == 5){//jieshou[4] = i*4+j;if((i*4+j) < 9){jieshou[4] = i*4+j+1;}if((i*4+j) == 9){jieshou[4] = 0;}if((i*4+j) > 9){jieshou[4] = i*4+j;}jieshou[4] = jieshou[4] << 4;}if(jj == 6){//jieshou[5] = i*4+j;if((i*4+j) < 9){jieshou[5] = i*4+j+1;}if((i*4+j) == 9){jieshou[5] = 0;}if((i*4+j) > 9){jieshou[5] = i*4+j;}}/******************4组**************************/ if(jj == 7){//jieshou[6] = i*4+j;if((i*4+j) < 9){jieshou[6] = i*4+j+1;}if((i*4+j) == 9){jieshou[6] = 0;}if((i*4+j) > 9){jieshou[6] = i*4+j;}jieshou[6] = jieshou[6] << 4;}if(jj == 8){//jieshou[7] = i*4+j;if((i*4+j) < 9){jieshou[7] = i*4+j+1;}if((i*4+j) == 9){jieshou[7] = 0;}if((i*4+j) > 9){jieshou[7] = i*4+j;}}/******************5组**************************/{//jieshou[8] = i*4+j;if((i*4+j) < 9){jieshou[8] = i*4+j+1;}if((i*4+j) == 9){jieshou[8] = 0;}if((i*4+j) > 9){jieshou[8] = i*4+j;}jieshou[8] = jieshou[8] << 4;}if(jj == 10){//jieshou[9] = i*4+j;if((i*4+j) < 9){jieshou[9] = i*4+j+1;}if((i*4+j) == 9){jieshou[9] = 0;}if((i*4+j) > 9){jieshou[9] = i*4+j;}}/******************6组**************************/ if(jj == 11){//jieshou[10] = i*4+j;if((i*4+j) < 9){jieshou[10] = i*4+j+1;}if((i*4+j) == 9){jieshou[10] = 0;if((i*4+j) > 9){jieshou[10] = i*4+j;}jieshou[10] = jieshou[10] << 4;}if(jj == 12){//jieshou[11] = i*4+j;if((i*4+j) < 9){jieshou[11] = i*4+j+1;}if((i*4+j) == 9){jieshou[11] = 0;}if((i*4+j) > 9){jieshou[11] = i*4+j;}}/******************7组**************************/ if(jj == 13){//jieshou[12] = i*4+j;if((i*4+j) < 9){jieshou[12] = i*4+j+1;}if((i*4+j) == 9){jieshou[12] = 0;}if((i*4+j) > 9){jieshou[12] = i*4+j;}jieshou[12] = jieshou[12] << 4;}if(jj == 14){//jieshou[13] = i*4+j;if((i*4+j) < 9){jieshou[13] = i*4+j+1;}if((i*4+j) == 9){jieshou[13] = 0;}if((i*4+j) > 9){jieshou[13] = i*4+j;}}/******************8组**************************/ if(jj == 15){//jieshou[14] = i*4+j;if((i*4+j) < 9){jieshou[14] = i*4+j+1;}if((i*4+j) == 9){jieshou[14] = 0;}if((i*4+j) > 9){jieshou[14] = i*4+j;}jieshou[14] = jieshou[14] << 4;}if(jj == 16){//jieshou[15] = i*4+j;if((i*4+j) < 9){jieshou[15] = i*4+j+1;}if((i*4+j) == 9){jieshou[15] = 0;}if((i*4+j) > 9){jieshou[15] = i*4+j;}}/******************9组**************************/ if(jj == 17){//jieshou[16] = i*4+j;if((i*4+j) < 9){jieshou[16] = i*4+j+1;}if((i*4+j) == 9){jieshou[16] = 0;}if((i*4+j) > 9){jieshou[16] = i*4+j;}jieshou[16] = jieshou[16] << 4;}if(jj == 18){//jieshou[17] = i*4+j;if((i*4+j) < 9){jieshou[17] = i*4+j+1;}if((i*4+j) == 9){jieshou[17] = 0;}if((i*4+j) > 9){jieshou[17] = i*4+j;}}/******************10组**************************/ if(jj == 19){//jieshou[18] = i*4+j;if((i*4+j) < 9){jieshou[18] = i*4+j+1;}if((i*4+j) == 9){jieshou[18] = 0;}if((i*4+j) > 9){jieshou[18] = i*4+j;}jieshou[18] = jieshou[18] << 4;}if(jj == 20){//jieshou[19] = i*4+j;if((i*4+j) < 9){jieshou[19] = i*4+j+1;}if((i*4+j) == 9){jieshou[19] = 0;}if((i*4+j) > 9){jieshou[19] = i*4+j;}}}}}}}}void UartAction(unsigned char *buf, unsigned char len){//在接收到的数据帧后添加换车换行符后发回// buf[len++] = '\r';//buf[len++] = '\n';UartWrite(buf, (len-2));}【真值表】【图片展示】。

如何使用串口调试助手Keil软件仿真的串口调试技巧

如何使用串口调试助手Keil软件仿真的串口调试技巧

如何使用串口调试助手Keil软件仿真的串口调试技巧在嵌入式系统开发中,串口调试是一项非常重要的技术。

Keil软件是一个广泛应用于嵌入式系统开发的软件平台,通过其内置的串口调试助手,我们可以方便地进行仿真的串口调试。

本文将介绍如何使用串口调试助手Keil软件仿真的串口调试技巧。

1. 了解串口基础知识在开始使用串口调试助手之前,首先需要了解一些串口的基础知识。

串口通信是一种通过串行传输数据的通信方式,常用的串口通信标准有RS232、RS485等。

了解波特率、数据位、停止位、校验位等串口通信参数的含义和选择是必要的。

2. 配置串口参数打开Keil软件后,选择对应的工程文件,并进入工程配置页面。

在这里,我们可以找到串口调试助手的配置选项。

根据实际需求,设置串口通信的参数,如波特率、数据位、停止位、校验位等。

确保与目标设备的串口参数一致,才能正常进行串口通信。

3. 编写串口发送与接收代码在代码中,我们需要编写串口发送和接收的相关代码。

通过Keil软件提供的API函数,我们可以方便地实现数据的发送和接收。

在发送数据时,需要将数据写入到相应的寄存器,以便传输到串口。

而在接收数据时,需要从寄存器中读取数据。

通过合理设计代码,可以实现稳定可靠的串口通信。

4. 仿真运行程序完成代码编写后,我们可以进行仿真运行,以验证串口调试功能的正确性。

在Keil软件中,可以选择进行单步调试、断点调试或连续运行调试。

通过监视寄存器的值变化、观察串口发送与接收的数据情况,可以帮助我们进行串口调试。

5. 使用串口调试助手测试在完成仿真运行后,我们可以使用串口调试助手进行测试。

打开串口调试助手,并选择与目标设备串口参数一致的配置。

点击打开串口,即可开始接收串口发送的数据。

通过观察串口调试助手输出的数据,可以验证串口通信的正确性。

6. 调试技巧与注意事项在使用串口调试助手Keil软件进行串口调试时,还需要注意一些调试技巧与注意事项。

首先,确保串口连接正确可靠,避免松动或接触不良导致数据传输错误。

LABVIEW串口调试助手

LABVIEW串口调试助手
物理端口:引脚定义(看看是哪几根线) 连线
.
3
.
4.5ຫໍສະໝຸດ .6.7
.
8
程序框图可以分成部分: 1,串口打开,关闭及参数配置 2,数据写入 3,数据读取 4,十六进制数据设置 5,接收区和读取区清除
.
9
串口打开,关闭及参数配置
.
10
串口打开,关闭及参数配置
.
11
数据写入
.
12
数据写入
.
LABVIEW串口调试助手 小程序
.
1
串口通讯三步: • 打开(需要配置一下) • 读写 • 关闭 数据通信:协议:串口:
VISA配置串口 VISA写入 VISA读取 VISA关闭 VISA串口字节数
.
2
• LABVIEW基础知识: • 基本结构:循环结构,条件结构,事件结
构 • 数据类型:字符串,数值,局部变量 • 串口知识:
13
数据读取
.
14
两种实现方法
.
15
十六进制数据设置
属性节点可以用来通过编程设置或获取控件的属性 。
.
16
接收区和读取区清除
.
17
.
18
.
19
用事件结构编写程序
.
20
谢谢大家
.
21
此课件下载可自行编辑修改,此课件供参考! 部分内容来源于网络,如有侵权请与我联系删除!

串口调试助手VC源程序及详细编程过程

串口调试助手VC源程序及详细编程过程

据数留残除清以区冲缓读预先//;)(tupnIteG.mmoClrtc_m 0为度长据数区收接前当置设// ;)0(neLtupnIteS.mmoClrtc_m 件事mmoCnO的据数收接个一发引将时符字个1于等或于多有中区冲缓收接口串当每示表1数参// ; ) 1 ( d l o h s er h T R t e S . m m oCl r t c _ m ; ) 1 ( e d o M tu p n I t e S . m m oCl r t c _ m 据数取检式方制进二以 // 位止停个1�位据数个8�验校无�0069率特波// ;)"1,8,n,0069"(sgnitteSteS.mmoClrtc_m ; )" t r o p l a i r es n e p o t o nn a c " ( x o B e g ass e M x f A esle 口串开打//;)EURT(nepOtroPteS.mmoClrtc_m ) )( n e p O t r o P te G . m m o C l r t c_m ! ( f i 1moc择选// ;)1(troPmmoCteS.mmoClrtc_m ; )E S L A F ( n e p Ot r o P t e S . m m oCl r t c _ m ) ) ( n e p O t r oP t e G . m m o C l rtc _ m ( f i e r e h n o i t az i l a i t i n i a r t x e d d A :OD O T / / �码代下如入加�口串开打)(golaiDtinInO::glDtseTmmoCSC的框话对主在们我在现。口串开打中数函 理处的钮按该在�钮按始开个一做中序程在如例�口串开打候时的要需你在以可你 数 参 口 串 置 设 和 口 串 开 打 . 6

VC编写串口调试助手(含VC6工程源文件)

VC编写串口调试助手(含VC6工程源文件)

纯业余者用VC(MFC)编写串口调试助手1.序毕业到现在,转眼就做射频开发10年了,一直从事直放站、干放等通信边缘行业,从低噪放、锁相源、选频、功放到整机,射频就那么点东西,而且越来越集成化,软件无线电是必然趋势。

做射频从业面会越来越窄,我知道所有人都会说,当你成为专家的时候,一切就都不是问题,可有几个真正的专家,再者说,射频需要经验的积累,只有实际项目做的越多越广,经验也就积累得越多,并不是一朝一夕能达到的。

前不久突然觉得,我的射频模块控制要是也是自己来编程控制多好啊!那就得学单片机编程,学习上位机编程了,可我都不会啊,要不就先来整整上位机,windows方面的。

大学唯一学的编程语言是C语言,可根本不能理解用C做什么,还都还给老师10多年了,这怎么办?从BASIC,C/C++,JAVA,PASCAL搜索了一圈,还是选C++吧,毕竟是C 语言发展而来,用VC环境,身边有可以请教的人。

在网上转悠了很久,发现《windows程序设计》是必看,《MFC Windows程序设计》是学MFC最经典的书籍。

OMG,这些书啊,都是上千页的,白天都在上班,哪有时间看哦,只有先下载下来作为参考资料了。

扯远了啊。

这也不行那也不行,怎么办呢?干脆硬着头皮上吧,找几个实例照搬,再修修改改加深理解吧。

第一个目标,自己编写个串口调试助手,掌握串口通信编程,这样上位机的编写就有希望了。

好了,目标定下来了。

网上下载了个串口调试助手,确定基本功能:1.自动寻找串口,并自动添加到下拉框中共选择;2.有波特率、数据位、停止位、校验位的选择设置;3.串口打开控制按钮;4.发送、清除按钮;5.接收是自动实现的;6.有定时自动发送功能;7.有传送文件功能;8.有状态栏显示,指示串口状态,设置参数和发送接收显示。

下面就一步步实现,本人纯业余,只是记录下来这个学习过程,请勿拍砖。

开发平台Visual C++6.0英文版,电脑是i7-2670Q四核8G内存1G独显的笔记本,装的win764位旗舰版,因此VC6兼容不是太好,有些小毛病,不过不影响编写。

串口调试助手源码

串口调试助手源码

串口调试助手程序框架(一)【截图】【源码】main.cpp#include<windows.h>#include<commctrl.h>#include<iostream>#include<stdio.h>#include"resource.h"using namespace std;HINSTANCE hInst;//窗口实例HWND hRDCLEAR, hSDCLEAR;HMENU hRDCHAR;void Init(HWND hwndDlg){SetWindowText(GetDlgItem(hwndDlg, SETXONC), "0x13");SetWindowText(GetDlgItem(hwndDlg, SETXOFFC), "0x19");SetWindowText(GetDlgItem(hwndDlg, SETTO), "0");SendDlgItemMessage(hwndDlg, RDCHAR, BM_SETCHECK, 1, 0);//把RadioBox RDCHAR设置为选中SendDlgItemMessage(hwndDlg, SDCHAR, BM_SETCHECK, 1, 0);//默认发送字符SendDlgItemMessage(hwndDlg, CTASY, BM_SETCHECK, 1, 0);//默认异步通信//在一个groupbox中必须有一个radiobox的属性:组为真//串口号SetWindowText(GetDlgItem(hwndDlg, SETCOMNO), "COM4");//默认值SendDlgItemMessage(hwndDlg, SETCOMNO, CB_ADDSTRING, 0, (LPARAM)("COM1"));SendDlgItemMessage(hwndDlg, SETCOMNO, CB_ADDSTRING, 0, (LPARAM)("COM2"));SendDlgItemMessage(hwndDlg, SETCOMNO, CB_ADDSTRING, 0, (LPARAM)("COM3"));SendDlgItemMessage(hwndDlg, SETCOMNO, CB_ADDSTRING, 0, (LPARAM)("COM4"));SendDlgItemMessage(hwndDlg, SETCOMNO, CB_ADDSTRING, 0, (LPARAM)("COM5"));SendDlgItemMessage(hwndDlg, SETCOMNO, CB_ADDSTRING, 0, (LPARAM)("COM6"));SendDlgItemMessage(hwndDlg, SETCOMNO, CB_ADDSTRING, 0, (LPARAM)("COM7"));SendDlgItemMessage(hwndDlg, SETCOMNO, CB_ADDSTRING, 0, (LPARAM)("COM8"));SendDlgItemMessage(hwndDlg, SETCOMNO, CB_ADDSTRING, 0, (LPARAM)("COM9"));//波特率SetWindowText(GetDlgItem(hwndDlg, SETBR), "9600");//默认值SendDlgItemMessage(hwndDlg, SETBR, CB_ADDSTRING, 0, (LPARAM)("1200"));SendDlgItemMessage(hwndDlg, SETBR, CB_ADDSTRING, 0, (LPARAM)("2400"));SendDlgItemMessage(hwndDlg, SETBR, CB_ADDSTRING, 0, (LPARAM)("4800"));SendDlgItemMessage(hwndDlg, SETBR, CB_ADDSTRING, 0, (LPARAM)("9600"));SendDlgItemMessage(hwndDlg, SETBR, CB_ADDSTRING, 0, (LPARAM)("14400"));SendDlgItemMessage(hwndDlg, SETBR, CB_ADDSTRING, 0, (LPARAM)("28800"));SendDlgItemMessage(hwndDlg, SETBR, CB_ADDSTRING, 0, (LPARAM)("38400"));SendDlgItemMessage(hwndDlg, SETBR, CB_ADDSTRING, 0, (LPARAM)("57600"));SendDlgItemMessage(hwndDlg, SETBR, CB_ADDSTRING, 0, (LPARAM)("115200"));//数据位SetWindowText(GetDlgItem(hwndDlg, SETBS), "8");//默认值SendDlgItemMessage(hwndDlg, SETBS, CB_ADDSTRING, 0, (LPARAM)("4"));SendDlgItemMessage(hwndDlg, SETBS, CB_ADDSTRING, 0, (LPARAM)("5"));SendDlgItemMessage(hwndDlg, SETBS, CB_ADDSTRING, 0, (LPARAM)("6"));SendDlgItemMessage(hwndDlg, SETBS, CB_ADDSTRING, 0, (LPARAM)("7"));SendDlgItemMessage(hwndDlg, SETBS, CB_ADDSTRING, 0, (LPARAM)("8"));//校验位SetWindowText(GetDlgItem(hwndDlg, SETPAR), "N");//默认值SendDlgItemMessage(hwndDlg, SETPAR, CB_ADDSTRING, 0, (LPARAM)("N"));SendDlgItemMessage(hwndDlg, SETPAR, CB_ADDSTRING, 0, (LPARAM)("odd"));SendDlgItemMessage(hwndDlg, SETPAR, CB_ADDSTRING, 0, (LPARAM)("even"));//停止位SetWindowText(GetDlgItem(hwndDlg, SETSB), "1");//默认值SendDlgItemMessage(hwndDlg, SETSB, CB_ADDSTRING, 0, (LPARAM)("1"));SendDlgItemMessage(hwndDlg, SETSB, CB_ADDSTRING, 0, (LPARAM)("2"));}BOOL CALLBACK DlgMain(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) {//窗口回调函数switch (uMsg)//消息处理{case WM_INITDIALOG://初始化{Init(hwndDlg);}return TRUE;case WM_CLOSE://关闭窗口{EndDialog(hwndDlg, 0);}return TRUE;case WM_COMMAND://菜单消息{switch (LOWORD(wParam)){case RDCLEAR://清空接收框数据{SetWindowText(hRDCLEAR, "");}return TRUE;case SDCLEAR://清空发送框数据{SetWindowText(GetDlgItem(hwndDlg, SDTEXT), "");}return TRUE;case SDSEND://发送数据{TCHAR szBuf[80];//缓存区string temp;GetWindowText(GetDlgItem(hwndDlg, SDTEXT), szBuf, 80);//获得接收框的文本temp = szBuf;//拼接字符串//cout<<temp;SetWindowText(GetDlgItem(hwndDlg, RDTEXT), temp.c_str());}return TRUE;case SETOP:{//打开串口}return TRUE;case SETCP:{//关闭串口}return TRUE;case SETSO:{}return TRUE;}}return TRUE;}return FALSE;}int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd) {hInst = hInstance;InitCommonControls();return DialogBox(hInst, MAKEINTRESOURCE(DLG_MAIN), NULL, (DLGPROC)DlgMain);}【源码】resource.h#ifndef IDC_STATIC#define IDC_STATIC (-1)#endif#define DLG_MAIN 100#define RDBOX 40000#define RDTEXT 40001#define RDCHAR 40002#define RDHEX 40003#define RDCLEAR 40004#define SDCHAR 40005#define SDHEX 40006#define SDCLEAR 40007#define SDSEND 40008#define SDAS 40009#define SDASTIME 40010#define SETCOMNO 40011#define CTSYN 40012#define CTASY 40013#define SETBR 40014#define SDTEXT 40015#define SETXONC 40016#define SETXOFFC 40017#define SETTO 40018#define SETPAR 40019#define SETSB 40020#define SETBS 40021#define SETOP 40022#define SETCP 40023#define SETSO 40024【源码】resource.rc#include<windows.h>#include<commctrl.h>#include<richedit.h>#include"resource.h"//// Dialog resources//LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRALDLG_MAIN DIALOG 0, 0, 635, 304STYLE DS_3DLOOK| DS_CENTER| DS_MODALFRAME| DS_SHELLFONT| WS_CAPTION| WS_VISIBLE| WS_POPUP| WS_SYSMENU CAPTION "SerialPortDebug"FONT 8, "Ms Shell Dlg"{GROUPBOX "Setting", 0, 257, 7, 365, 290, 0, WS_EX_LEFTLTEXT "Select Port", 0, 284, 30, 36, 8, SS_LEFT, WS_EX_LEFTGROUPBOX "Communication Type", 0, 278, 62, 295, 35, 0, WS_EX_LEFTLTEXT "ByteSize", 0, 469, 120, 28, 8, SS_LEFT, WS_EX_LEFTLTEXT "BaudRate", 0, 297, 122, 33, 8, SS_LEFT, WS_EX_LEFTGROUPBOX "Send Data", 0, 12, 135, 240, 162, 0, WS_EX_LEFTLTEXT "StopBits", 0, 471, 161, 27, 8, SS_LEFT, WS_EX_LEFTLTEXT "Parity", 0, 299, 162, 18, 8, SS_LEFT, WS_EX_LEFTAUTOCHECKBOX "fParity", 0, 401, 162, 35, 8, 0, WS_EX_LEFTAUTOCHECKBOX "CTS", 0, 296, 202, 30, 8, 0, WS_EX_LEFTAUTOCHECKBOX "DSR", 0, 365, 202, 31, 8, 0, WS_EX_LEFTAUTOCHECKBOX "DTR", 0, 436, 202, 31, 8, 0, WS_EX_LEFTAUTOCHECKBOX "XON/XOFF", 0, 507, 202, 53, 8, 0, WS_EX_LEFTLTEXT "ms", 0, 131, 228, 10, 8, SS_LEFT, WS_EX_LEFTLTEXT "ms", 0, 562, 237, 10, 8, SS_LEFT, WS_EX_LEFTLTEXT "XonChar", 0, 293, 238, 28, 8, SS_LEFT, WS_EX_LEFTLTEXT "XoffChar", 0, 383, 238, 28, 8, SS_LEFT, WS_EX_LEFTLTEXT "Timeouts", 0, 478, 238, 30, 8, SS_LEFT, WS_EX_LEFTGROUPBOX "Receive Data", RDBOX, 15, 10, 235, 120, 0, WS_EX_LEFTEDITTEXT RDTEXT, 20, 25, 225, 75, ES_AUTOHSCROLL | ES_MULTILINE | ES_READONLY, WS_EX_LEFTAUTORADIOBUTTON "Char", RDCHAR, 26, 112, 31, 8, WS_GROUP, WS_EX_LEFTAUTORADIOBUTTON "Hex", RDHEX, 80, 112, 29, 8, 0, WS_EX_LEFTPUSHBUTTON "Clear", RDCLEAR, 196, 108, 45, 14, 0, WS_EX_LEFTAUTORADIOBUTTON "Char", SDCHAR, 26, 208, 31, 8, WS_GROUP, WS_EX_LEFTAUTORADIOBUTTON "Hex", SDHEX, 82, 208, 29, 8, 0, WS_EX_LEFTPUSHBUTTON "Clear", SDCLEAR, 132, 204, 45, 14, 0, WS_EX_LEFTPUSHBUTTON "Send", SDSEND, 196, 204, 45, 14, 0, WS_EX_LEFTAUTOCHECKBOX "Auto send", SDAS, 26, 228, 48, 8, 0, WS_EX_LEFTEDITTEXT SDASTIME, 86, 225, 40, 14, ES_RIGHT | ES_AUTOHSCROLL, WS_EX_LEFTCOMBOBOX SETCOMNO, 337, 27, 95, 30, CBS_DROPDOWN | CBS_HASSTRINGS, WS_EX_LEFTAUTORADIOBUTTON "Synchronous ", CTSYN, 326, 75, 59, 8, WS_GROUP, WS_EX_LEFTAUTORADIOBUTTON "Asynchronous ", CTASY, 472, 77, 63, 8, 0, WS_EX_LEFTCOMBOBOX SETBR, 337, 120, 48, 30, CBS_DROPDOWN | CBS_HASSTRINGS, WS_EX_LEFTEDITTEXT SDTEXT, 20, 147, 227, 45, ES_AUTOHSCROLL, WS_EX_LEFTEDITTEXT SETXONC, 325, 235, 40, 14, ES_AUTOHSCROLL, WS_EX_LEFTEDITTEXT SETXOFFC, 417, 235, 40, 14, ES_AUTOHSCROLL, WS_EX_LEFTEDITTEXT SETTO, 512, 235, 40, 14, ES_AUTOHSCROLL, WS_EX_RIGHTCOMBOBOX SETPAR, 338, 160, 48, 30, CBS_DROPDOWN | CBS_HASSTRINGS, WS_EX_LEFTCOMBOBOX SETSB, 512, 159, 48, 30, CBS_DROPDOWN | CBS_HASSTRINGS, WS_EX_LEFTCOMBOBOX SETBS, 512, 117, 48, 30, CBS_DROPDOWN | CBS_HASSTRINGS, WS_EX_LEFTPUSHBUTTON "Open Port", SETOP, 297, 272, 45, 14, 0, WS_EX_LEFTPUSHBUTTON "Close Port", SETCP, 387, 272, 45, 14, 0, WS_EX_LEFTDEFPUSHBUTTON "Stop I/O", SETSO, 473, 271, 45, 14, 0, WS_EX_LEFT}//// Manifest resources//LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL1 RT_MANIFEST".\\manifest.xml"【源码】manifest.xml< ? xml version = "1.0" encoding = "UTF-8" standalone = "yes" ? ><assembly xmlns = "urn:schemas-microsoft-com:asm.v1" manifestVersion = "1.0"><dependency><dependentAssembly><assemblyIdentity type = "win32" name = "mon-Controls" version = "6.0.0.0" processorArchitecture = "*" publicKeyToken = "6595b64144ccf1df" language = "*" / >< / dependentAssembly>< / dependency><trustInfo xmlns = "urn:schemas-microsoft-com:asm.v3"><security><requestedPrivileges><requestedExecutionLevel level = "asInvoker" uiAccess = "false" / > < / requestedPrivileges> < / security>< / trustInfo>< / assembly>。

python编写485串口详解

python编写485串口详解

python编写485串口详解以Python编写485串口详解引言:485串口是一种常用的通信接口,广泛应用于工业自动化、楼宇自控等领域。

本文将介绍如何使用Python编写485串口通信程序,包括串口的打开与关闭、数据的发送与接收等操作。

通过阅读本文,您将了解到如何在Python中使用pyserial库来实现485串口通信。

一、安装pyserial库在开始编写485串口通信程序之前,我们需要先安装pyserial库。

可以通过在命令行中执行以下命令来安装:```pythonpip install pyserial```二、打开串口在使用485串口进行通信之前,我们首先需要打开串口。

在Python 中,可以使用pyserial库的Serial类来实现串口的打开。

以下是打开串口的基本步骤:1. 导入pyserial库```pythonimport serial```2. 创建Serial对象```pythonser = serial.Serial()```3. 配置串口参数```pythonser.port = 'COM1' # 串口号ser.baudrate = 9600 # 波特率ser.bytesize = 8 # 数据位ser.parity = 'N' # 校验位ser.stopbits = 1 # 停止位```4. 打开串口```pythonser.open()```打开串口之后,我们就可以进行数据的发送和接收操作了。

三、数据发送在使用485串口进行通信时,我们需要将数据发送给其他设备。

以下是使用pyserial库实现数据发送的基本步骤:1. 创建要发送的数据```pythondata = b"Hello, world!" # 要发送的数据```2. 发送数据```pythonser.write(data)```在发送数据时,我们可以使用Serial类的write方法将数据发送给串口。

串口助手的编写

串口助手的编写

串口助手的编写1. 引言串口助手是一种用于与串口通信的工具,可用于调试和监控串口设备。

它提供了一个图形界面,使用户能够轻松地发送和接收数据。

本文将介绍串口助手的编写过程,包括功能设计、界面设计和代码实现。

2. 功能设计串口助手的主要功能包括以下几个方面:2.1 串口设置用户可以选择要连接的串口和波特率,并设置数据位、停止位和校验位等参数。

这些设置将影响数据的传输速率和可靠性。

2.2 数据发送和接收用户可以通过串口助手发送数据到目标设备,也可以接收来自目标设备的数据。

发送数据时,用户可以选择发送的数据类型(如字符串、十六进制等),并可以设置发送的间隔时间。

接收数据时,用户可以选择以字符串或十六进制的形式显示接收到的数据。

2.3 数据记录串口助手可以将发送和接收的数据记录到文件中,以便后续分析和查看。

用户可以选择记录的数据类型和保存的文件路径。

2.4 快捷命令用户可以预先定义一些快捷命令,以便快速发送一些常用的指令。

这些命令可以保存在配置文件中,方便用户随时调用和修改。

2.5 自动发送用户可以设置自动发送功能,使串口助手定时发送指定的数据。

这在某些场景下非常有用,例如模拟设备的周期性发送。

3. 界面设计串口助手的界面设计应简洁明了,方便用户操作。

主要界面应包含以下几个部分:3.1 串口设置区域该区域包括串口选择、波特率设置和其他串口参数设置。

用户可以通过下拉菜单选择要连接的串口和波特率,并通过复选框选择数据位、停止位和校验位等参数。

3.2 数据发送区域用户可以在该区域输入要发送的数据,并选择发送的数据类型(字符串或十六进制)。

用户还可以设置发送的间隔时间,以控制数据的发送速率。

3.3 数据接收区域该区域显示接收到的数据。

用户可以选择以字符串或十六进制的形式显示接收到的数据,并可以清除接收区的数据。

3.4 数据记录区域用户可以选择启用数据记录功能,并设置记录的数据类型和保存的文件路径。

记录的数据将实时显示在该区域,并可以通过按钮开始和停止记录。

串口调试助手源代码

串口调试助手源代码

串口调试助手预源代码using System;using System.Collect ion s.Ge neric;using p onen tModel;using System.Data;using System.Draw ing;using System.Linq;using System.Text;using System.Thread in g.Tasks;using System.Wi ndows.Forms;using Syste m.IO;using Syste m.IO .Ports;using System.Thread ing;using DevExpress.XtraEditors;using System.Text.RegularExpressi ons;n amespace Win dowsFormsApplicatio n3 {public partial class Form1 : XtraForm {SerialPort sp1 = new SerialPort(); int Flag = 0;int StateCha nged = 0;int StateCha nged_Ascii = 1; int StateCha nged_16 = 0;string Temp = null;stri ng Temp_memoSe nd = n ull;private void memoSe nd_EditValueCha nged(object sen der, Even tArgs e) { - }public Form1(){In itializeComp onen t();sp1.DataReceived += sp1_DataReceived; }private void Form1_Load(object sen der, Even tArgs e) { -this.MaximizeBox = false;// 检查是否有串口stri ng[] str = SerialPort.GetPortNames();if (str == null) __________ |{MessageBox.Show(”本机没有串口!", "error");return;}// 添加串口项目foreach (stri ng port in Syste m.IO.P orts.SerialPort.GetPortNames()) { cbSerial.Properties .I tems.Add(port);}// 串口设置默认选择项cbSerial.Selectedl ndex = 0;Con trol.CheckForlllegalCrossThreadCalls = false; spl.DataReceived += new SerialDataReceivedEve ntHa ndler(sp1_DataReceived); //订阅委托e)//SerialPort sp1 = new SerialPort();if (!sp1.lsOpe n)〃串口是关闭的,设置参数,打开串口{try{// 获取串口号string serialName = cbSerial.Selectedltem.ToString(); sp1.PortName = serialName;// 设置各参数stri ng strBaudRate = cbBaudRate.Text;string strDateBits = cbDataBits.Text;string strStopBits = cbStop.Text;sp1.BaudRate = Con vert.ToI nt32(strBaudRate);〃波特率sp1.DataBits = Con vert.ToI nt32(strDateBi ts);// 数据位switch (cbStop.Text) // 停止位{case "1":sp1.StopBits = StopBits. On e;break;case "1.5":sp1.StopBits = StopBits. On e;break;case "2":sp1.StopBits = StopBits.Two;break; default:case " 奇校验":sp1.Parity = Parity.Odd; break;精品文档", "Error");case "偶校验":spl.Parity = Parity.Eve n; break; default:MessageBox.Show("Error: 参数不正确!break;labSerial.Text =" 串口号:” + sp1 .P ortName; labState.Text ="状 态:打开";}catch (System.Excepti on ex) {MessageBox.Show("Error:" + ex.Message, "Error"); return; } } }//private void CloseSerial_Click(object sen der, Even tArgs e) 〃{// if (sp1.lsOpe n) // { // sp1.Close(); // labSerial.Text =" 串口号:” + sp1.PortName; // labState.Text ="状 态:关闭";// } 〃}private void Sen d_Click(object sen der, Even tArgs e) { - stri ng StrSe nd = memoSe nd.Text; if (!sp1.lsOpe n) {MessageBox.Show (” 请先打开串口! ", "Error");return; } else {if (rbt nSen dStr.Checked)//〃bt nOpe n.En abled =false; 字符串发送{if (ckTimeSe nd.Checked&& !(stri ng.lsNullOrEmpty(textTime.Text)))//判断是否定时发送数据{string Time = textTime.Text;tmSe nd.l nterval = int. Parse(Time) * 1000;//时间单位是秒,化成毫秒单位后的空格//stri ng StrSe nd_2 = StrSe nd_1.Replace (” ", ""); //stri ng StrSe nd_3 = stri ng.J oi n (” ",Regex.Matches(StrSend_2, @"..|.").Cast<Match>().ToList());stri ng[] StrArray = StrSe nd_1.Split(' '); // 用空格符隔开字符串数组var Str_Se nd = new List<stri ng>();// i nt byteBufferLe ngth = StrArray.Le ngth; 数组StrArray 的长度for (int i = 0; i < StrArray.Le ngth; i++){if (StrArray[i].Trim()=="") {//byteBufferLe ngth--; con ti nue; }else} else //{if (ckTimeSe nd.Checked&& !(string.IsNullOrEmpty(textTime.Text))){卜六进制发送//tmSe nd.Start();//开启定时器{if (StrArray[i].Le ngth < 3){Str_Se nd.Add(StrArray[i]);}else{Str_Se nd.AddRa nge(Devide(StrArray[i]));}}}int byteBufferLe ngth = Str_Se nd.Cou nt; byte[] byteBuffer = new byte[byteBufferLe ngth];in t ii = 0;//decNum = Con vert.ToI nt32(Str_Se nd[i], 16); // 把字符串转成16进制数〃byteBuffer[ii] = Co nvert.ToByte(decNum);〃}try{decNum = Con vert.ToI nt32(Str_Se nd[i], 16); // 把字符串转成16进制数byteBuffer[ii] = Co nvert.ToByte(decNum);}catch (System.Exceptio n ex){MessageBox.Show(”输入错误!","提示");return;}ii++;}sp1.Write(byteBuffer, 0, byteBuffer.Length);// 从第0个开始写入byteBuffer ,长度bytebuffer 的长度。

串口调试助手源程序及编程详细过程

串口调试助手源程序及编程详细过程

串口调试助手源程序及编程详细过程作者:龚建伟1.建立项目:打开VC++6.0,建立一个基于对话框的MFC应用程序SCommTest(与我源代码一致,等会你会方便一点);2.在项目中插入MSComm控件选择Project菜单下Add To Project子菜单中的Components and Controls…选项,在弹出的对话框中双击Registered ActiveX Controls项(稍等一会,这个过程较慢),则所有注册过的ActiveX控件出现在列表框中。

选择Microsoft Communications Control, version 6.0,,单击Insert按钮将它插入到我们的Project中来,接受缺省的选项。

(如果你在控件列表中看不到Microsoft Communications Control, version 6.0,那可能是你在安装VC6时没有把ActiveX一项选上,重新安装VC6,选上ActiveX就可以了),这时在ClassView视窗中就可以看到CMSComm类了,(注意:此类在ClassWizard中看不到,重构clw文件也一样),并且在控件工具栏Controls中出现了电话图标(如图1所示),现在要做的是用鼠标将此图标拖到对话框中,程序运行后,这个图标是看不到的。

3.利用ClassWizard定义CMSComm类控制对象打开ClassWizard->Member Viariables选项卡,选择C SCommTest Dlg类,为IDC_MSCOMM1添加控制变量:m_ctrlComm,这时你可以看一看,在对话框头文件中自动加入了//{{AFX_INCLUDES() #include "mscomm.h" //}}AFX_INCLUDES (这时运行程序,如果有错,那就再从头开始)。

4.在对话框中添加控件向主对话框中添加两个编辑框,一个用于接收显示数据ID为IDC_EDIT_RXDATA,另一个用于输入发送数据,ID为IDC_EDIT_TXDATA,再添加一个按钮,功能是按一次就把发送编辑框中的内容发送一次,将其ID设为IDC_BUTTON_MANUALSEND。

VB串口调试助手源代码

VB串口调试助手源代码

VB串口调试助手源代码Dim OutputAscii As BooleanDim InputString As StringDim OutputString As String'============================================================================== =======' 变量定义'============================================================================== =======Option Explicit ’强制显式声明Dim ComSwitch As Boolean ’串口开关状态判断Dim FileData As String ’要发送的文件暂存Dim SendCount As Long ’发送数据字节计数器Dim ReceiveCount As Long ’接收数据字节计数器Dim InputSignal As String ’接收缓冲暂存Dim OutputSignal As String ’发送数据暂存Dim DisplaySwitch As Boolean ’显示开关Dim ModeSend As Boolean ’发送方式判断Dim Savetime As Single ’时间数据暂存延时用Dim SaveTextPath As String ’保存文本路径' 网页超链接申明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 LongPrivate Sub CloseCom() '关闭串口On Error GoTo ErrIf MSComm.PortOpen = True ThenMSComm.PortOpen = False’先判断串口是否打开,如果打开则先关闭txtstatus.Text = "STATUS:COM Port Cloced" ’串口状态显示mnuconnect.Caption = "断开串口"cmdswitch.Caption = "打开串口"'ImgSwitch.Picture = LoadPicture("f:\我的VB\串口调试软件\图片\guan.jpg") ' 显示串口已经关闭的图标ImgSwitchoff.Visible = TrueImgSwitchon.Visible = FalseErr:End SubPrivate Sub UpdateStatus()If MSComm.PortOpen ThenStatusBar1.Panels(1).Text = "Connected"mnuautosend.Caption = "自动发送"mnuconnect.Caption = "断开串口"ElseStatusBar1.Panels(1).Text = "断开串口"mnuautosend.Caption = "disautosend"mnuconnect.Caption = "打开串口"End IfStatusBar1.Panels(2).Text = "COM" & mPortStatusBar1.Panels(3).Text = MSComm.SettingsIf (OutputAscii) ThenStatusBar1.Panels(4) = "ASCII"ElseStatusBar1.Panels(4) = "HEX"End If'On Error GoTo ErrIf ChkAutoSend.Value = 1 Then ’如果有效则,自动发送If MSComm.PortOpen = True Then ’串口状态判断mnuautosend.Caption = "Dis&autosend"TmrAutoSend.Interval = Val(TxtAutoSendTime) ’设置自动发送时间TmrAutoSend.Enabled = True ’打开自动发送定时器Elsemnuautosend.Caption = "autosend"ChkAutoSend.Value = 0 ’串口没有打开去掉自动发送MsgBox "串口没有打开,请打开串口", 48, "串口调试助手" ' 如果串口没有被打开,提示打开串口End IfElseIf ChkAutoSend.Value = 0 Then ’如果无效,不发送mnuautosend.Caption = "autosend"TmrAutoSend.Enabled = False ’关闭自动发送定时器End IfErr:End SubPrivate Sub CmdSendFile_Click() '发送文件On Error GoTo ErrIf MSComm.PortOpen = True Then ’如果串口打开了,则可以发送数据If FileData = "" Then ’判断发送数据是否为空MsgBox "发送的文件为空", 16, "串口调试助手" ’发送数据为空则提示ElseIf ChkHexReceive.Value = 1 Then ’如果按十六进制接收时,按二进制发送,否则按文本发送MSComm.InputMode = comInputModeBinary ’二进制发送ElseMSComm.InputMode = comInputModeText ’文本发送End IfMSComm.Output = Trim(FileData) ’发送数据ModeSend = True ’设置文本发送方式End IfElseMsgBox "串口没有打开,请打开串口", 48, "串口调试助手" ' 如果串口没有被打开,提示打开串口End IfErr:End SubPrivate Sub Comm_initial(Port As Byte, BaudRate As String, ParityBit As String, DataBit As Integer, StopBit As Integer)On Error GoTo ErrorTrap ' 错误则跳往错误处理If MSComm.PortOpen = True Then MSComm.PortOpen = False’先判断串口是否打开,如果打开则先关闭mPort = Port ’设定端口MSComm.Settings = BaudRate & "," & ParityBit & "," & DataBit & "," & StopBit ' 设置波特率,无校验,8位数据位,1位停止位MSComm.InBufferSize = 1024 ’设置接收缓冲区为1024字节MSComm.OutBufferSize = 4096 ’设置发送缓冲区为4096字节MSComm.InBufferCount = 0 ’清空输入缓冲区MSComm.OutBufferCount = 0 ’清空输出缓冲区MSComm.SThreshold = 1 ’发送缓冲区空触发发送事件MSComm.RThreshold = 1 ’每X个字符到接收缓冲区引起触发接收事件MSComm.OutBufferCount = 0 ’清空发送缓冲区MSComm.InBufferCount = 0 ’滑空接收缓冲MSComm.PortOpen = True ’打开串口If MSComm.PortOpen = True Thentxtstatus.Text = "STATUS:" & cbocom.Text & " OPEND," & cbobaudrate.Text & "," &Left(cboparitybit.Text, 1) & "," & cbodatabit.Text & "," & cbostopbit.TextElsetxtstatus.Text = "STATUS:COM Port Cloced" ’串口没打开时,提示串口关闭状态End IfExit SubErrorTrap: ’错误处理Select Case Err.NumberCase comPortAlreadyOpen ’如果串口已经打开,则提示MsgBox "没有发现此串口或被占用", 49, "串口调试助手"CloseComCase ElseMsgBox "没有发现此串口或被占用", 49, "串口调试助手"CloseComEnd SelectErr.ClearEnd SubPrivate Sub Comm_reSet(Port As Byte, BaudRate As String, ParityBit As String, DataBit As Integer, StopBit As Integer)On Error GoTo ErrorHint ’错误则跳往错误处理If MSComm.PortOpen = True Then MSComm.PortOpen = False’先判断串口是否打开,如果打开则先关闭mPort = Port ’设定端口MSComm.Settings = BaudRate & "," & ParityBit & "," & DataBit & "," & StopBit ' 设置波特率,无校验,8位数据位,1位停止位MSComm.PortOpen = True ’打开串口If MSComm.PortOpen = True Thencmdswitch.Caption = "关闭串口"'ImgSwitch.Picture = LoadPicture("f:\我的VB\串口调试软件\图片\kai.jpg") ' 显示串口已经打开的图标ImgSwitchoff.Visible = Falsemnuconnect.Caption = "disconnect"ImgSwitchon.Visible = Truetxtstatus.Text = "STATUS:" & cbocom.Text & " OPEND," & cbobaudrate.Text & "," &Left(cboparitybit.Text, 1) & "," & cbodatabit.Text & "," & cbostopbit.TextElsecmdswitch.Caption = "打开串口"'ImgSwitch.Picture = LoadPicture("f:\我的VB\串口调试软件\图片\guan.jpg") ' 显示串口已经关闭的图标ImgSwitchon.Visible = FalseImgSwitchoff.Visible = Truetxtstatus.Text = "STATUS:COM Port Cloced"End IfExit SubErrorHint: ’错误处理Select Case Err.NumberCase comPortAlreadyOpen ’如果串口已经打开,则提示MsgBox "没有成功,请重试", vbExclamation, "串口调试助手"CloseCom ’调用关闭串口函数Case ElseMsgBox "没有成功,请重试", vbExclamation, "串口调试助手"CloseCom ’调用关闭串口函数End SelectErr.Clear ’清除Err 对象的属性End SubPrivate Sub Command1_Click()End SubPrivate Sub cbobaudrate_Change()Call Comm_reSet(Val(Mid(cbocom.Text, 4, 2)), cbobaudrate.Text, Left(cboparitybit.Text, 1), cbodatabit.Text, cbostopbit.Text) '串口设置End SubPrivate Sub cbocom_Change()Call Comm_reSet(Val(Mid(cbocom.Text, 4, 2)), cbobaudrate.Text, Left(cboparitybit.Text, 1), cbodatabit.Text, cbostopbit.Text) '串口设置End SubPrivate Sub cbodatabit_Change()Call Comm_reSet(Val(Mid(cbocom.Text, 4, 2)), cbobaudrate.Text, Left(cboparitybit.Text, 1), cbodatabit.Text, cbostopbit.Text) '串口设置End SubPrivate Sub cboparitybit_Change()Call Comm_reSet(Val(Mid(cbocom.Text, 4, 2)), cbobaudrate.Text, Left(cboparitybit.Text, 1), cbodatabit.Text, cbostopbit.Text) '串口设置End SubPrivate Sub cbostopbit_Change()Call Comm_reSet(Val(Mid(cbocom.Text, 4, 2)), cbobaudrate.Text, Left(cboparitybit.Text, 1), cbodatabit.Text, cbostopbit.Text) '串口设置End SubPrivate Sub chkautosend_Click()On Error GoTo ErrIf ChkAutoSend.Value = 1 Then ’如果有效则,自动发送If MSComm.PortOpen = True Then ’串口状态判断mnuautosend.Caption = "取消自动发送"TmrAutoSend.Interval = Val(TxtAutoSendTime) ’设置自动发送时间TmrAutoSend.Enabled = True ’打开自动发送定时器ElseChkAutoSend.Value = 0 ’串口没有打开去掉自动发送MsgBox "串口没有打开,请打开串口", 48, "串口调试助手" ' 如果串口没有被打开,提示打开串口End IfElseIf ChkAutoSend.Value = 0 Then ’如果无效,不发送mnuautosend.Caption = "自动发送数据"TmrAutoSend.Enabled = False ’关闭自动发送定时器End IfErr:End SubPrivate Sub cmdamend_Click()Dim spShell As Object ’定义存放引用对象的变量Dim spFolder As Object ’定义存放引用对象的变量Dim spFolderItem As Object ’定义存放引用对象的变量Dim spPath As String ’定义存放的变量On Error GoTo Err ’错误处理,防止取消打开文件夹时报错Const WINDOW_HANDLE = 0Const NO_OPTIONS = 0Set spShell = CreateObject("Shell.Application")Set spFolder = spShell.BrowseForFolder(WINDOW_HANDLE, "选择目录:", NO_OPTIONS,"C:\Scripts")Set spFolderItem = spFolder.SelfspPath = spFolderItem.PathspPath = Replace(spPath, "\", "\") ’ Replace函数的返回值是一个字符串txtsavepath.Text = spPath ’把文件夹路径显示在标签上SaveTextPath = txtsavepath.Text ’路径暂存Err:End SubPrivate Sub CmdClearCounter_Click()On Error GoTo ErrSendCount = 0 ’发送计数器清零ReceiveCount = 0 ’接收计数器清零txtRXcount.Text = "RX:" & 0 ’接收计数txtTXcount.Text = "TX:" & 0 ’发送计数Err:End SubPrivate Sub cmdclearrecieve_Click()TxtReceive.Text = ""End SubPrivate Sub cmdclearsend_Click()txtsend.Text = ""End SubPrivate Sub CmdHelp_Click()FrmHelp.ShowEnd SubPrivate Sub CmdQuit_Click()If MSComm.PortOpen = True Then MSComm.PortOpen = False’先判断串口是否打开,如果打开则先关闭Unload Me ’卸载窗体,并退出程序EndEnd SubPrivate Sub cmdsavedisp_Click()On Error GoTo Err ’错误处理SaveTextPath = txtsavepath ’路径暂存Open txtsavepath & "\1.txt" For Output As #1 ’打开文件’不存在的话会创建文件,如已存在会覆盖’ output 改为append 为追加’改为input 则只读Print #1, Year(Date) & "年" & Month(Date) & "月" & Day(Date) & _"日" & Hour(Time) & "时" & Minute(Time) & "分" & Second(Time) & _"秒" & vbCrLf & TxtReceive.Text + vbCrLf ’把接收区的文本保存文本前加上保存时间(0000年00月00日00时00分00秒)’ vbcrlf 为回车换行Close #1 ’关闭文件txtsavepath = "OK,1.txt Save" ’提示保存成功cmdsavedisp.Enabled = FalseSavetime = Timer ’记下开始的时间While Timer < Savetime + 5 ’循环等待5 - 要延时的时间DoEvents ’转让控制权,以便让操作系统处理其它的事件。

232串口通信调试步骤

232串口通信调试步骤

232串口通信调试步骤
1、接线说明,下载也是通信的一种,所以说一般能下载就能
通讯成功。

这个例程的接线是不用额外接线的,下载完后保持跳线帽不变就行。

2、烧录程序:F:\光盘资料\步骤6 51单片机例程\21 RS232通
信(串口通信)\RS232\232接收与发送程序\int.hex
3、打开串口调试助手:F:\光盘资料\常用辅助开发工具\串口调
试助手\sscom32.exe
打开之后界面是:
注意调节这几项:
a)串口号根据自己的情况定与下载软件使用的串口号一致
b)波特率调成4800
c)晶振使用12M,因为例程里的程序设定的就是12M
d)在发送区输入字符
e)点击发送
如果点击发送,接收区出现了发送区的内容,这说明通信成功。

串口调试助手使用教程

串口调试助手使用教程

串口调试助手使用教程首先,确保你已经正确连接了串口调试助手软件和目标设备的串口。

1. 打开串口调试助手软件。

在软件界面的顶部菜单栏中,通常会有一个“串口”的选项,点击它展开串口设置。

2. 查找并选择正确的串口。

在串口设置中,你可以看到可用的串口列表。

选择正确的串口,通常以“COM”开头并带有具体的串口号。

如果你不确定应该选择哪个串口,可以尝试一个接一个地选择每个串口,然后观察是否有数据传输。

3. 配置串口参数。

继续在串口设置中,通常会有波特率、数据位、停止位、校验位和流控制等选项。

确保这些参数与你的设备设置相匹配。

如果你不确定设备的串口参数,可以参考设备的说明书或者询问设备厂商。

4. 打开串口。

完成串口参数配置后,点击一个按钮或者选项来打开串口连接。

通常会有一个“打开串口”、“连接”或者类似的按钮。

如果一切正常,你应该能在软件界面上看到串口的连接状态。

5. 监听串口数据。

一旦串口连接成功,你可以开始接收和发送数据。

通常会有一个数据接收区和一个数据发送区。

数据接收区会实时显示通过串口接收到的数据。

你可以通过不同的设置来选择以何种方式显示数据,例如文本、十六进制等。

6. 发送数据。

如果你需要通过串口发送数据到目标设备,你可以在数据发送区输入相应的数据,然后点击发送按钮或者类似的选项。

通过串口调试助手,你可以发送文本、十六进制等各种类型的数据。

7. 保存数据。

如果你需要保存通过串口接收或发送的数据,你可以使用串口调试助手提供的保存功能。

通常会有一个保存按钮或者菜单选项,点击它可以将数据保存为文件。

8. 关闭串口。

当你不再需要使用串口时,记得关闭串口连接。

一般会有一个“关闭串口”或者类似的按钮。

这样可以释放串口资源,同时避免不必要的错误。

以上就是使用串口调试助手的基本步骤。

根据不同的软件界面和功能设置,可能会略有差异,但基本原理是相似的。

请根据具体软件的说明和使用指南进行相关操作。

串口编程的一般步骤及相关函数讲解

串口编程的一般步骤及相关函数讲解

串口编程的一般步骤及相关函数讲解串口编程是指通过串口与外部设备进行通信的程序设计。

一般步骤包括串口初始化、设置串口参数、打开串口、发送数据、接收数据和关闭串口等。

1. 串口初始化:首先需要导入串口编程相关的库文件,如pyserial 库。

然后通过serial.Serial(函数创建一个串口对象,指定串口号、波特率、停止位、数据位等参数,如:``````这里将串口号设置为/dev/ttyUSB0,波特率设置为9600,超时时间设置为1秒。

2.设置串口参数:通过串口对象的相关方法设置串口参数,如:```serial_port.setBaudrate(9600)serial_port.setParity(serial.PARITY_NONE)serial_port.setStopbits(serial.STOPBITS_ONE)serial_port.setByteSize(serial.EIGHTBITS)```这里设置了波特率为9600,无奇偶校验位,1位停止位,8位数据位。

3. 打开串口:使用串口对象的open(方法打开串口,如:serial_port.open```注意,打开串口之前要确保串口没有被其他程序占用。

4. 发送数据:使用串口对象的write(方法向串口发送数据,如:```data = 'Hello, World!'serial_port.write(data.encode()```这里将字符串'Hello, World!'转码为字节型数据并发送到串口。

5. 接收数据:使用串口对象的read(方法从串口读取数据,如:```received_data = serial_port.read(10)print(received_data.decode()```这里从串口读取10字节的数据,并将其解码为字符串输出。

6. 关闭串口:使用串口对象的close(方法关闭串口,如:```serial_port.close在程序结束时,记得关闭串口以释放资源。

经典串口调试助手源程序及串口通信设置

经典串口调试助手源程序及串口通信设置

经典串口调试助手源程序及串口通信设置串口调试助手是一种用于串口通信调试的工具,它可以通过串口与外部设备进行数据的读写和处理,常用于单片机、嵌入式系统、电子设备等领域的开发调试中。

经典串口调试助手源程序经典串口调试助手是一款经典的串口调试工具,其源程序使用C语言编写,提供了丰富的功能和易于使用的界面,被广泛应用于各种领域的开发调试中。

该工具可以在Windows操作系统中运行,并支持多种串口通信协议,包括RS232、RS485、RS422等。

以下是经典串口调试助手部分源程序的示例:```c// 打开串口HANDLE OpenSerialPort(const char* portName){ HANDLE hCom; hCom = CreateFile(portName, // 串口名称GENERIC_READ | GENERIC_WRITE, // 读写访问0,// 无共享NULL,// 安全描述符OPEN_EXISTING,// 打开方式FILE_ATTRIBUTE_NORMAL, // 文件属性NULL); // 文件模板if (hCom ==INVALID_HANDLE_VALUE) // 判断是否打开成功{ return NULL; } return hCom;}// 发送数据int SendData(HANDLE hCom, const char* data, int len){ DWORD writeSize; if (!WriteFile(hCom, data, len, &writeSize, NULL)) // 写入数据{ return -1; } return writeSize;}// 接收数据int ReceiveData(HANDLE hCom, char* data, int len){ DWORD readSize; if (!ReadFile(hCom, data, len,&readSize, NULL)) // 读取数据{ return -1; } return readSize;}// 关闭串口int CloseSerialPort(HANDLE hCom){ if(!CloseHandle(hCom)) // 关闭句柄{ return-1; } return 0;}```上述函数实现了打开串口、发送数据、接收数据和关闭串口等基本功能,可以作为串口通信的底层驱动实现。

友善串口调试助手教程

友善串口调试助手教程

友善串口调试助手教程友善串口调试助手是一款功能强大的串口调试工具,可以帮助开发人员在进行串口通信时进行数据的传输、接收和调试。

它提供了简单易用的用户界面和丰富多样的功能,非常适合初学者和经验丰富的开发人员使用。

下面是友善串口调试助手的教程,帮助大家快速上手使用该工具。

第一步:安装友善串口调试助手首先,我们需要在友善电子官网上下载友善串口调试助手的安装包,然后进行安装。

安装完成后,可以在桌面或开始菜单上找到友善串口调试助手的图标,点击运行即可打开工具。

第二步:连接串口设备在使用友善串口调试助手之前,我们需要将要调试的串口设备连接到计算机上。

可以使用串口转USB的转接线,将串口设备与计算机连接起来。

第三步:选择串口打开友善串口调试助手后,首先要选择正确的串口。

点击工具栏上的“串口选择”按钮,会弹出一个下拉菜单,列出当前计算机上可用的串口。

选择要调试的串口,并点击确定即可。

第四步:设置串口参数在选择了串口后,点击工具栏上的“串口参数设置”按钮,会弹出一个设置窗口。

在这个窗口中,可以设置串口的波特率、数据位、停止位和校验位等参数。

根据具体的串口设备要求,设置相应的参数,然后点击确定保存设置。

第五步:发送和接收数据在设置好串口参数后,就可以开始发送和接收数据了。

在工具栏上有一个文本框,可以输入要发送的数据。

在文本框中输入完数据后,点击“发送”按钮,数据就会被发送到串口设备上。

同时,在工具的主界面上会显示串口设备返回的数据,方便进行接收和调试。

第六步:保存和加载数据友善串口调试助手还提供了保存和加载数据的功能。

在工具栏上有一个“保存”按钮,可以将当前接收到的数据保存到本地文件中。

点击“保存”按钮后,会弹出一个保存对话框,选择保存的文件路径和文件名后即可保存数据。

类似地,点击工具栏上的“加载”按钮,可以加载之前保存的数据文件到工具中。

第七步:其他功能友善串口调试助手还提供了其他一些实用的功能,如自定义数据发送周期、自动回复数据等。

串口助手步骤cjq

串口助手步骤cjq

建立SCOMM程序串口助手背景:vc++2005,不需要什么特殊空间(spcomm之类的什么都不需要)1.打开vc++2005,新建MFC AppWizard,名字SCOMM,基于对话框的。

确定完成。

2.建立界面如下:代码如下:SCOMMDlg.cpp// SCOMMDlg.cpp : 实现文件//#include"stdafx.h"#include"SCOMM.h"#include"SCOMMDlg.h"#ifdef _DEBUG#define new DEBUG_NEW#endif// 用于应用程序“关于”菜单项的CAboutDlg 对话框class CAboutDlg : public CDialog{public:CAboutDlg();// 对话框数据enum { IDD = IDD_ABOUTBOX };protected:virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持// 实现protected:DECLARE_MESSAGE_MAP()};CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD){}void CAboutDlg::DoDataExchange(CDataExchange* pDX){CDialog::DoDataExchange(pDX);}BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)END_MESSAGE_MAP()// CSCOMMDlg 对话框CSCOMMDlg::CSCOMMDlg(CWnd* pParent /*=NULL*/): CDialog(CSCOMMDlg::IDD, pParent), m_ReceiveData(_T("")), m_strSendData(_T("")){m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);//自己添加初始化变量值m_bAutoSend=FALSE;m_bStopDispRXData=FALSE;m_bOpenPort=FALSE;m_nCycleTime=1000;}void CSCOMMDlg::DoDataExchange(CDataExchange* pDX){CDialog::DoDataExchange(pDX);//接收区域DDX_Control(pDX, IDC_COMBO_COMSELECT, m_Com);DDX_Control(pDX, IDC_COMBO_SPEED, m_Speed);DDX_Control(pDX, IDC_COMBO_STOPBITS, m_StopBits);DDX_Control(pDX, IDC_COMBO_DATABITS, m_DataBits);DDX_Control(pDX, IDC_COMBO_PARITY, m_Parity);DDX_Control(pDX, IDC_BUTTON_STOPDISP, m_ctrlStopDisp);DDX_Control(pDX, IDC_CHECK_HEXRECIEVE, m_ctrlHexReceieve);DDX_Control(pDX, IDC_BUTTON_OPENPORT, m_ctrlOpenPort);DDX_Control(pDX, IDC_EDIT_RECIVE, m_ctrlReceiveData);DDX_Text(pDX, IDC_EDIT_RECIVE, m_ReceiveData);DDX_Control(pDX, IDC_CHECK_AUTOCLEAR, m_ctrlAutoClear);//2个计数的DDX_Control(pDX, IDC_STATIC_RXCOUNT, m_ctrlRXCOUNT);DDX_Control(pDX, IDC_STATIC_TXCOUNT, m_ctrlTXCount);DDX_Control(pDX, IDC_BUTTON_COUNTRESET, m_ctrlCounterReset);//清空计数//发送区域DDX_Control(pDX, IDC_BUTTON_MANUALSEND, m_ctrlManualSend);DDX_Control(pDX, IDC_CHECK_AUTOSEND, m_ctrlAutoSend);DDX_Control(pDX, IDC_CHECK_HEXSEND, m_ctrlHexSend);DDX_Control(pDX, IDC_EDIT_SEND, m_ctrlEditSend);DDX_Text(pDX, IDC_EDIT_SEND, m_strSendData);DDX_Control(pDX, IDC_BUTTON_CLEARRECASENDA, m_ctrlClearTXData);//关闭按钮DDX_Control(pDX, IDC_BUTTON_CLOSE, m_ctrlClose);DDX_Control(pDX, IDC_STATIC_STATUS, m_ctrlPortStatus);}BEGIN_MESSAGE_MAP(CSCOMMDlg, CDialog)ON_MESSAGE(WM_COMM_RXCHAR, OnCommunication)//自加的ON_WM_SYSCOMMAND()ON_WM_PAINT()ON_WM_QUERYDRAGICON()//}}AFX_MSG_MAPON_BN_CLICKED(IDC_BUTTON_MANUALSEND,&CSCOMMDlg::OnBnClickedButtonManualsend)ON_BN_CLICKED(IDC_BUTTON_OPENPORT,&CSCOMMDlg::OnBnClickedButtonOpenport)ON_WM_DESTROY()ON_WM_TIMER()ON_BN_CLICKED(IDC_CHECK_AUTOSEND, &CSCOMMDlg::OnBnClickedCheckAutosend) ON_EN_CHANGE(IDC_EDIT_SEND, &CSCOMMDlg::OnEnChangeEditSend)ON_EN_CHANGE(IDC_EDIT_CYCLETIME, &CSCOMMDlg::OnEnChangeEditCycletime) ON_BN_CLICKED(IDC_BUTTON_CLEAR_RECI_AREA,&CSCOMMDlg::OnBnClickedButtonClearReciArea)ON_BN_CLICKED(IDC_BUTTON_STOPDISP,&CSCOMMDlg::OnBnClickedButtonStopdisp)//ON_CBN_SELCHANGE(IDC_COMBO_DATABITS,&CSCOMMDlg::OnCbnSelchangeComboDatabits)ON_CBN_SELENDOK(IDC_COMBO_COMSELECT,&CSCOMMDlg::OnCbnSelendokComboComselect)ON_CBN_SELENDOK(IDC_COMBO_SPEED, &CSCOMMDlg::OnCbnSelendokComboSpeed)ON_CBN_SELENDOK(IDC_COMBO_PARITY, &CSCOMMDlg::OnCbnSelendokComboParity)ON_CBN_SELENDOK(IDC_COMBO_DATABITS, &CSCOMMDlg::OnCbnSelendokComboDatabits) ON_CBN_SELENDOK(IDC_COMBO_STOPBITS, &CSCOMMDlg::OnCbnSelendokComboStopbits) ON_BN_CLICKED(IDC_BUTTON_CLOSE, &CSCOMMDlg::OnBnClickedButtonClose)ON_BN_CLICKED(IDC_BUTTON_CLEARRECASENDA,&CSCOMMDlg::OnBnClickedButtonClearrecasenda)ON_BN_CLICKED(IDC_BUTTON_COUNTRESET,&CSCOMMDlg::OnBnClickedButtonCountreset)ON_BN_CLICKED(IDOK, &CSCOMMDlg::OnBnClickedOk)END_MESSAGE_MAP()// CSCOMMDlg 消息处理程序BOOL CSCOMMDlg::OnInitDialog(){CDialog::OnInitDialog();// 将“关于...”菜单项添加到系统菜单中。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

目录:1.建立项目2.在项目中插入MSComm控件3.利用ClassWizard定义CMSComm类控制变量4.在对话框中添加控件5.添加串口事件消息处理函数OnComm()6.打开和设置串口参数7.发送数据8.发送十六进制字符9.在接收框中以十六进制显示10.如何设置自动发送11.什么是VARIANT数据类型?如何使用VARIANT数据类型?在众多网友的支持下,串口调试助手从2001年5月21日发布至今,短短一个月,在全国各地累计下载量近5000人次,在近200多个电子邮件中,20多人提供了使用测试意见,更有50多位朋友提出要串口调试助手的源代码,为了答谢谢朋友们的支持,公开推出我最初用VC控件MSComm编写串口通信程序的源代码,并写出详细的编程过程,姑且叫串口调试助手源程序V1.0或VC串口通讯源程序吧,我相信,如果你用VC编程,那么有了这个代码,就可以轻而易举地完成串口编程任务了。

(也许本文过于详细,高手就不用看)开始吧:1.建立项目:打开VC++6.0,建立一个基于对话框的MFC应用程序SCommTest (与我源代码一致,等会你会方便一点);2.在项目中插入MSComm控件选择Project菜单下Add To Project子菜单中的Components and Controls…选项,在弹出的对话框中双击Registered ActiveX Controls项(稍等一会,这个过程较慢),则所有注册过的ActiveX 控件出现在列表框中。

选择Microsoft Communications Control, version 6.0,,单击Insert按钮将它插入到我们的Project中来,接受缺省的选项。

(如果你在控件列表中看不到Microsoft Communications Control, version 6.0,那可能是你在安装VC6时没有把ActiveX一项选上,重新安装VC6,选上ActiveX就可以了),这时在ClassView视窗中就可以看到CMSComm类了,(注意:此类在ClassWizard 中看不到,重构clw文件也一样),并且在控件工具栏Controls中出现了电话图标(如图1所示),现在要做的是用鼠标将此图标拖到对话框中,程序运行后,这个图标是看不到的。

3.利用ClassWizard定义CMSComm类控制对象打开ClassWizard->Member Viariables选项卡,选择CSCommTestDlg类,为IDC_MSCOMM1添加控制变量:m_ctrlComm,这时你可以看一看,在对话框头文件中自动加入了//{{AFX_INCLUDES() #include "mscomm.h" //}}AFX_INCLUDES (这时运行程序,如果有错,那就再从头开始)。

4.在对话框中添加控件向主对话框中添加两个编辑框,一个用于接收显示数据ID为IDC_EDIT_RXDATA,另一个用于输入发送数据,ID为IDC_EDIT_TXDATA,再添加一个按钮,功能是按一次就把发送编辑框中的内容发送一次,将其ID设为IDC_BUTTON_MANUALSEND。

别忘记了将接收编辑框的Properties->Styles中把Miltiline和Vertical Scroll属性选上,发送编辑框若你想输入多行文字,也可选上Miltiline。

再打开ClassWizard->Member Viariables选项卡,选择CSCommTestDlg类,为IDC_EDIT_RXDATA添加CString变量m_strRXData,为IDC_EDIT_TXDATA添加CString变量m_strTXData。

说明: m_strRXData和m_strTXData分别用来放入接收和发送的字符数据。

休息一会吧?我们天天与电脑打交道,要注意保重,我现在在单杠上做引体向上可以来40次,可我都32了,佩服吗?。

好了,再接着来,下面是关键了:5.添加串口事件消息处理函数OnComm() 打开ClassWizard->Message Maps,选择类CSCommTestDlg,选择IDC_MSCOMM1,双击消息OnComm,将弹出的对话框中将函数名改为OnComm,(好记而已)OK。

这个函数是用来处理串口消息事件的,如每当串口接收到数据,就会产生一个串口接收数据缓冲区中有字符的消息事件,我们刚才添加的函数就会执行,我们在OnComm()函数加入相应的处理代码就能实现自已想要的功能了。

请你在函数中加入如下代码:void CSCommTestDlg::OnComm(){// TODO: Add your control notification handler code hereVARIANT variant_inp;COleSafeArray safearray_inp;LONG len,k;BYTE rxdata[2048]; //设置BYTE数组 An 8-bit integerthat is not signed.CString strtemp;if(m_ctrlComm.GetCommEvent()==2) //事件值为2表示接收缓冲区内有字符{ ////////以下你可以根据自己的通信协议加入处理代码variant_inp=m_ctrlComm.GetInput(); //读缓冲区safearray_inp=variant_inp; //VARIANT型变量转换为ColeSafeArray型变量len=safearray_inp.GetOneDimSize(); //得到有效数据长度for(k=0;k<len;k++)safearray_inp.GetElement(&k,rxdata+k);//转换为BYTE型数组 for(k=0;k<len;k++) //将数组转换为Cstring型变量{BYTE bt=*(char*)(rxdata+k); //字符型strtemp.Format("%c",bt); //将字符送入临时变量strtemp存放 m_strRXData+=strtemp; //加入接收编辑框对应字符串}}UpdateData(FALSE); //更新编辑框内容}到目前为止还不能在接收编辑框中看到数据,因为我们还没有打开串口,但运行程序不应该有任何错误,不然,你肯定哪儿没看仔细,因为我是打开VC6对照着做一步写一行的,运行试试。

没错吧?那么做下一步:6.打开串口和设置串口参数你可以在你需要的时候打开串口,例如在程序中做一个开始按钮,在该按钮的处理函数中打开串口。

现在我们在主对话框的CSCommTestDlg::OnInitDialog()打开串口,加入如下代码:// TODO: Add extra initialization hereif(m_ctrlComm.GetPortOpen())m_ctrlComm.SetPortOpen(FALSE);m_ctrlComm.SetCommPort(1); //选择com1if( !m_ctrlComm.GetPortOpen())m_ctrlComm.SetPortOpen(TRUE);//打开串口elseAfxMessageBox("cannot open serial port");m_ctrlComm.SetSettings("9600,n,8,1"); //波特率9600,无校验,8个数据位,1个停止位m_ctrlComm.SetInputMode(1); //1:表示以二进制方式检取数据m_ctrlComm.SetRThreshold(1);//参数1表示每当串口接收缓冲区中有多于或等于1个字符时将引发一个接收数据的OnComm事件m_ctrlComm.SetInputLen(0); //设置当前接收区数据长度为0m_ctrlComm.GetInput();//先预读缓冲区以清除残留数据现在你可以试试程序了,将串口线接好后(不会接?去看看我写的串口接线基本方法),打开串口调试助手,并将串口设在com2,选上自动发送,也可以等会手动发送。

再执行你编写的程序,接收框里应该有数据显示了。

7.发送数据先为发送按钮添加一个单击消息即BN_CLICKED处理函数,打开ClassWizard->Message Maps,选择类CSCommTestDlg,选择IDC_BUTTON_MANUALSEND,双击BN_CLICKED添加OnButtonManualsend()函数,并在函数中添加如下代码:void CSCommTestDlg::OnButtonManualsend(){// TODO: Add your control notification handler code here UpdateData(TRUE); //读取编辑框内容m_ctrlComm.SetOutput(COleVariant(m_strTXData));//发送数据}运行程序,在发送编辑框中随意输入点什么,单击发送按钮,啊!看看,在另一端的串口调试助手(或别的调试工具)接收框里出现了什么。

如果你真是初次涉猎串口编程,又一次成功,那该说声谢谢我了,因为我第一次做串口程序时可费劲了,那时网上的资料也不好找。

开开玩笑,谢谢你的支持,有什么好东西别忘了给我寄一份。

最后说明一下,由于用到VC控件,在没有安装VC的计算机上运行时要从VC中把mscomm32.ocx、msvcrt.dll、mfc42.dll拷到Windows目录下的System子目录中(win2000为System32)并再进行注册设置,在主对话框中加入一个复选接钮,ID为IDC_CHECK_HEXSEND Caption: 十六进制发送,再利用ClassWizard为其添加控制变量:m_ctrlHexSend;在ClassView中为SCommTestDlg类添加以下两个PUBLIC成员函数,并输入相应代码;//由于这个转换函数的格式限制,在发送框中的十六制字符应该每两个字符之间插入一个空隔//如:A1 23 45 0B 00 29//CByteArray是一个动态字节数组,可参看MSDN帮助int CSCommTestDlg::String2Hex(CString str, CByteArray &senddata) {int hexdata,lowhexdata;int hexdatalen=0;int len=str.GetLength();senddata.SetSize(len/2);for(int i=0;i<len;){char lstr,hstr=str[i];if(hstr==' '){i++;continue;}i++;if(i>=len)break;lstr=str[i];hexdata=ConvertHexChar(hstr);lowhexdata=ConvertHexChar(lstr);if((hexdata==16)||(lowhexdata==16))break;elsehexdata=hexdata*16+lowhexdata;i++;senddata[hexdatalen]=(char)hexdata;hexdatalen++;}senddata.SetSize(hexdatalen);return hexdatalen;}//这是一个将字符转换为相应的十六进制值的函数//好多C语言书上都可以找到//功能:若是在0-F之间的字符,则转换为相应的十六进制字符,否则返回-1 char CSCommTestDlg::ConvertHexChar(char ch){if((ch>='0')&&(ch<='9'))return ch-0x30;else if((ch>='A')&&(ch<='F'))return ch-'A'+10;else if((ch>='a')&&(ch<='f'))return ch-'a'+10;else return (-1);}再将CSCommTestDlg::OnButtonManualsend()修改成以下形式:void CSCommTestDlg::OnButtonManualsend(){// TODO: Add your control notification handler code hereUpdateData(TRUE); //读取编辑框内容if(m_ctrlHexSend.GetCheck()){CByteArray hexdata;int len=String2Hex(m_strTXData,hexdata); //此处返回的len可以用于计算发送了多少个十六进制数m_ctrlComm.SetOutput(COleVariant(hexdata)); //发送十六进制数据}elsem_ctrlComm.SetOutput(COleVariant(m_strTXData));//发送ASCII字符数据}现在,你先将串口线接好并打开串口调试助手V2.1,选上以十六制显示,设置好相应串口,然后运行我们这个程序,在发送框中输入00 01 02 03 A1 CC等十六进制字符,并选上以十六进制发送,单击手动发送,在串口调试助手的接收框中应该可以看到00 01 02 03 A1 CC了。

相关文档
最新文档