讲解一下程序
时间:10-02
整理:3721RD
点击:
SEND: MOV A,#3FH
MOV SBUF,A
JNB TI,$ ;与PC机进行握手
CLR TI
JNB RI,$
CLR RI
MOV A,SBUF
CJNE A,#2EH,SEND
MOV A,R7
MOV R3,A ;对总字节数进行暂存
MOV SBUF,A
JNB TI,$
CLR TI
MOV R6,#00H
MOV R0,#BLK1 ;数据存取位置
SEND1: MOV A,@R0
MOV SBUF,A ;发送数据
JNB TI,$
CLR TI
ADD A,R6 ;校验
MOV R6,A
INC R0
DJNZ R7,SEND1 ;判断是否已经传送完
MOV A,R6
MOV SBUF,A
JNB TI,$
CLR TI
MOV A,SBUF
CJNE A,#46H,SEND3 ;通PC机的应答进行判断
SEND2: MOV R0,#BLK1 ;重新再传数据
MOV R6,#00H
MOV A,R3
MOV R7,A
AJMP SEND1
SEND3: RET
MOV SBUF,A
JNB TI,$ ;与PC机进行握手
CLR TI
JNB RI,$
CLR RI
MOV A,SBUF
CJNE A,#2EH,SEND
MOV A,R7
MOV R3,A ;对总字节数进行暂存
MOV SBUF,A
JNB TI,$
CLR TI
MOV R6,#00H
MOV R0,#BLK1 ;数据存取位置
SEND1: MOV A,@R0
MOV SBUF,A ;发送数据
JNB TI,$
CLR TI
ADD A,R6 ;校验
MOV R6,A
INC R0
DJNZ R7,SEND1 ;判断是否已经传送完
MOV A,R6
MOV SBUF,A
JNB TI,$
CLR TI
MOV A,SBUF
CJNE A,#46H,SEND3 ;通PC机的应答进行判断
SEND2: MOV R0,#BLK1 ;重新再传数据
MOV R6,#00H
MOV A,R3
MOV R7,A
AJMP SEND1
SEND3: RET
这是一个用RS232串口与PC机通信的子程序。通信开始时先发送#3F的握手数据,PC机收到后返回#2E的数据,单片机收不到就反复发送等待,直到收到#2E的数据表示握手成功。握手成功后先发送需要传送的总字节数R7,然后初始化发送信息,待发送的数据地址保存在R0中,校验信息保存在R6中。逐个发送需要发送的数据(R7用来统计已发送个数),每发送一个数,将该数与R6相加,最后得到所有已发送数据和的后8位作为校验数据也发送给PC机,PC机将收到的数据也进行相同的运算,将运算结果与收到的校验数进行比较,结果相同标示收到的数据无误,返回一个非#46H的数给单片机,单片机收到确认信息后退出通信子程序。若PC机收到的校验码与自身计算的校验码不一致,返回#46H的数给单片机,单片机收到误码信息后重新初始化发送程序,再次重新开始传送数据的全过程(不含握手信号)。仅供参考。
非常感谢,你有rs485与PC机通行的子程序吗?非常感谢您,这点程序弄得都愁死我了
我需要的是一个RS485的子程序,谢谢您
汇编啊 好深奥啊