绝对好用的串口程序
初次使用指南及stc-isp下载编程软件使用说明
STC89C52RC串口程序下载步骤说明以及实验板初次操作指南初次操作指南(请务必仔细看3次以上):拿到板子以后,拆开包装,按下面的步骤插好下面4个东西1. 插stc89c52单片机(缺口方向朝数码管),2. 插晶振(位置在电源开关的左上方,请看大图,有3个孔,但是只插两侧的两个孔,中间留空),3. 插9针串口线(一头连电脑串口一头连接实验板),4. 插usb电源线(注意:usb线要最后插入,并且最好是插电脑的后置usb接口,并且此时不要打开板子上的电源开关,如果发现电源指示灯亮了请关掉板子上的电源开关)下载烧录程序使用说明:简单的说就是1.关掉实验板的电源开关2.运行STC-ISP V391.exe(位置在“STC-ISP下载编程软件”这个目录里)3.选择单片机类型为stc89c524.点击“打开文件”按钮(选择一个hex文件,建议选”流水灯.hex”,位置:“例1-LED流水灯”目录里) 5.点击“DownLoad下载”按钮(这时候软件会提示“请给 MCU 上电..”,这就对了,否则请换一个有效的串口),6.打开实验板的电源开关当你打开实验板电源开关的一瞬间你会发现软件下面的白框提示下载信息了,这样就是ok了,恭喜你,烧写成功了,实验板开始了流水灯。
但是不要高兴得太早,请务必查看本文最后的实验板重点注意事项(务必请仔细阅读4次)这样才能防止人为的失误造成实验板的损坏。
如果下载失败请看下面的详细说明,一步一步的指导您。
以下是烧录程序的主要界面。
烧录过程非常简单,操作也非常简单。
图中红色的五个大数字就表示了整个过程。
简简单单的五步就可以了(实际上只需4步,)。
启动本烧录程序STC-ISP V391.exe后(在stc-isp下载编程软件.rar里面),第一步就是选择烧录器件。
本烧录软件支持S TC 全系列的51 单片机芯片,因此,第一步必须选择相对应的型号另外,“AP Memory”是指该芯片的内存大小和起止地址根据器件型号自动更改,不必理会。
STC12C5A60S2 双串口使用程序
STC12C5A60S2 双串口使用程序(已经验证成功)#include <stc12c5a60s2.h>#include "intrins.h"#define uchar unsigned char#define S2RI 0x01 // 串口2接收中断请求标志位#define S2TI 0x02 // 串口2发送中断请求标志位//================================================// 对于将P4.4、P4.5当做I/O口使用必须添加的定义||//================================================sfr p4sw=0xbb; // 需在主函数文件中做相应设置4、5、6为1(作为I/O口使用)/*sbit button1=P4^3;sbit button2=P4^4;sbit button3=P4^5;sbit button4=P4^6;*/页脚内容1uchar code temp1[]={" 白云:“我可是个名人”"};uchar code temp2[]={" 黑土:“啥名人啊,你就是个人名”"}; uchar code temp3[]={" 小崔:“诶,大叔大妈,你俩都冷静冷静”"}; uchar code temp4[]={" 观众:“哈哈哈哈”"};/*void delay_1ms(uchar ii) // 误差-0.018084490741us{unsigned char a,b;for(; ii>0; ii--)for( b = 18; b>0; b--)for( a = 152; a>0; a--);_nop_(); //if Keil,require use intrins.h}void delay1s(void) //误差-0.000000000125us{unsigned char a,b,c;for( c = 212; c>0; c--)页脚内容2for( b = 160; b>0; b--)for( a = 80; a>0; a--);_nop_(); //if Keil,require use intrins.h_nop_(); //if Keil,require use intrins.h}*///************************ 串口通信部分******************************uchar wj_uun = '!'; // 用于存放串口1接收的字符uchar wj_uun2 = '?'; // 用于存放串口2接收的字符void bt_uart_init() // 单片机双串口初始化{//SCON=0X50; // SM0=0 SM1=1 SM2=0 REN=1SM0 = 0; // 串口工作方式1:1位起始位,8位数据位,1位停止位允许串口接收SM1 = 1;REN = 1; // 允许串口接收页脚内容3//RI=1; // 接收标志位,0:正在接收1:接收完毕(如果RI=1就一直执行串口中断)TMOD = 0X20; // 定时器T1工作方式2TH1 = 0XFD; // 9600bit/s下的定时器初值TL1 = 0XFD;TR1 = 1; // 启动定时器T1EA = 1; // 开总中断ES = 1; // 开串行口中断S2CON = 0x50; // 串口2工作在方式1 10位异步收发S2SM0=0 S2SM1=1 S2REN=1允许接收BRT = 0XFD; // 9600bit/s下的独立波特率发生器初值AUXR = 0x10; // 辅助寄存器:0001 0000 ->BRTR=1:独立波特率发生器开始计数,S2SMOD=0:波特率不加倍,BRTx12=0:独立波特率每12个时钟计数一次IE2 = 0x01; // 开串口2中断0000 0001->ES2=1// AUXR1 = 0x10; // 0001 0000->S2_P4=1:UART2从P1口(RxD2:P1.2 TxD2:P1.3)切换到P4口(RxD2:P4.2 TxD2:P4.3) 否则默认都为P1口}/************** 串口1发送函数*****************/页脚内容4void s1_send_char(uchar dat) // 发送端(发送的是字符){SBUF = dat; // 将字符送入发送缓冲寄存器while(!TI); // TI为发送状态标志位,0:发送中1:发送结束TI = 0; // 手动清零标志位}void s1_send_string(uchar *pt) // 通过调用发送字符函数来发送字符数组{while(*pt != '\0'){s1_send_char(*pt++);}}/************** 串口2发送函数*****************/void s2_send_char(uchar dat2) // 发送端(发送的是字符){页脚内容5S2BUF = dat2; // 将字符送入串口2的发送缓冲寄存器while(!(S2CON&S2TI)); // 判断发送是否结束:S2CON.bit2 = 0:发送中1:发送结束S2CON &= ~S2TI; // 手动清零标志位,令S2CON.bit2 = 0}void s2_send_string(uchar *pt2) // 通过调用发送字符函数来发送字符数组{while(*pt2!='\0'){s2_send_char(*pt2++);}}/************** 串口1中断程序*****************/void bt_serial_1() i nterrupt 4 // 中断编号4为串行口1中断{if(RI) // 接收标志位,0:正在接收1:接收完毕(如果RI=1就一直执行中断){页脚内容6RI = 0; // 同样需要手动清零wj_uun = SBUF; // 将接收缓冲器接收的字符送入变量中}}/************** 串口2中断程序*****************/void bt_serial_2() interrupt 8 // 中断编号8为串行口2中断{if(S2CON&S2RI) // 接收标志位: S2CON.bit1 = 0:正在接收1:接收完毕(如果RI=1就一直执行中断){S2CON &= ~S2RI; // 同样需要手动清零,令S2CON.bit1 = 0wj_uun2 = S2BUF; // 将串口2接收到的字符送入变量中}}页脚内容7void main(void){bt_uart_init(); // 串口初始化p4sw = 0x70; // 0111 0000 对应的4、5、6脚设置成功通用I/O口while(1){/*if(wj_uun != '!') // 串口1接收{s1_send_char(wj_uun); // 串口1发送wj_uun = '!';}*/if(wj_uun2 != '?') // 串口2接收{s2_send_char(wj_uun2); // 串口2发送wj_uun2 = '?';}}页脚内容8}页脚内容9。
Linux下 QT串口与51单片机通信实例
QT串口与51单片机通信通过这个小例子主要想说明QT怎样进行线程编程的思想,实例如图,好吧,下面是过程上一个例子我们采用的是手工编写代码的方法,这个例子我们来玩一下designer,其实Qt4己经把界面与功能分开了,用designer来进行界面设计,再手工编写一些功能,如信号与槽,这样开发效率会大大提高,呵呵,开一个终端,输入/usr/local/Trolltech/Qt-4.5.1/bin/designer,如果第一次打开出现字体不对,可以打开qtconfig进行一些相关配置,打开后我们新建一个Main Window,在右边的属性框中设置一下界面大小,1.我ARM板的LCD大小为320x240,所以我也设为320x240;2.左边是一些我们常用的窗口部件,这里我们用到一个lable标签来做显示,再放几个pushButton按钮,在属性objectName重新更改它的名字,改为我们记得的,这样在写功能时记得哪个按钮叫什么名字,对于一个初学QT的人来说,很想知道每一个部件到底有什么信号和槽,别急,我们可以这样来看,选中一个lable,按F4,再点击lable拖动出现接地符号时松开,弹出编辑信号与槽,这时左边列出的是信号,右边为槽,这里我们不用配置连接,等下我们再手工写,3最后我们用到一个lable标签和三个pushButton按钮,并命名为dis_label、writeButton、readButton、closeButton,然后保存为mainwindow.ui,这样designer就完工了,呵呵..4.下面我们编写一个线程,用于管理串口收发工作,它不涉及到任何界面,只做好它的本份工作就得了,编写一个thread.h文件gedit thread.h,#ifndef THREAD_H#define THREAD_H#include<QThread>class Thread:public QThread{Q_OBJECTpublic:Thread();char buf[128];volatile bool stopped;volatile bool write_rs;volatile bool read_rs;protected:virtual void run();};#endif我们定义一个Thread类,它继承于QThread,看到只设有一些变量和一个run函数,virtual表示为虚函数,你也可以去掉,加上去会增加一些内存开销,但提高了效率,对于这个小程序是看不出什么效果的,volatile这个大家都懂了吧,就是防止偷懒,呵呵,5.再看看thread.cpp#include"thread.h"#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>#include <termios.h> //串口用到的#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <strings.h>#define BAUDRATE B9600//#define RS_DEVICE "/dev/ttyS0" //串口1#define RS_DEVICE "/dev/ttySAC1" //串口1Thread::Thread(){} //析构void Thread::run() //这就是线程的具体工作了int fd,c=0,res;struct termios oldtio,newtio; //termios结构是用来保存波特率、字符大小等printf("start...\n");fd=open(RS_DEVICE,O_RDWR|O_NOCTTY); //以读写方式打开串口。
使用串口的流程
使用串口的流程介绍串口是一种用于在计算机和外部设备之间进行数据传输的通信接口。
它是一种一对一的全双工通信方式,可以实现数据的收发。
本文将介绍使用串口进行数据通信的基本流程。
步骤使用串口进行数据通信的流程一般包括以下几个步骤:1.打开串口:首先需要打开串口以建立与外部设备的连接。
在打开串口之前,需要先确定要使用的串口号、波特率、数据位、停止位和校验方式等参数。
2.配置串口参数:在打开串口后,需要根据实际需求配置串口的各种参数。
可以通过串口的配置接口来设置波特率、数据位、停止位和校验方式等参数。
3.发送数据:配置完串口参数后,就可以向外部设备发送数据了。
可以通过串口的发送接口将数据发送给外部设备。
在发送数据之前,需要将要发送的数据准备好,并将其转换成适合串口发送的格式。
4.接收数据:在发送完数据后,可以通过串口的接收接口来接收外部设备发送的数据。
可以通过串口的接收缓冲区来获取接收到的数据。
5.处理数据:接收到数据后,还需要对其进行处理。
可以根据实际需求对接收到的数据进行解析、处理或显示等操作。
6.关闭串口:在完成数据通信后,需要关闭串口以释放资源。
可以通过串口的关闭接口来关闭串口。
注意事项在使用串口进行数据通信时,还需要注意以下几个事项:•串口参数配置要与外部设备保持一致:在配置串口参数时,需要与外部设备的参数保持一致,否则可能会导致通信失败。
•数据格式要一致:在发送和接收数据时,要确保数据的格式一致。
可以约定好数据的格式,并在发送和接收时进行相应的转换。
•错误处理:在使用串口进行数据通信时,难免会出现一些错误。
因此,需要在程序中加入错误处理的代码,以便及时发现并处理错误。
•建立通信协议:在使用串口进行数据通信时,建议制定一套通信协议,包括数据的格式、指令的定义等。
这样可以更好地进行数据交换和数据处理。
示例代码下面是一个使用Python语言进行串口数据通信的示例代码:import serial# 打开串口ser = serial.Serial('COM1', 9600, timeout=1)# 配置串口参数ser.bytesize =8ser.stopbits =1ser.parity ='N'# 发送数据ser.write(b'Hello World')# 接收数据data = ser.readline()print(data)# 关闭串口ser.close()总结使用串口进行数据通信时,需要按照一定的流程进行操作。
基于WinCE的串口应用程序编写及测试
基于WinCE的串口应用程序编写及测试摘要:串口在嵌入式系统与PC通信时可以起到非常重要的作用,但是对于串口应用程序的测试却因为种种原因非常麻烦。
详细论述了如何对串口应用程序进行测试。
关键词:WinCE;串口;串口应用程序测试串口也称为串行接口或串行通信接口,在实际嵌入式学习或开发中可以深刻地体会到串口在开发板与PC通信过程中起了很好的作用。
然而编写和测试串口应用程序并非那么容易,本文将结合实际WinCE与PC的特点讲述如何实现对串口的操作。
1串口应用程序的编写1.1WinCE下串口通信简介在WinCE下运行的程序,一般都是在Windows环境下开发,再通过USB线或U盘等下载到嵌入式设备中运行的。
文中使用.NET Compact Framework (简称.NET CF),并使用C#进行串口应用程序开发。
由于在.NET CF下提供了专门的SerialPort类来操作串口,所以开发WinCE下的串口应用程序相对来说会比较容易。
1.2串口应用程序的编写在串口应用程序中,“发送区”文本框名为txtSend,“接收区”文本框名为txtRecv,项目当中添加了一个SerialPort控件,名为port,“发送”按钮名为btnSend。
下面给出接收和发送部分的主要代码。
port控件中DataReceived事件(用于接收)对应的处理函数如下:void port_DataReceived(object send,SerialDataReceivedEventArgs e){int bytesToRead = port.BytesToRead;byte[] arr = new byte[bytesToRead];port.Read(arr,0,bytesToRead);string str = Encoding.Default.GetString(arr,0,bytesToRead);txtRecv.Text += str;}“发送”按钮单击事件对应的处理函数如下:void btnSend_Click(object send,EventArgs e){byte[] arr = Encoding.Default.GetBytes(txtSend.txt);port.Write(arr,0,arr.Length);}总体来说,使用C#开发串口应用程序非常简单、方便。
在VS(VC)2010中使用MSComm控件实现串口通信的详细步骤
// TODO: 在¨²此ä?添¬¨ª加¨®控?件t通ª¡§知a处ä|理¤¨ª程¨¬序¨°代䨲码? }
void CCommTestDlg::OnBnClickedButtonOpen() { // TODO: 在¨²此ä?添¬¨ª加¨®控?件t通ª¡§知a处ä|理¤¨ª程¨¬序¨°代䨲码? }
10. 添加关闭串口按钮的消息响应函数 void CCommTestDlg::OnBnClickedButtonClose() { // TODO: 在此添加控件通知处理程序代码 m_mscomm.put_PortOpen(FALSE);//关闭串口 AfxMessageBox(_T("串口 1 已关闭")); } 11. 添加发送按钮消息响应函数 void CCommTestDlg::OnBnClickedButtonSend() { // TODO: 在此添加控件通知处理程序代码 UpdateData(true); //读取编辑框内容 m_mscomm.put_Output(COleVariant(m_EditSend));//发送数据 m_EditSend.Empty(); //发送后清空输入框 UpdateData(false); //更新编辑框内容 } 12. 接收数据 void CCommTestDlg::OnCommMscomm1() { // TODO: 在此处添加消息处理程序代码 static unsigned int cnt=0; VARIANT variant_inp; COleSafeArray safearray_inp; long len,k; unsigned int data[1024]={0}; byte rxdata[1024]; //设置 BYTE 数组 CString strtemp; if(m_mscomm.get_CommEvent()==2) //值为 2 表示接收缓冲区内有字符 {
如何用DELPHI开发串口通信程序
如何用Delphi开发串口通信程序Delphi是新一代可视化开发工具,它具有功能强大、简便易用和代码执行速度快等特点,Delphi系列开发工具在国际各媒体上曾获得过三十多项大奖,是全球公认的快速应用开发工具技术的先驱者,他越来越在构架企业信息系统方面发挥着重要作用。
它的功能很强大,但在对串口通信的控制上Delphi的帮助文档和其他书籍中很少提及,可这是在开发应用系统时会经常遇到却又令人头痛的事情。
下面介绍三种解决方案,以实现接收和发送数据的功能。
一、使用ActiveX控件由于Delphi中没有串口控件可用,所以首先需要把ActiveX控件MSCOMM加到元件选项板上。
这是一个非常好的控件它不仅能对串口进行操作,而且还可以对Modem进行控制。
下面结合一个具体的实例来说明如何用MSCOMM控件开发出串口通信程序。
创建一个Communication.dpr工程,把窗体的Name属性变为CommForm,将标题改为The Communication Test,选择File/Save As将新的窗体存储为CommFrm.pas,接下来参照图1和图2将控件添加到主窗体中。
图1图2由图1和图2我们可以看出,通过设置页可选定进行数据传输的通信端口和端口的波特率、奇偶校验、数据位和停止位,通信时每传输一个字符都将触发响应事件,在通信页“传输显示”位置可看到当前正在进行传输的数据。
同时当出现回车换行符时将整行内容显示在memDisplay新的一行中,而全部接收的内容还将存在一个文件中。
部分源代码如下:变量说明varCommForm:TCommForm;ss:string;savef,readf:file of char;i,j:longint;初始化procedure TCommForm.FormCreate(Sender:TObject);beginmport:=1;mscomm.settings:='9600,n,8,1';mscomm.inputlen:=1;mscomm.inbuffercount:=0;mscomm.portopen:=true;ss:='';i:=0;j:=0;assignfile(savef,'save1');rewrite(savef);assignfile(readf,'read1');reset(readf);end;设置确定procedure TCommForm.btnConfirmClick(Sender:TObject); beginif mscomm.portopen thenmscomm.portopen:=false;mport:=strtoint(edtCommport.text); mscomm.settings:=edtCommsetting.Text;end;传输事件procedure TCommForm.MSCommComm(Sender:TObject); varfilenrc:char;buffer:variant;s1:string;c:char;begincase mEvent ofcomEvSend:beginwhile not(eof(readf))dobeginread(readf,filenrc);mscomm.output:=filenrc;j:=j+1;lblDisplay.caption:=inttostr(j);if mscomm.outbuffercount>=2thenbreak;end;end;comEvReceive:beginbuffer:=mscomm.Input;s1:=buffer;c:=s1[1];ss:=ss+c;i:=i+1;lblDisplay.caption:=c+inttostr(i);write(savef,c);if(c=chr(10))or(c=chr(13))thenbeginlblDisplay.caption:='cr'+inttostr(i);memDisplay.lines.add(ss);ss:='';end;end;end;end;当然还有许多串口控制的ActiveX控件,有控件用是方便,但是是否说没有控件就不能用Delphi本身解决问题呢。
必看USB转串口线驱动程序安装KeilC51安装和使用STC-ISP下载软件
实验一:单片机调试软件安装和下载软件的安装与下载实验内容与要求:1、学会取电线和串行口232 线的物理连接。
2、转232串口(H340驱动)设备驱动程序安装,串口下载软件V38A的安装。
3、学会利用V38A下载软件将事先准备好的文件烧写入89C52单片机芯片,观察实验结果。
4、撰写实验报告,并说明观察到的实验结果实验讲义:一、学会取电线和串行口232 线的物理连接1、将方口取电方口一头连接入实验班方口母座,另一头接电脑,见下图蓝方框转232串口线,9芯一头接实验班232母座,另一头接电脑,见下图红色方框二、转232串口(H340驱动)设备驱动程序安装连接好以后。
会出现,下图安装提示选择从列表或指定位置安装,选择下一步会出现如下图提示选择,在搜索中包括这个位置,点击浏览,会出现浏览文件窗口,如下图点击右侧树形结构,将“+”展开,选择转串口线驱动文件夹下面的R340文件夹,点击确定。
下面将返回“找到新硬件向导”窗口如下图。
选择下一步。
转232驱动程序安装完成。
方口不需要安装驱动。
下面在桌面右键单击我的电脑,在弹出的菜单中,选择”管理”,如下图在出现的计算机管理界面中,展开左侧的目录,选择,“系统工具”下面的“设备管理器”,在右侧窗口中,展开“端口”,出现(5),(注意5只是随机的,会根据你插入设备的情况而改变,也有可能是1 3)双击(5),出现下面“(5)属性”窗口选侧“端口设置”,看到每秒位数为9600(注(5)属性只做查看用,它提供了两个信息,通信口为5,每秒位数为9600,这在后面下载程序的时候需要用到)三、学会利用V38A下载软件将事先准备好的文件烧写入89C52单片机芯片在文件夹中找到,并打开“3.8a非安装版”文件夹找到V38A,双击鼠标左键运行它。
出现下面窗口在1 中选择“89C52”,3中选择5, 中选择“9600”然后点击打开文件然后找到“F:\\软件安装\烧写芯片-笔记本电脑或无并口新买电脑使用\3.8a非安装版\键盘数码管蜂鸣器测试程序”文件夹下面的4x4键盘扫描文件夹,点击打开。
存储器24C08的串口读取与写入程序
输速率这两种异步传输必要的两种参量进行约定,
以简要概括如图3所示。
在实际通讯过程:一蕊蠡嘉一瓢矗矗孟面茁一葡蕊云…矗五-(i;每;……赢己蕊;帚j妊it面;菥一:
中双方依约定各;吐l LL Lj L』U Lj Lj LJ I[u Lj Lj Lj l Lj L』Lj LJ:::::::::L』l l U U LJ L』LJ LJll;
24C08只能一次性写入长度不超过16字节的数
24C08的SDA、SCL两端,这是12C总线中仅
据;而24C08的连续读取却是没有任何限制的。
须的两条数据通道。一般使用中都是需要通过外
可以无限地循环下去。
接两只上拉电阻
:
寻址数据 寻址地址址低八位敷据(t字节)
;(oooooooo)
数据('5字节)数据(16字节)
l p 嚣工
图1 16 2010 V01...10
万方数据
一¨¨lf…. —————————————i沥洒一DN制作天地嬲 F'乏口JE亡Ts潮
实际电路构成。图2是24C08A的引脚图和外
方的时钟将不可能做到绝对的统一。总是会有一定差
观图。
异,主要包括中心频率的差异与时钟频率的漂移。电
子振荡器的频率虽然非常非常稳定,但是随环境气温
a
d {8 d {8 引蛇
EQU p2.0 EQU p2.1 EQU 08H EOU 09H
p37=p3‘7
i:=
p36=p3‘6
0000H
姚蚓删删洲蝴9吣巾帅
start
:===一==总线启动
i2c—start:
将导致双方RS232接口数据传送不能正常进行
setb
SCl
和24C08数据写入出错。那选择多少的传输速
单片机虚拟串口的使用方法
单片机虚拟串口的使用方法单片机的虚拟串口是一种非常常见的通信方式,它利用串口模拟的方式来进行数据的传输。
虚拟串口能够让单片机和计算机之间实现数据的传输和通讯,从而方便了开发者的开发工作,更好地实现了单片机与计算机的互联互通。
虚拟串口的使用方法如下:1. 确定虚拟串口的通信参数在使用虚拟串口前,首先要确认好虚拟串口的通信参数。
一般来说,包括波特率、数据位、停止位、奇偶校验等参数。
这些参数需要与单片机的串口通信参数相对应,否则通信将会失败。
2. 安装虚拟串口驱动程序在计算机上进行单片机项目的开发时,需要先安装对应的虚拟串口驱动程序。
常用的虚拟串口驱动程序有VirtualSerialDriver、FTDI等。
在安装驱动程序时,需要根据计算机的操作系统版本,选择对应的驱动程序版本。
3. 编写单片机程序在单片机中涉及到虚拟串口的程序中,需要先初始化串口通信参数,并打开串口,然后循环等待从串口接收到的数据。
在循环中,可以使用串口发送数据给计算机,或者从计算机接收数据。
4. 在计算机上打开虚拟串口设备在单片机程序中设置好虚拟串口的通信参数后,需要在计算机上打开虚拟串口设备。
在计算机的设备管理器中,能够看到已经成功安装的虚拟串口设备。
打开对应的串口,设置对应的通信参数即可。
5. 测试通信在单片机和计算机之间建立虚拟串口连接后,需要进行测试,确保串口通信正常。
可以先从单片机发送数据给计算机,观察是否能够在计算机上接收到数据;然后,可以在计算机上发送数据给单片机,观察单片机是否能够接收到数据。
如果测试结果正确,就可以通过这个虚拟串口通讯了。
总的来说,单片机虚拟串口的使用是比较简单的,只需设置好通信参数,安装对应的驱动程序,然后编写好单片机程序,最后进行测试即可。
虚拟串口通信的优点是方便快捷,能够更好地连接单片机与计算机,方便数据传输和控制。
因此,在实际应用中,虚拟串口通信被广泛应用于各种单片机项目开发中。
STM32 USB转串口程序解读
的三极管_config.h 中有下列定义:
#define RCC_APB2Periph_GPIO_DISCONNECT
RCC_APB2Periph_GPIOD
它将这个设为端口 D。所以这个 USB 断开引脚到底是由谁来控制的还未确定。这里留下一
接下来配置 PA10 为输入浮空,配置 PA9 为 PP 输出。这两个脚是串口。这个是正确的。我 们几孚所有的板子都用 UART0,它就是这两个脚的。 至此这个部分结束了。
2
下面再来看第 2 个函数 Set_USBClock()-------两句话:
RCC_USBCLKConfig(RCC_USBCLKSource_PLLCLK_1Div5); /* Enable USB clock */ RCC_APB1PeriphClockCmd(RCC_APB1Periph_USB, ENABLE); 72M 除 1。5=48 然后允许 USB 的时钟。 这个要看一下数据手册。从数据手册比较好理解。 它是直接从 PCLK 中除一个数,可以除 1 也可以除 1.5..这段还是比较好理解的。
然后,我们要允许 GPIOA,GPIOB 和串口的时钟。因为我们只用到了这几个资源。当然 USB
是另外的,我想总会在某个地方允许的。
下面这个就不好理解了:
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIO_DISCONNECT, ENABLE);这个叫允许 USB
断开线。从原理图上看好象是 PE7 来控制的。因为 PE7 连接到一个 DP+的一个上拉电阻控制
pInformation = &Device_Info; 这个是设备资料部分,里面的全部变量,静态的。 pInformation->ControlState = 2; pInformation 是一个指向 Device_Info 的指针。不知为什么要这样大费周折。不可以直接这 样写吗:
KEIL中如何用虚拟串口调试串口程序
KEIL中如何用虚拟串口调试串口程序以前没接触过串口,一直都以为串口很复杂。
最近在做一个新项目,用单片机控制GSM模块。
单片机和GSM模块接口就是串口。
调试完后觉得串口其实很简单。
“不过如此”。
这可能是工程师做完一个项目后的共同心态吧。
下面详细介绍下如何用虚拟串口调试串口发送接收程序。
需要用到三个软件:KEIL,VSPD XP5(virtual serial ports driver xp5.1虚拟串口软件),串口调试助手。
1、首先在KEIL里编译写好的程序。
2、打开VSPD,界面如下图所示:左边栏最上面的是电脑自带的物理串口。
点右边的add pair,可以添加成对的串口。
一对串口已经虚拟互联了,如果添加的是COM3、COM4,用COM3发送数据,COM4就可以接收数据,反过来也可以。
3、接下来的一步很关键。
把KEIL和虚拟出来的串口绑定。
现在把COM3和KEIL绑定。
在KEIL中进入DEBUG模式。
在最下面的COMMAND命令行,输入MODE COM3 4800,0,8,1(设置串口3的波特率、奇偶校验位、数据位、停止位,打开COM3串口,注意设置的波特率和程序里设置的波特率应该一样)ASSIGN COM3 SOUT(把单片机的串口和COM3绑定到一起。
因为我用的单片机是AT892051,只有一个串口,所以用SIN,SOUT,如果单片机有几个串口,可以选择S0IN,S0OUT,S1IN,S1OUT。
)4、打开串口调试助手可以看到虚拟出来的串口COM3、COM4,选择COM4,设置为波特率4800,无校验位、8位数据位,1位停止位(和COM3、程序里的设置一样)。
打开COM4。
现在就可以开始调试串口发送接收程序了。
可以通过KEIL发送数据,在串口调试助手中就可以显示出来。
也可以通过串口调试助手发送数据,在KEIL中接收。
这种方法的好处是不用硬件就可以调试。
这是网上一篇文章介绍的方法,联系我实际的使用做了整理。
串口调试助手使用说明
串口调试助手使用说明为简单明了,有些不言自明的功能不作介绍。
1 串口调试助手1.1 设置串口参数:串口号:1-16波特率:600-256000,>115200 时需要硬件支持。
2 接收区/键盘发送区2.1 接收数据a) 设置串口参数b) 如果要按十六进制形式显示接收数据,将十六进制显示选项选中。
c) 点击打开/关闭串口区中的打开串口按钮。
2.2 显示接收数据的长度因某些限制,显示接收数据的文本不能太长,所以当显示文本长度快达到62K 时会自动将显示文本删减到32K,此时文本可保留32K 的字符或约10K 的十六进制数据显示。
2.3 在键盘上发送英文字符a)在接收区/键盘发送区的输入框中用鼠标点一下。
b)在键盘按下按键立刻发送。
在这里不能发送回车换行,也不能发送汉字,若要发送请在单字符串发送区发送。
3 发送数据可以发送单字符串,多字符串(字符串序列)或直接在键盘上发送英文字符。
有两种发送数据格式,一种是普通的字符串,另外一种是十六进制数据即HEX 格式数据。
发送HEX 格式数据时要在字符串输入区中输入HEX 格式字符串,并且要将相应区内的十六进制发送选项选中。
例:HEX 格式数据字符串12 34 AB CD FF3.1 单字符串发送区3.1.1自动发送,自动发送周期:此项功能可以每隔一段时间反复地自动发送输入框中的数据,点击自动发送按钮后即启动自动发送功能。
自动发送周期最大为65535mS。
3.2 多字符串发送区在多字符串发送区可以发送一个字符串,或者自动地、依次发送所有的字符串。
请把鼠标移到“接收区/键盘发送区”和“多字符串发送区”之间,当鼠标形状发生变化时按下鼠标器的左键不松开,然后移动鼠标,将“多字符串发送区”的宽度调宽一些,让“间隔时间”显露出来。
3.2.1发送一个字符串a) 输入字符串。
b) 如果要发送16 进制数据, 要先在字符串后的HEX 选项框中打上对勾。
c) 点击发送按钮。
BACnet MSTP开发的入门篇
工欲善其事,必先利其器。
首先,给大家介绍BACnet MS/TP开发的入门篇--工具准备篇。
1 串口调试程序因为在BACnet MS/TP开发中,开发者要时刻关心BACnet数据包的状态,在这里仅给大家推荐4款串口监视调试软件。
1.1 串口调试助手这个工具很常见,在网络上可以搜索到很多,笔者用的是图标为两把剑的那款,在BACnet 下载页面中,您可以找到该工具。
该工具用来确认PC和设备的串口状态必备,因为很多时候,大家不太好区分哪个是COMPortxx,所以用这个小工具一下就可以试探出来。
1.2 串口监听软件笔者使用的是图标为一把鹤嘴钳的小工具,工具很小,但是它是从驱动层抓取数据包,有时候条件简单的情况下,可以快速分析出通讯错误来。
该工具在BACnet下载页面中也有提供。
1.3 Device Monitoring Studio笔者后来在网上找到了该软件,感觉功能很强的,也是在驱动层直接抓取数据包,但是他反馈的数据包之间的时间间隔很准确,可以在BACnet协议开发的后期,调系统性能阶段使用。
该工具在BACnet下载页面中也有提供,不过是30天的试用版。
1.4 COMWATCH这个工具是把好剑,不过是一把双刃剑,不便的原因是他在DOS下运行,要求笔者有两台电脑才适用,不过往往越简单越能见真理,分析起数据包的时序来,感觉还真是非它莫属。
在后期调时序阶段必不可少,由于版权问题,该软件咱不提供下载服务。
2 数据包仿真软件什么样的BACnet MS/TP数据包是准确的符合BACnet MS/TP协议标准的数据包,这个是初级开发人员时常困惑的问题,笔者在初步接触BACnet的时候,也是无从下手,好在笔者开发的条件比较充足,手上不仅有一个标准的BACnet MS/TP DDC,还有一些前辈已经摸着石头趟了一番BACnet MS/TP开发的浑水,并且留下了一批枪支弹药。
2.1 VTSVTS是BACnet开发认证的官方测试工具,功能很好很强大,但是由于文档有限,很多功能都需要慢慢挖掘,不过在后续章节中,笔者会给大家详细介绍VTS,并以图式的方式给大家一个VTS使用的快速入门。
51单片机控制串口热敏打印机程序
#include<reg52.h> //51头文件#include<string.h> //字串处理函数头文件//#include<math.h>#define uchar unsigned charsbit BUSY=P3^4; //并口打印机的BUSY,串口打印机的CTS/**************************单字节打印函数************************************/void print(unsigned char ch){while (BUSY==1) //busy为1时,等待,如数据量小,可不判BUSY{;}SBUF= ch; //busy=0,将数据送到P1口while(TI==0) //当TI为0时,表示数据未发送完成,一直等待,直到为1{;}TI=0; //将TI清0}/*********************串口初始化**********************************************/void com_init(void){TH1=0XFD; //波特率值装入计数器,9600BPSTMOD=0X20; //串口设置,定时器1,设为方式2,8位自动重载,用于产生波特率SCON=0X50; //串口发送方式1,8位数据位,1位停止位TR1=1; //开启定时器1}/**********************字符打印函数********************************************/ void print_chs(uchar ch[]){uchar i;for(i=0;i<strlen(ch);i++) //应用到字串处理函数,故须调用print(ch[i]);}/*************************汉字打印例程***************************************/void hanzitest(void){//uchar i;print(0x1b);print(0x40); //初始化打印机print(0x1b);print(0x38);print(0x00); //调用16*16点阵汉字,24点阵为24*24print(0x1b);print(0x31);print(6); // 设置后面的内容行间距为6点,默认为n = 3;print_chs("操作人:\n");print(0x0d);print_chs("仪器编号:\n");print(0x0d);print_chs("操作日期:2015年3月12日\n");print(0x0d);print_chs("工序四时间:\n");print(0x0d);print_chs("工序三时间:\n");print(0x0d);print_chs("工序二时间:\n");print(0x0d);print_chs("工序一时间:\n");print(0x0d);/*for(i=0;i<1;i++) //搋环打印5次{print(0x1b);print(0x38);print(0x00); //调用16*16点阵汉字,24点阵为24*24//print(0x1b);print(0x38);print(0x04); //调用12*12点阵汉字,24点阵为24*24print(0xc8);print(0xd9);print(0xb4);print(0xef); //打印数据“荣达”print(0x0d); //回车}*/}/*************************左限例程**********************************/void zuoxian(void){print(0x1b);print(0x40); //初始化打印机print(0x1b);print(0x38);print(0x00); //调用16*16点阵汉字,24点阵为24*24//print_chs("左限测试:\n");//print_chs("12345678901234567890123456789012");//标尺print(0x1b);print(0x6c);print(0x06); //ESC I 命令,左限为6//print(0x1b);print(0x69);print(1); //设置下面的文字为反白打印。
VBA的妙用:串口通讯程序与EXCEL相结合
VBA的妙用:串口通讯程序与EXCEL相结合1 VBA简介Visual Basic的应用程序版(VBA)是Microsoft公司长期追求的目标,使可编程应用软件得到完美的实现,它作为一种通用的宏语言可被所有的Microsoft 可编程应用软件所共享。
在没有VBA以前,一些应用软件如Excel、Word、Access、Project等都采用自己的宏语言供用户开发使用,但每种宏语言都是独立的,需要用户专门去学习,它们之间互不兼容,使得应用软件之间不能在程序上互联。
拥有一种可跨越多个应用软件,使各应用软件产品具有高效、灵活且一致性的开发工具是至关重要的。
VBA作为一种新一代的标准宏语言,具有上述跨越多种应用软件并且具有控制应用软件对象的能力,使得程序设计人员仅需学习一种统一的标准宏语言,就可以转换到特定的应用软件上去,程序设计人员在编程和调试代码时所看到的是相同的用户界面,而且VBA与原应用软件的宏语言相兼容,以保障用户在代码和工作上的投资。
有了VBA以后,多种应用程序共用一种宏语言,节省了程序人员的学习时间,提高了不同应用软件间的相互开发和调用能力。
2 串口通讯程序简单的串口通讯程序一般是先由上位机向下位机发送读(write)或写(read)数据命令,然后等待下位机应答;下位机接受到命令之后,首先要对数据命令进行校验,对于符合校验约束的命令下位机会将相应的数据回复到上位机,对于不符合校验约束的命令下位机或将其抛弃或回复错误信息;上位机接收到下位机的响应之后,首先要对接收到的回复信息进行校验,对不符合校验约束的数据进行异常处理,对符合校验约束的信息进行解码,解码之后的信息便是上位机从下位机获得的有效信息了。
上位机向串口发送读命令之后需要等待下位机应答并读取回复信息,常用的等待有3种方式:1)轮询式上位机向串口发送读命令之后一直等待下位机应答,通讯程序处于一个等待循环中。
优点:速度快、误码率低(几乎不存在误码)。
虚拟串口软件使用
在很多应用环境中,终端设备的管理、通信等接口普遍为RS-232、RS-485或RS-422接口方式,这些接口通常用于本地数据通信。
随着通信网络建设的飞速发展和以太网技术的普及,更多跨网、跨地区的数据通信需求逐渐增加,传统的RS-232/485/422等通信方式已无法适应新的用户需求和传输网络环境,但是大量的工控设备、复式终端等仍然采用串口通信方式,并且会继续使用很长时间,为了使这些基于串口的设备能够适应新的网络环境,我们开发了TCP/IP转RS-232/485/422串口服务器设备,这样既能够方便的解决串口终端设备的网络通信问题,又极大程度的保护了用户的原有投资。
1.1 RS232/485/422终端通信环境如果用户的终端设备提供RS-232/485/422通信接口,需要通过以太网连接到控制中心的应用计算机上,可以在串口终端设备端选配NP801串口服务器,中心控制计算机安装虚拟串口驱动程序,网络拓扑如图:图中串口终端设备通过RS-232/485/422与NP801连接,NP801把来自终端的串口数据转换为基于TCP/IP的以太网数据发送到网络中。
在控制中心,应用计算机通过100Base-T接口连接到以太网交换机,接收来自网络的串口数据,把接收到的远端串口数据包,通过虚拟串口驱动程序转换为计算机上的虚拟串口,所以计算机上的应用软件就可以像操作实际串口一样直接访问虚拟串口,软件上无需任何修改。
1.2 Data Socket应用方式NP801串口服务器,提供标准的Socket API 接口,用户程序可以通过Socket方便的访问NP801上的串口数据,能够根据自己的实际网络环境开发相应的软件,使整个项目的设计和管理更加简单易行。
NP801串口服务器的Data Socket提供TCP Server、TCP Clint和UDP 三种访问方式,适用于点对点、点对多点、组播等多种网络结构,使串口设备的数据访问方式更加灵活、简单。
对CAT5171数字电位计的串口通信控制的程序
1.对CAT5171数字电位计的串口通信控制的程序:测量电压时,电压信号通过CAT5171数字电位计,需要通过C8051F410串口通信对其进行控制。
SMBus数据发送程序段:#include”smbus.h”#define S_AD_R 0x61 //#define S_AD_R 0x61 //void cofig(){//看门狗禁止WDTCN=0x07;WDTCN=0xDE;WDTCN=0xAD;SFRPAGE=0x0f;//交叉开关配置,SMBUS配置到P0.6和0.7上XBR0=0x01; //UART TX0,RX0连到引脚P0.4和P0.5XBR1=0x00;XBR2=0x40;XBR3=0x01;//引脚输出配置SFRPAGE=0x0F; //特殊功能寄存器P0MDOUT=0x00;PIMDIN=0Xff;//晶振配置,采用内部晶振8分频SFRPAGE=0x0F;CLKSEL=0x00;OSCXCN=0x00;OSCICN=0x84;}V oid main(){char i;config();smbus_cfg(0x40,0xf1,0x70);// Smbus使能,自身从机地址为0x70/2,广播寻址禁止EA=1; //打开全局中断smbusMasterStar(); //主机发送起始位while(1);}V oid smbusint() interrupt //SMBUS中断,只考虑关键状态处理,以便调试{SFRPAGE=0x00;If(SMB0STA==0x80){SMB0DAT=S_AD_W;K=1;STA=O; //将STA清0,若不清0 ,将一直为重发状态}If(SMB0STA==0x28||SMB0STA==0x18){If(k>=7)STO=1; //数据发送完毕,将STO置1,结束发送If(k==2)SMB0DAT= ;//发送数据K++;}If(SMB0STA==0x10){SMB0DAT=0x6e;STA=0;//若处于重发状态,则将从机地址和写控制重新发送,并将STA清0 }SI=0;}V oid main(){Uchar t=0;char I;config();smbus_cfg(0x44,0xf1,0x6f); //SMBUS使能,若是从机则总线时钟由主机决定EA=1; //打开全局中断K=0;While(1){If(t!=k){t=k; //当一次中断处理完毕时,k自增一次,从而t!=k;}}}V oid smbusint()interrupt7{SFRPAGE=0x00;If(SMB0STA==0x80){aa[k]=SMB0DAT;}K++;SI=0;}。
C# 串口操作系列(2) -- 入门篇,为什么我的串口程序在关闭串口时候会死锁 ?
第一篇文章我相信很多人不看都能做的出来,但是,用过微软SerialPort类的人,都遇到过这个尴尬,关闭串口的时候会让软件死锁。
天哪,我可不是武断,算了。
不要太绝对了。
99.9%的人吧,都遇到过这个问题。
我想只有一半的人真的解决了。
另外一半的人就睁只眼闭只眼阿弥佗佛希望不要在客户那里出现这问题了。
你看到我的文章,就放心吧,这问题有救了。
我们先回顾一下上一篇中的代码view plaincopy to clipboardprint?void comm_DataReceived(object sender, SerialDataReceivedEventArgs e){//先记录下来,避免某种原因,人为的原因,操作几次之间时间长,缓存不一致int n = comm.BytesToRead;//声明一个临时数组存储当前来的串口数据byte[] buf = new byte[n];//增加接收计数received_count += n;//读取缓冲数据comm.Read(buf, 0, n);//清除字符串构造器的内容builder.Clear();//因为要访问ui资源,所以需要使用invoke方式同步ui。
this.Invoke((EventHandler)(delegate{...界面更新,略}));}private void buttonOpenClose_Click(object sender, EventArgs e){//根据当前串口对象,来判断操作if (comm.IsOpen){//打开时点击,则关闭串口comm.Close();//这里就是可能导致软件死掉的地方}else{...}}void comm_DataReceived(object sender, SerialDataReceivedEventArgs e){//先记录下来,避免某种原因,人为的原因,操作几次之间时间长,缓存不一致int n = comm.BytesToRead;//声明一个临时数组存储当前来的串口数据byte[] buf = new byte[n];//增加接收计数received_count += n;//读取缓冲数据comm.Read(buf, 0, n);//清除字符串构造器的内容builder.Clear();//因为要访问ui资源,所以需要使用invoke方式同步ui。
串行口的使用流程
串行口的使用流程1. 硬件连接在使用串行口之前,首先需要确保正确连接串行口的硬件设备。
一般来说,串行口的连接包括以下几个步骤:•确定串行口的类型:串行口通常以RS-232、RS-485或者RS-422等标准进行连接。
根据所使用的标准,选择合适的串行口接口线或转换器进行连接。
•连接串行口接口线:根据设备的接口类型,将串行口接口线的一端插入计算机的串行口接口,另一端连接到所需的串行设备。
•确保连接正确:检查接线是否牢固,并确保连接的两端不松动。
此外,还需确保所连接设备的电源已经打开。
2. 驱动程序安装在连接好硬件设备后,接下来需要安装串行口的驱动程序。
驱动程序是用于使计算机能够识别和与串行口设备进行通信的软件。
•确定驱动程序类型:根据串行口设备的品牌和型号,确定所需的驱动程序类型。
通常,在设备的官方网站上可以找到相应的驱动程序下载。
•下载驱动程序:访问设备的官方网站,找到适用于操作系统的最新驱动程序,并下载到计算机上。
•安装驱动程序:双击下载好的驱动程序安装包,按照提示完成安装过程。
一般来说,安装过程中需要阅读并同意许可协议、选择安装路径等步骤。
•重新启动计算机:安装完成后,有些驱动程序会要求重新启动计算机以确保驱动程序生效。
按照提示重新启动计算机。
3. 配置串行口参数在硬件连接和驱动程序安装完成后,接下来需要配置串行口的参数,以确保正常的数据传输。
配置串行口参数需要通过操作系统提供的串口设置工具进行。
•打开串行口设置工具:根据不同的操作系统,可以打开相应的串行口设置工具。
例如,在Windows操作系统中,可以通过“设备管理器”打开串口设置工具。
•选择串行口:在打开的串行口设置工具中,选择所需配置的串行口。
通常,串行口的标识是COM1、COM2等。
•配置参数:根据实际需求,配置串行口的参数。
常见的配置参数包括波特率、数据位、停止位、校验位等。
这些参数需要与所连接设备的参数一致才能正常通信。
•保存配置:配置完成后,点击保存按钮,将配置参数保存。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
绝对好用的串口程序
sbit SID=P2^1; //12864数据
sbit SCLK=P2^2; //12864时钟
init()
{
write(0,0x30); //8 位介面,基本指令集
write(0,0x0c); //显示打开,光标关,反白关
write(0,0x01); //清屏,将DDRAM的地址计数器归零delaynms(10);
write(0,0x80); for(i=0;i<16;i++) write(1,datas11[i]); write(0,0x90); for(i=0;i<16;i++) write(1,datas2[i]); write(0,0x88); for(i=0;i<16;i++) write(1,datas3[i]); write(0,0x98); for(i=0;i<16;i++) write(1,datas4[i]);
}
/**********************12864*************************/
void delaynms(unsigned int di) //延时
{
unsigned int da,db;
for(da=0;da<di;da++)
for(db=0;db<10;db++);
}
void sendbyte(unsigned char bbyte) //发送一个字节{
unsigned char i;
for(i=0;i<8;i++)
{
SID=bbyte&0x80; //取出最高位
SCLK=1;
SCLK=0;
bbyte<<=1; //左移
}
}
void write(bit start, unsigned char ddata) //写指令或数据{
unsigned char start_data,Hdata,Ldata;
if(start==0) start_data=0xf8; //写指令
else start_data=0xfa; //写数据
Hdata=ddata&0xf0; //取高四位
Ldata=(ddata<<4)&0xf0; //取低四位
sendbyte(start_data); //发送起始信号
delaynms(5); //延时是必须的
sendbyte(Hdata); //发送高四位
delaynms(1); //延时是必须的
sendbyte(Ldata); //发送低四位
delaynms(1); //延时是必须的
}
/*void lcdinit(void) //初始化LCD
{
delaynms(10); //启动等待,等LCM讲入工作状态
//PSB=0; ; //串口驱动模式
// RESET=0; delaynms(1); RESET=1; // 复位LCD
// CS=1;
write(0,0x30); //8 位介面,基本指令集
write(0,0x0c); //显示打开,光标关,反白关
write(0,0x01); //清屏,将DDRAM的地址计数器归零}*/。