SendCardData EQU 30H<br />ReciCardData EQU 60H<br /> ORG 0000H<br /> <br /> <br />START: LCALL WaitDelay <br /> LCALL Commu_Test<br /><br /> <br /><br />Commu_Test:<br /> ;----------------------------<br /> ;command::AA FF 01 01 A1 F4<br /> ;----------------------------<br /> <br /> ;----------------------------<br /> MOV SendCardData + 0, #0AAH<br /> MOV SendCardData + 1, #0FFH;开始标志<br /> MOV SendCardData + 2, #01H;机号<br /> MOV SendCardData + 3, #01H;待发送数据字节数<br /> MOV SendCardData + 4, #0A1H;命令字<br /> MOV SendCardData + 5, #0F4H;校验字<br /> LCALL SoftUART_PutByte<br /> <br /> LCALL SoftUART_GetByte<br /> MOV P0, #00FH; <br /> <br /> RET<br /><br /><br /><br />SoftUART_PutByte:<br />MOV SP,#60H ; 设定堆栈区<br /> MOV SCON,#01010000B ; 设定串列方式 MODE1,接收时 REN=1<br /> MOV TMOD,#20H ; 设定计时器1 为 模式2<br /> <br /> MOV TH1,#0FDH ; 设定波特率为 57600<br /> SETB TR1 ; 计时器1 ,开始计时<br /> SETB TI<br /> MOV R0,#SendCardData<br /> MOV R7,#6<br /> <br />AGAIN:<br /> MOV SBUF,@R0 ;送发送缓冲区<br /> JNB TI,$ ;等待发送完成<br /> CLR TI<br /> INC R0 ;发送下一个<br /> <br /> DJNZ R7,AGAIN<br /> RET<br /><br /> SoftUART_GetByte:<br /> MOV SP,#60H ; 设定堆栈区<br /> MOV SCON,#01010000B ; 设定串列方式 MODE1,接收时 REN=1<br /> MOV TMOD,#20H ; 设定计时器1 为 模式2<br /> <br /> MOV TH1,#0FDH ; 设定波特率为 4800<br /> SETB TR1 ; 计时器1 ,开始计时<br /> SETB TI<br /><br /> MOV R0,#SendCardData<br /> <br /> MOV R7,#6<br />AGAIN1:<br /> <br /> JNB RI,$ <br /> CLR RI<br /> MOV A,SBUF <br /> MOV @R0,A <br /> <br /> INC R0<br /> DJNZ R7,AGAIN1<br /> <br /> RET <br /> WaitDelay:<br /> <br /> MOV R6,#50<br />MtDly_Loop2:<br /> MOV R7,#100<br /> DJNZ R7,$<br /> DJNZ R6,MtDly_Loop2<br /> DJNZ R5, WaitDelay<br /> RET <br /> END<br />请问下为什么用串口调试助手看发送的指令时预计是AA FF 01 01 A1 F4<br />但总是观察出两串AA FF 01 01 A1 F4 AA FF 01 01 A1 F4?<br /> |
|