当前位置:首页>科技>正文

51单片机串口通信(汇编) modbus rtu串口通信

2023-07-29 19:53:22 互联网 未知 科技

 51单片机串口通信(汇编) modbus rtu串口通信

51单片机串口通信(汇编)

HERE: AJMP HERE
SINT: MOV P1,R0
JB RI,RECV
JB TI,SEND
AJMP HERE

中断里面直接用这种方式直接跳到主程序,我以前还是真没试过,不过估计能行吧。 我一直用RETI 返回堆栈地址位置的。

但下面这地方肯定有错的,就是执行MOV SBUF,A 后没有等待!!
正确的顺序是: CLR TI 清发送标记
MOV SBUF,A 发送
JNB TI,$ 这里是如果TI没有被置1就等待,因为送数可能还没有完成。。就去执行别的动作,可能会有问题。
接收也一样要等待:
MOV A,SBUF
JNB RI,$ 等待接收完成标志。

另外:
CPL P1.7 有问题,我猜你是用P1.7来观察接收次数,
但由于CPL P1.7取反命令是读一下P1.7再取反输出的,如果你的p1.7外接电路不科学,不合理,可能会出现你每次不管发1,还是发0,p1.7都是低电平,比如你将p1.7直接接在npn三管基极就会一直是0V或0.7V , P1.7的读入值会总为0,CPL 输出会总是为1
你可以用内部(非P口的位地址过度一下),比如: CPL 01H
MOV C,01H
MOV P1.7,C
你先试验吧。。。

modbus rtu串口通信

大致的看了下~~你的写的指令:
01 03 00 01 00 01 D5 CA
01 01 00 50 00 20 3D C3
01 03 00 60 00 10 44 18
是三条指令~~所以你不要一下都发出去~~发完一条等待一段时间~~等待接收,500ms肯定够了。
有问题的话再发贴……

单片机串口通信

2种不同的通讯接口,串口调试助手用的是UART通讯协议,I2C是另外一种通讯协议,2种完全不兼容,I2C一般用在设备内部各个集成电路之间的通讯,因为无法远距离的传输才限制了它的应用场合,UART就不同了,比较广泛。如果想用串口调试助手,那你要看目标设备有没有UART接口了,如果你想用串口调试助手调试I2C接口,那你只能用单片机做个通讯接口转换了,一般单片机都带有UART接口,另外一端如果单片机自带I2C接口那就好,没有的话也可以通过IO口模拟出来,还有I2C不是仅仅限制于EEPROM的通讯,很多其他的集成电路用的也是I2C通讯接口,比如传感器等等集成电路。另外你可能会遇到另外一个概念RS232,这个和UART是同一种通讯协议,只是电平不同罢了。。。

java实现串口通信代码

public static void process() { try { Enumeration portList = CommPortIdentifier.getPortIdentifiers() while (portList.hasMoreElements()) { CommPortIdentifier portId = (CommPortIdentifier) portList.nextElement() if (portId.getPortType() == CommPortIdentifier.PORT_SERIAL)//如果端口类型是串口则判断名称 { if(portId.getName().equals("COM1")){//如果是COM1端口则退出循环 break }else{ portId=null } } } SerialPort serialPort = (SerialPort)portId.open("Serial_Communication", 1000)//打开串口的超时时间为1000ms serialPort.setSerialPortParams(9600,SerialPort.DATABITS_8,SerialPort.STOPBITS_1,SerialPort.PARITY_NONE)//设置串口速率为9600,数据位8位,停止位1们,奇偶校验无 InputStream in = serialPort.getInputStream()//得到输入流 OutputStream out = serialPort.getOutputStream()//得到输出流 //进行输入输出操作 //操作结束后 in.close() out.close() serialPort.close()//关闭串口 } catch (PortInUseException e) { e.printStackTrace() } catch (UnsupportedCommOperationException e) { e.printStackTrace() } catch (IOException e) { e.printStackTrace() } }