资源描述:
《51单片机MODBUS协议汇编-蚂蚁叼骨头》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、51单片机汇编—MODBUS协议(带写入功能)//读数据帧:01设备地址03功能码0000起始地址0001数据长度840A校验码//读返回帧:01设备地址03功能码02数据个数12数据34数据B533校验码//写数据帧:01设备地址10功能码0001起始地址0001数据长度02数据字节数12数据34数据AAF6校验码//写返回帧:以写帧相同。//带此‘-----’标志,且后无任何备注的可以去除或用空指令代替,此些地方时是为了测试时使用的状态显示位。ORG0000HLJMPMAIN;ORG0023HLJMPPCTX;ORG0100HMAIN:MOVSP
2、,#30H;MOVP0,#00H;MOV60H,#12H;---------------MOV61H,#34H;----------------------MOV62H,#56H;--------MOV63H,#78H;---MOVTMOD,#20H;MOVTL1,#0FDH;MOVTH1,#0FDH;MOVSCON,#50H;MOVPCON,#00H;;/MOVR3,#00H;存入数据个数(未用)MOVP1,#00H;MOVR3,#00H;MOVR2,#08H;MOVR1,#40H;数据首地址(未用)//MOV0B8H,#10H;串口优先级SETB
3、TR1;SETBES;//MOVDPTR,#0100H;SETBEA;MOVP0,#00H;MOVR4,#00H;LOON:MOVR5,#0FH;LOO:MOVA,R3;JNZLOP;MOVA,R4;MOVP1,A;INCR4;LCALLDELAY1S;DJNZR5,LOO;JMPLOON;PCTX:SETBP0.0;------------------TX:JBRI,LOOP;LCALLDELAY10;延时10ms等待;JNBRI,LOP;SETBP0.1;-----------------LJMPOUT;LOOP:MOVA,SBUF;MOV3EH
4、,A;CLRRI;MOVA,R1;ADDA,R3;MOVR0,A;MOV@R0,3EH;INCR3;存入数据个数(未用)MOVA,R3;-------------MOVP2,A;-------------LCALLDELAY10;LJMPOUT;//DJNZR2,OUT;LOP:CLRES;//LCALLDELAY1S;延时10msMOVR1,#40H;MOVA,@R1;(数据地址送A比较器)SUBBA,#01H;(地址为01响应)JNZRESET;SETBP0.2;----------MOVA,41H;SUBBA,#03;功能码为03,对数据读操作
5、。JNZLOOP1;-----------------------数据写操作入口LCALLCRC16;MOVR1,#46H;MOVA,@R1;SUBBA,3CH;JNZRESET;SETBP0.0;----------INCR1;MOVA,@R1;SUBBA,3BH;JNZRESET;MOVA,42H;JNZRESET;MOVA,43H;数据首地址R4RLA;字节成以2,以字为单位;CLRC;MOVR4,A;MOVA,44H;JNZRESET;MOVA,45H;读数据长度R5SUBBA,#09H;----限制读8个字,缓冲数据存放40-5FH;数据存
6、储在60H-7FH;JNCRESET;MOVA,45H;--------频定义的数据长度。RLA;CLRC;MOVR5,A;MOVR7,A;读数据长度R7MOVA,#60H;数据区转移到发送缓冲区ADDA,R4;MOVR4,A;MOVR6,#43H;LOOP3:MOVA,R4;数据区转移到发送缓冲区MOVR0,A;MOVA,@R0;MOV3EH,A;MOVA,R6;MOVR0,A;MOV@R0,3EH;INCR4;INCR6;DJNZR5,LOOP3;MOVA,R7;数据校验准备,原数据长度MOV42H,A;ADDA,#05H;MOVR3,A;总数据
7、长度MOVR5,A;MOVR1,#40H;数据开始地址LCALLCRC16MOVA,R7;ADDA,#03;ADDA,#40H;MOVR0,A;MOV@R0,3CH;INCR0;MOV@R0,3BH;MOVR0,#40H;SETBES;LOOP4:MOVA,@R0;MOVSBUF,A;发送数据JNBTI,$;INCR0;CLRTI;DJNZR5,LOOP4;RESET:MOVR3,#00H;MOVR2,#08H;MOVR1,#40H;OUT1:SETBP0.7;------AJMPOUT2;OUT:SETBP0.6------OUT2:NOPSETB
8、ES;RETILOOP1:MOVA,41H;功能码为10入口,对数据写操作。SUBBA,#10H;JNZRE