单片机里按同样设置就行。
11位是一个字节,加了开始位,停止位,还有一个TB8,多机通信地址和数据通信区分位,不是一帧,确切的说是一个字节
楼主概念错误。串口通讯里叫帧,是指完成一次完整的数据传送。一帧里可以包含多个字节(同步通讯),也可以包含一个字节。比如包含了开始位,停止位,还有一个多机通信地址和数据通信区分位TB8的一次异步发送叫一帧。其中有效的信息是一个字节。
单片机工作在方式3,波特率9600,一个开始位,一个停止位,一个TB8区分地址和数据标志位,没有校验位的,校验用的是CRC16的,在串口调试助手里的设置:波特率9600,一个开始位,一个停止位,校验方式设为“无”,为什么没有数据返回呢?在系统里就有数据返回,有人说串口调试助手只能调试8位的数据,而单片机工作在方式3,增加一个TB8位,总共是九位数据,所以串口调试助手调试不了,是这样吗?
你校验方式设置错了啊!咋能设置成
无
呢?
你是要看单片机有没有回传数据对吧?先看发送的是地址还是数据,再看你的SM2位咋个弄的。总之确信单片机程序没错啦,也就是确信有回传数据了,把校验方式设置成:mark再看。串口编程的学习应该从以下几个方面入手:1就是上位机的编程,使用c语言或者vc,vb等语言进行上位机的编程实现,主要就是 *** 作串口,理解通信波特率,奇偶校验位,停止位的概念。如果使用单片机或者c语言开发的话,就会有一定麻烦,如果使用vb或者vc的话,就可以调用微软的串口通信控件进行串口的编程,这样的例子网上很多,你可以下载下来分析一下。2下位机的编程,就是plc的编程,主要是要理解通信协议为前提,首先把通信的协议搞定了,才可以进行通信的编程。例如:西门子的编程有自由口的通信,就必须编写下位机的梯形图程序;松下的话就简单很多了。只要理解通信协议就可以编程了。3在编程中,好的通信工具很重要:串口调试助手。可以帮助我们更好的进行串口的调试。4西门子和松下的资料,我比较多,要是需要的话,给你分享一下。不是 有 接收 事件处理函数 吗?serialport 实现过程(1)新建一个项目,命名为Ex13_01,默认窗体为Form1。(2)在Form1窗体中,主要添加两个Button控件,分别用于执行发送数据和接受数据,添加两个TextBox控件,用于输入发送数据和显示接收数据。(3)主要程序代码。private void button1_Click(object sender, EventArgs e){serialPort1PortName = "COM1";serialPort1BaudRate = 9600;serialPort1Open();byte[] data = EncodingUnicodeGetBytes(textBox1Text);string str = ConvertToBase64String(data);serialPort1WriteLine(str);MessageBoxShow("数据发送成功!","系统提示");}private void button2_Click(object sender, EventArgs e){byte[] data = ConvertFromBase64String(serialPort1ReadLine());textBox2Text = EncodingUnicodeGetString(data);serialPort1Close();MessageBoxShow("数据接收成功!","系统提示");}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)