单片机写串口上位机时的一点心得

发布者:Volare最新更新时间:2016-01-15 来源: eefocus关键字:单片机  串口  上位机 手机看文章 扫描二维码
随时随地手机看文章
       开门见山地说,要注意的就是.net中无论String型还是Char型数据,字符均使用Unicode编码而非ASCII编码,而单片机通常只支持ASCII编码。这就导致在电脑与单片机串口通信过程中,出现无法被识别或被错误识别的情况。

        前一阵做星火杯的时候,由于考虑到一些性能和功能上的需求,我决定用.net做上位机,具体是用vb.net。因为以前接触过VB,有点基础,所以学起来应该不回花太多时间。在编程的时候边编边学,进展速度还算可以,最关键的数据库查询和操作的部分一个晚上也就搞定了。

        但最后做好后,与单片机通信时始终无法发送正确的数据,表面上看好像是数据发送的顺序不对,导致我硬件上的12864液晶上显示的数据虽然不是乱码,但顺序好像有点乱。我使用的是.net提供的SeriaPort控件的SerPort.Write()方法,无论发送的是一串string型数据还是将Char型数据一个一个的发送,均出现相同的状况,时间一分一秒的过去,这可是真是急死我了!

        好在以前看书的时候不经意间看到一句话“.net的字符均以Unicode编码存储”,也就是说,一个Char型数据占两个字节。我想到这后马上打开MSDN,看看有什么解决方法。可是最后发现那里也没有什么很明确的答案。最后我又通过一系列的baidu,终于找到了解决方法,在这里就与大家分享一下。

        其关键不在与更改串口通信的某些设置和代码,而在于给字符串进行编码转换。一下就是我写的一个函数:

    Public Sub AsciiSend(ByVal SerPort1 As IO.Ports.SerialPort, ByVal str1 As String)
        Dim i As Integer
        Dim sendbyte As Byte()
        sendbyte = System.Text.Encoding.ASCII.GetBytes(str1)
        For i = 0 To str1.Length - 1
            SerPort1.Write(Chr(sendbyte(i)))
            Threading.Thread.Sleep(2)
        Next
    End Sub

        其中“sendbyte = System.Text.Encoding.ASCII.GetBytes(str1)”就是用来进行编码转换的,在这里我把str1转换为用ASCII编码的字符,并存进sendbyte()里。sendbyte是Byte型的,就和C语言中char型一样,占用8个位(本来Byte的中文就是字节),可能大多数.net爱好者对它接触的不多,但跟单片机这些硬件打交道,是不可能不接触Byte的。“Chr(sendbyte(i))”是用来将Byte里的数据作为一个数字,转换为一个字符,在这里就是转换为一个ASCII字符。不知道在这里我说清楚了没有。如果没有说清楚,那你也baidu一下吧。

关键字:单片机  串口  上位机 引用地址:单片机写串口上位机时的一点心得

上一篇:DS18B20测负温度程序
下一篇:单片机两级中断嵌套的示例C程序

推荐阅读最新更新时间:2024-03-16 14:44

基于单片机的锂电池快速充电电路
  常见的可充电电池包括镍氢电池、镍镉电池、锂电池和聚合物电池等。其中,锂电池以其高的能量密度、稳定的放电特性、无记忆效应和使用寿命长等优点得到广泛的应用。目前绝大多数的手机、数码相机等均使用锂电池。电池的使用寿命和单次循环使用时间与充电器维护过程和使用情况密切相关。一部好的充电器不但能在短时间内将电量充足,而且还可以对电池起到一定的维护作用,修复由于使用不当而造成的记忆效应,即电池活性衰退现象。    单片机电路   单片机芯片为Atmel公司的AT89C52单片机,B1为蜂鸣器,单片机的P2.0口输出控制 光耦 器件,可以在需要时及时关断充电电源。      图2 52单片机电路原理图    充电电路控制模块   充电状态
[电源管理]
基于<font color='red'>单片机</font>的锂电池快速充电电路
基于AT89S32单片机的高精度称重系统的研制
  0 引言   随着科学技术的进步,单片机及相关电子技术飞速发展,应用领域不断拓展。利用单片机和传感器实现对重量的高精度测量,提高了生产的自动化程度,成本低廉,应用十分广泛。   1 系统组成   系统由单片机系统、称重传感器、A/D转换、通信接口和语音提示模块组成,硬件结构框图如图1。   1.1 单片机系统   系统采用AT89S52作为控制核心,配备键盘、液晶显示电路和扬声器。 AT89S52是Atmel公司新推出的一种低功耗、高性能CMOS 8位微控制器,它具有以下标准功能:8k字节Flash,256字节RAM,32位I/O口线,看门狗定时器,2个数据指针,三个16位定时器/计数器,一个6向量2级中断结构,
[单片机]
AT89S系列单片机ISP解析方案
1 ISP概述 从事单片机设计和开发的技术人员目前一般采用以下常用的方法开发单片机产品:首先利用单片机仿真设备进行硬件和软件的仿真调试,然后将调试通过的目标代码用程序烧写器固化到单片机的程序存储器中。在这个过程中,程序烧写器是必不可少的开发工具。程序烧写器一般价格较昂贵,对于初学者来说是一笔不小的开支,并将直接影响到初学者进一步学习开发单片机的积极性。另外,以后每修改一次源程序就要将单片机芯片从目标板上取出,再将更新后的目标代码重新固化到单片机芯片中,这样调试时就会由于频繁地插拔单片机芯片而对芯片和电路板带来相应的物理损坏。借助程序烧写器进行单片机编程的缺点是烧写设备昂贵,烧写操作麻烦,不便于实现在系统编程(ISP)。为了克服上
[单片机]
AT89S系列<font color='red'>单片机</font>ISP解析方案
51单片机驱动继电器可以使用这样的几种芯片
继电器是一种电子控制器件,它具有控制系统(又称输入回路)和被控制系统(又称输出回路),通常应用于自动控制电路中,它实际上是用较小的电流去控制较大电流的一种“自动开关”。故在电路中起着自动调节、安全保护、转换电路等作用。在大多数的情况下,继电器就是一个电磁铁,这个电磁铁的衔铁可以闭合或断开一个或数个接触点。当电磁铁的绕组中有电流通过时,衔铁被电磁铁吸引,因而就改变了触点的状态。继电器一般可以分为电磁式继电器、热敏干簧继电器、固态继电器等。增强型PIC实验板上配置的继电器如图1所示。 电磁式继电器一般由铁芯、线圈、衔铁、触点簧片等组成的。只要在线圈两端加上一定的电压,线圈中就会流过一定的电流,从而产生电磁效应,衔铁就会在电磁力吸引的
[单片机]
51<font color='red'>单片机</font>驱动继电器可以使用这样的几种芯片
TI - MCU - MSP430使用指南6 -> CS时钟系统
MSP430产品能做到超低功耗主要得益于对时钟的严谨设计,在所有MSP430产品中,总共有以下几种时钟类型: MCLK : Master Clock,MCU主时钟,决定着CPU,CRC等运行的速度。 SMCLK:Subsystem Master Clock,子系统时钟,这个时钟总是由MCLK分频得到,可以是1、2、4、8等分频,与MCLK属于同步时钟,主要可用于常规外设的时钟源。 ACLK:Auxiliary clock,辅助时钟,可以由XT1CLK(外部时钟)或REFCLK(内部时钟)产生,这个时钟频率必须在32KHz左右,最常规的应该在32768Hz,不能超过40KHz。 VLOCLK:Internal very-low-
[单片机]
TI - <font color='red'>MCU</font> - MSP430使用指南6 -> CS时钟系统
80C196MC单片机波形发生器原理及其在逆变电源中的应用
PWM技术从最初采用分离元件的模拟电路完成三角波和正弦调制波的比较,产生SPWM控制信号,到目前采取全数字化方案,完成实时在线的PWM(SPWM)信号输出。PWM控制电路经历了由实级到越来越完善的演化。 由专用集成芯片ASIC(Application specific integrated circuit)生成SPWM波的技术近几年来被广泛采用,这些集成电路有HFE4752、SLE4520、MA8X8/SA8X8、SAXXXX等。其中多数要与单片机连接才能完成SPWM控制功能,对于要求较高的逆变系统来说仍然不够简捷。INTEL公司推出的16位单片机8XC196MC片内集成了三相SPWM波形发生器WFG(Wave
[单片机]
80C196MC<font color='red'>单片机</font>波形发生器原理及其在逆变电源中的应用
如何利用AVR单片机实现AT24C256的数据高速稳定的读取
最近刚买回一块AT24C256 EEPROM ,容量为32K Byte ,数据地址宽度为 16Bit ,支持IIC 1M (5V)400K (2.7V) 速度模式 ,利用AVR M16 片内IIC 可以高速稳定地读取数据! 经过调试的,与各位大虾分享分享。 程序如下:(winavr) #include #include #include #include #define FREQ 8 #include #include #include #define uchar unsigned char #define uint unsigned int #define ulong unsigned long //管脚定义 #defin
[单片机]
如何利用AVR<font color='red'>单片机</font>实现AT24C256的数据高速稳定的读取
TMS320C32扩展异步串口的方法
摘要:介绍了TMS320C32 DSP实现异步串行通信接口的三种方法:软件模拟实现、硬件实现、专用协议芯片实现。给出了具体实现的硬件接口和软件编程。在接口的第二种和第三种实现方法中,都使用了FPGA实现逻辑接口。 关键词:数字信号处理 异步串行接口 现场可编程逻辑阵列 电气传动控制 高速数字信号处理器(DSP)在现代工业控制中,特别是电气传动控制中的应用非常广泛。大量文献介绍的应用于电气传动控制的DSP使用的是TI公司的,TMS320系列DSP芯片,这其中又以TMX210C3X和TMS320F24X为主流应用产品。TMS320C32(以下简称为C32)是TMS320C3X系列产品中应用比较多的一种。主工业控制中,常常需要使用
[应用]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved