哪位大侠可以帮我详细解释一下,下面这段程序! ORG 0000H LJMPMAIN; ORG0023H LJMPPCTX; ORG0100H MAIN: MOV SP,#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; 串口优先级 SETBTR1; SETBES; //MOVDPTR,#0100H; SETBEA; MOVP0,#00H; MOVR4,#00H; LOON:MOV R5,#0FH; LOO:MOV A,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: MOV A,SBUF; MOV3EH,A; CLRRI; MOVA,R1; ADDA,R3; MOVR0,A; MOV@R0,3EH; INCR3;存入数据个数(未用) MOVA,R3;------------- MOVP2,A;------------- LCALLDELAY10; LJMPOUT; //DJNZR2,OUT; LOP:CLR ES; //LCALLDELAY1S;延时10ms MOVR1,#40H; MOVA,@R1;(数据地址送A比较器) SUBBA,#01H;(地址为01响应) JNZRESET; SETBP0.2;---------- MOVA,41H; SUBBA,#03;功能码为03,对数据读操作。 JNZLOOP1;----------------------- 数据写操作入口 LCALLCRC16; MOVR1,#46H; MOVA,@R1; SUBBA,3CH; JNZRESET; SETBP0.0;---------- INCR1; MOVA,@R1; SUBBA,3BH; JNZRESET; MOVA,42H; JNZRESET; MOVA,43H;数据首地址R4 RLA; 字节成以2,以字为单位; CLRC; MOVR4,A; MOVA,44H; JNZRESET; MOVA,45H;读数据长度R5 SUBBA,#09H;----限制读8个字,缓冲数据存放40-5FH;数据存储在60H-7FH; JNCRESET; MOVA,45H;--------频定义的数据长度。 RLA; CLRC; MOVR5,A; MOVR7,A; 读数据长度R7 MOVA,#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;总数据长度 MOVR5,A; MOVR1,#40H;数据开始地址 LCALLCRC16 MOVA,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:MOV R3,#00H; MOVR2,#08H; MOVR1,#40H; OUT1:SETB P0.7;------ AJMPOUT2; OUT: SETB P0.6------ OUT2:NOP SETBES; RETI LOOP1: MOVA,41H;功能码为10入口,对数据写操作。 SUBBA,#10H; JNZRESET; LCALLCRC16; MOVR0,#46H; MOVA,@R0; ADDA,#47H; MOVR1,A; MOVA,@R1; SUBBA,3CH; JNZRESET; SETBP0.0;---------- INCR1; MOVA,@R1; SUBBA,3BH; JNZRESET; MOVA,42H; JNZRESET; MOVA,43H; RLA;以字的长度确定寄存器起始地址 MOVR2,A; MOVR4,46H;写入数据的字节个数 MOVA,46H; JZRESET; MOVA,R2; ADDA,#60H; MOVR2,A;写目标地址 MOVR5,#47H; MOVTX:MOV A,R5;源数据地址 MOVR0,A; MOV3EH,@R0; MOVA,R2 MOVR0,A; MOV@R0,3EH; INCR5; INCR2; DJNZR4,MOVTX; MOVR6,#0BH; MOVR7,#40H; LOOP6:MOV A,R7; MOVR0,A; MOVA,@R0; MOVSBUF,A; JNBTI,$; INCR7; CLRTI; DJNZR6,LOOP6; LJMPRESET; LOOP5:LJMP OUT; CRC16:MOV A,R3; CRC16校验开始 SUBBA,#02; MOVR4,A; MOV3BH,#0FFH; MOV3CH,#0FFH; LOOPT:MOV A,@R1; XRLA,3CH; MOV3AH,A; INCR1; MOVDPTR,#CRCHI; MOVA,3AH; MOVCA,@A+DPTR; XRLA,3BH; MOV3CH,A; CRC16检验码高字节存放 MOVDPTR,#CRCLOW; MOVA,3AH; MOVCA,@A+DPTR; MOV3BH,A;CRC16校验码低字节存放 DJNZR4,LOOPT; RET DELAY10:MOV R6,#02FH; DJNZR6,$; RET DELAY1S:MOV R6,#0FFH; DELA1: MOVR7,#0FFH; DJNZR7,$; DJNZR6,DELA1; RET CRCHI: DB 00H, 0C1H, 81H, 40H, 01H, 0C0H, 80H, 41H, 01H, 0C0H, 80H, 41H, 00H, 0C1H, 81H DB 40H, 01H, 0C0H, 80H, 41H, 00H, 0C1H, 81H, 40H, 00H, 0C1H, 81H, 40H, 01H, 0C0H DB 80H, 41H, 01H, 0C0H, 80H, 41H, 00H, 0C1H, 81H, 40H, 00H, 0C1H, 81H, 40H, 01H DB 0C0H,80H, 41H, 00H, 0C1H,81H, 40H, 001H, 0C0H,080H, 041H, 001H, 0C0H,080H, 041H DB 00H, 0C1H, 081H, 040H, 001H, 0C0H, 080H, 041H, 00H, 0C1H, 081H, 040H, 00H, 0C1H, 081H DB 040H, 01H, 0C0H, 080H, 041H, 00H, 0C1H, 081H, 040H, 01H, 0C0H, 080H, 041H, 01H, 0C0H DB 080H, 041H, 00H, 0C1H, 081H, 040H, 00H, 0C1H, 081H, 040H, 01H, 0C0H, 080H, 041H, 01H DB 0C0H,080H, 041H, 00H, 0C1H,081H, 40H, 01H, 0C0H,80H, 41H, 00H, 0C1H,81H, 40H DB 00H, 0C1H, 81H, 40H, 01H, 0C0H, 80H, 41H, 01H, 0C0H, 80H, 41H, 00H, 0C1H, 81H DB 40H, 00H, 0C1H, 81H, 40H, 01H, 0C0H, 80H, 41H, 00H, 0C1H, 81H, 40H, 01H, 0C0H DB 80H, 41H, 01H, 0C0H, 80H, 41H, 00H, 0C1H, 81H, 40H, 00H, 0C1H, 81H, 40H, 01H DB 0C0H,80H, 41H, 01H, 0C0H,80H, 41H, 00H, 0C1H,81H, 40H, 01H, 0C0H,80H, 41H DB 00H, 0C1H, 81H, 40H, 00H, 0C1H, 81H, 40H, 01H, 0C0H, 80H, 41H, 00H, 0C1H, 81H DB 40H, 01H, 0C0H, 80H, 41H, 01H, 0C0H, 80H, 41H, 00H, 0C1H, 81H, 40H, 01H, 0C0H DB 80H, 41H, 00H, 0C1H, 81H, 40H, 00H, 0C1H, 81H, 40H, 01H, 0C0H, 80H, 41H, 01H DB 0C0H,80H, 41H, 00H, 0C1H,81H, 40H, 00H, 0C1H,81H, 40H, 01H, 0C0H,80H, 41H DB 00H, 0C1H, 81H, 40H, 01H, 0C0H, 80H, 41H, 01H, 0C0H, 80H, 41H, 00H, 0C1H, 81H,40H CRCLOW: DB 00H, 0C0H, 0C1H,01H, 0C3H, 03H, 02H, 0C2H, 0C6H, 06H, 07H, 0C7H,05H, 0C5H, 0C4H; DB 04H, 0CCH, 0CH, 0DH, 0CDH, 0FH, 0CFH,0CEH, 0EH, 0AH, 0CAH, 0CBH, 0BH, 0C9H,09H DB 08H, 0C8H, 0D8H, 18H, 19H, 0D9H, 1BH, 0DBH, 0DAH, 1AH, 1EH,0DEH, 0DFH, 1FH, 0DDH DB 1DH, 1CH, 0DCH, 14H, 0D4H, 0D5H, 15H,0D7H, 17H, 16H, 0D6H, 0D2H, 12H, 13H, 0D3H DB 11H, 0D1H, 0D0H, 10H, 0F0H, 30H, 31H, 0F1H, 33H, 0F3H,0F2H, 32H, 36H, 0F6H, 0F7H DB 37H, 0F5H, 35H, 34H, 0F4H,3CH, 0FCH, 0FDH, 3DH, 0FFH, 3FH, 3EH, 0FEH, 0FAH, 3AH DB 3BH, 0FBH, 39H, 0F9H, 0F8H,38H, 28H, 0E8H, 0E9H, 29H, 0EBH, 2BH, 2AH, 0EAH, 0EEH DB 2EH, 2FH, 0EFH, 2DH, 0EDH, 0ECH, 2CH,0E4H, 24H, 25H, 0E5H, 27H, 0E7H, 0E6H, 26H DB 22H, 0E2H, 0E3H, 23H, 0E1H, 21H, 20H,0E0H, 0A0H, 60H, 61H, 0A1H, 63H, 0A3H, 0A2H DB 62H, 66H, 0A6H, 0A7H,67H, 0A5H, 65H, 64H, 0A4H, 6CH, 0ACH, 0ADH, 6DH, 0AFH, 6FH DB 6EH, 0AEH, 0AAH, 6AH, 6BH, 0ABH, 69H, 0A9H, 0A8H, 68H, 78H, 0B8H, 0B9H, 79H, 0BBH DB 7BH, 7AH, 0BAH, 0BEH, 7EH, 7FH, 0BFH,7DH, 0BDH, 0BCH, 7CH, 0B4H, 74H, 75H, 0B5H DB 77H, 0B7H, 0B6H, 76H, 72H, 0B2H, 0B3H,73H, 0B1H, 71H, 70H, 0B0H, 50H, 90H, 91H DB 51H, 93H, 53H, 52H, 92H, 96H, 56H, 57H,97H, 55H, 95H, 94H, 54H, 9CH, 5CH DB 5DH, 9DH, 5FH, 9FH, 9EH, 5EH, 5AH, 9AH,9BH, 5BH, 99H, 59H, 58H, 98H, 88H DB 48H, 49H, 89H, 4BH, 8BH, 8AH, 4AH, 4EH,8EH, 8FH, 4FH, 8DH, 4DH, 4CH, 8CH DB 44H, 84H, 85H, 45H, 87H, 47H, 46H, 86H,82H, 42H, 43H, 83H, 41H, 81H, 80H,40H END
|