关于单片机串口通信的问题

  最近在调板子的时候又遇到了单片机MCU检测不到的问题,之前百度了一堆驱动问题,已经可以正常烧写程序,但是昨天又写不了了,连单片机都检测不到,将驱动器的RxD与TxD短接,使用串口助手自己给自己发送数字,是可以接收到的,证明仿真器没有问题,交换驱动器与单片机的RxD与TxD,从顺接改为交叉连接,还是不行。后来在一哥们的指导下解决了该问题。然后发 现一个小小的串口通信其实门道很多,特别是对于对单片机不熟悉的初级选手是个不小的挑战,所以今天跟小伙伴们聊聊我的感受。
  我的问题概而论之就是对于CH340驱动不了解,这个USB转串口的小板直接百度就能有一堆东西,原理图芯片资料等一应俱全,这里就不做赘述。需要注意的其实是它上面的指示灯,它会加强你对类似问题的判断。一般来说仿真器指示灯有三个:PWR、TxD、RxD,当TxD或RxD给低电平时,对应的指示灯亮,高电平时不亮。
  当单片机与仿真器进行通信时(烧写程序或者检测MCU),二者会完成一收一发。按下检测MCU时,TxD的指示灯会亮,此时仿真器的TxD在给单片机的RxD发送一个低电平,单片机检测到电源的断电和上电后(我的理解是下降沿上升沿双触发),会在单片机的TxD先拉高,再给低,仿真器的RxD检测到以后,TxD与RxD又恢复高电平。在进行MCU检测时的表现就是:仿真器的TxD指示灯会亮,此时断电上电触发后,仿器的RxD指示灯会闪一下,随即TxD和RxD指示灯都灭。

  我当时的问题是仿真器的RxD常亮,从插上USB后的一系列操作都是亮的,这说明单片机的TxD一直就是给的低电平,而没有被拉高过,我调的板子里是有modbus模块的,modbus对应的RxD与TxD是与单片机接在一起的,而当时连接用的跳线帽是插着的,所以最后的结果就是modbus模块在捣鬼,它把单片机TxD本该给仿真器RxD的高电平给夺走了,导致仿真器的RxD无法被拉高,因此检测MCU总是失败,也就无法烧写程序,去掉跳线帽后MCU检测成功完成。
  在我解决这个问题的过程中遇到的第二个问题就是单片机和仿真器的RxD和TxD接反了。现在市面上有些仿真器是考虑到了对接问题,标记的时候就是仿真器的RxD对应单片机的RxD,仿真器的TxD对应单片机的TxD,而有些则是要交叉连接的,这个问题主要看标记RxD和TxD的时候是站在什么角度标记的,百度也是一大堆资料,这里就不做赘述了。至于实际中,我怎么知道这个仿真器RxD和TxD应该顺着接还是交叉接,前面的内容已经可以解答你了:单独插上仿真器,点击检测MCU,看哪个灯亮,那么这个灯对应的就是TxD,另一个不亮的就是RxD咯,至于常亮的红色灯PWR忽略掉就可以咯。
  这么看来我遇到的问题很简单,但是在这个过程中,我认为这种排除故障的思路是很值得学习的,一开始我根本就没有没有注意到去看仿真器的指示灯,也不知道这几个灯是干嘛使的,所以一头雾水,也不知道从何查起。相信每一个有过调板子经历的人都知道下载软件驱动器光是版本就能折腾地人想自杀,所以就更不应该在硬件问题上浪费时间和精力,希望我的精力能够对大家有所帮助。

时间: 2024-10-06 17:06:07

关于单片机串口通信的问题的相关文章

51单片机串口通信

一.原理简介 51 单片机内部有一个全双工串行接口.什么叫全双工串口呢?一般来说,只能接受或只能发送的称为单工串行:既可接收又可发送,但不能同时进行的称为半双工:能同时接收和发送的串行口称为全双工串行口.串行通信是指数据一位一位地按顺序传送的通信方式,其突出优点是只需一根传输线,可大大降低硬件成本,适合远距离通信.其缺点是传输速度较低. 与之前一样,首先我们来了解单片机串口相关的寄存器. SBUF 寄存器:它是两个在物理上独立的接收.发送缓冲器,可同时发送.接收数据,可通过指令对SBUF 的读写

51单片机串口通信时的定时器设置的相关问题

51单片机在串口通信时需要有一个定时器去调节与计算机通信的波特率,而定时器设置时需要中断寄存器(IE), 定时器控制寄存器(TCON) ,还有T/C控制寄存器共同配合作用, 但在启动定时器功能时,这三个寄存器的配置顺序十分重要,因为在数据传输时的高速情况下,一点点的数据误差就会导致传输的数据出现错误.而在51单片机的串口通信时必须将配置TCON放在配置这三个寄存器的最后,因为在TCON中含有启动定时器的TR1和TR0位,若先启动后对工作方式和溢出率进行配置,就会导致启动时定时器根本无法像预先设定

深入理解51单片机串口通信

串口通信的基本认识 通信分为并行通信和串行通信,并行通信时的数据各个位同时传送,可以实现字节为单位通信,但通信线多占用资源,成本高.以前用到的的P1=0x55,一次给P1口的8个管脚分别赋值,同时进行信号输出,类似于8个车道可以过去8辆车,这样的形式是并行的,一般称P0,P1,P2,P3为51单片机的4组并行总线. 串行通信,就是一个车道,一个只能通过一辆车,如果一个0x55这样一个字节的数据要传输过去的话,假如低位在前,高位在后的话,那发送方式是:0-1-0-1-0-1-0-1,一位一位的进行

labview与单片机串口通信

VISA是虚拟仪器软件体系结构的缩写(即Virtual Instruments Software Architecture),实质上是一个I/O口软件库及其规范的总称. VISA是应用于仪器编程的标准I/0应用程序接口,是工业界通用的仪器驱动器标准API(应用程序接口),采用面向对象编程,具有很好的兼容性.扩展性和独立性.用户可用一个API控制包括VXI.GPIB及串口仪器在内的不同种类的仪器.它还支持多平台工作.多接口控制,是一个多类型的函数库. 在LabVIEW中编写的VISA接口程序,当外

单片机串口通信原理及原理图

转:http://bbs.elecfans.com/forum.php?mod=viewthread&tid=206905  串口通信的概念非常简单,串口按位(bit)发送和接收字节.尽管比按字节(byte)的并行通信慢,但是串口可以在使用一根线发送数据的同时用另一根线接收数据.它很简单并且能够实现远距离通信.比如IEEE488定义并行通行状态时,规定设备线总长不得超过20米,并且任意两个设备间的长度不得超过2米:而对于串口而言,长度可达1200米.典型地,串口用于ASCII码字符的传输.通信使

51单片机串口通信(字符串接收和发送)

1 #include<reg52.h> 2 3 //------------------串口通信协议-----------------// 4 /* 5 客户端数据包格式解释(长度恒为15): 6 例如:A01_fmq_01Off___# 7 A--------数据包的开始标记(可以为A到Z,意味着数据包可以有26种) 8 01-----设备代号 9 fmq_01Off___--------指令(长度恒为10),指令的前4个人字符是指令头部,指令的后6个字符是指令尾部 10 #--------

单片机串口通信中换行的两种方法

方法一: 在发送的字符串时用格式:"原字符串\r\n". 方法二: 在发送完字符或字符串后连续发送字符0x0d和0x0a,即可实现换行.即连续发送字符'\r'和'\n'. 部分代码例程: 方法一: UartSendStr("转换结束!\r\n"); 方法二(1): UartSendStr("转换结束!"); UartSendChar(0x0d); UartSendChar(0x0a); 方法二(2): UartSendStr("转换结束

Arduino和C51之串口通信

技术:51单片机.Arduino.串口通信 概述 本文主要讲解串口通信技术的使用方法,并通过串口点灯实验介绍了51单片机和Arduino串口的使用,为初学者学习串口知识提供帮助 详细 代码下载:http://www.demodashi.com/demo/14691.html 一.串口通信 串口通信(Serial CommunicaTIons)的概念非常简单,串口按位(bit)发送和接收字节.串口用于ASCII码字符的传输,通信使用3根线完成,分别是地线.发送线.接收线.由于串口通信是异步的,端口

51单片机之串口通信(三)

51单片机之串口通信(三) 已有 47 次阅读2015-12-29 00:21 |个人分类:51单片机| 单片机, 通信 用串口实现发送和接收同时可操作: 电脑显示结果如图: 源程序: /*项目名称:串口发送接收实验项目内容:串口发送接收同时进行,计算机发送数据给单片机控制P0口,从而控制LED灯的亮灭,单片机发送数据到计算机,计算机显示出来时间:2015年12月23日项目负责人:YUAN*/#include <reg52.h>typedef unsigned char uChar8;type