📄 jrdmdytx.asm
字号:
;
; ******* 发送16个字节到速度模块 *******
;
SendToSpdCpu: CLR EA
CLR A
MOV B,#DataHead ; 发送数据贞头
MOV TxdBuf,B
ADD A,B
LCALL SendByteA
MOV B,#DataHead ; 发送数据贞头
MOV TxdBuf,B
ADD A,B
LCALL SendByteA
MOV B,CallAddr ; 发送被呼的主机地址
MOV TxdBuf,B ;
ADD A,B
LCALL SendByteA
MOV B,#SelfAddr ; 发送本机地址
MOV TxdBuf,B
ADD A,B
LCALL SendByteA
MOV B,FuncCode ; 发送状态码
MOV TxdBuf,B
ADD A,B
LCALL SendByteA
MOV R0,#SendBuf
MOV R1,#10 ; 发送10个字节
SendToSpdCpu1: movx a,@R0
mov b,a
; MOVx B,@R0
INC R0
MOV TxdBuf,B
ADD A,B
LCALL SendByteA
DJNZ R1,SendToSpdCpu1
MOV TxdBuf,A
LCALL SendByteA ; 发送累加和
SETB EA
RET
;
; ******* 发送一个字节到速度模块 *******
;
SendByteA: PUSH ACC
MOV A,TxdBuf
MOV BitCntA,#8
CLR TxdPortA
SETB TxdFlagA
SendByteA1: CALL BaudDelayA1
RRC A
MOV TxdPortA,C
DJNZ BitCntA,SendByteA1
CALL BaudDelayA1
SETB TxdPortA
CALL BaudDelayA1
CLR TxdFlagA
LCALL DL1MS
POP ACC
RET
;
; ******* 发送八个字节到键盘模块 *******
;
SendDatToSubB: CLR EA
CLR A
MOV B,#DataHead ; 发送数据贞头
MOV TxdBuf,B
ADD A,B
LCALL SendByteB
MOV B,#DataHead ; 发送数据贞头
MOV TxdBuf,B
ADD A,B
LCALL SendByteB
MOV B,CallAddr ; 发送被呼的主机地址
MOV TxdBuf,B ;
ADD A,B
LCALL SendByteB
MOV B,#SelfAddr ; 发送本机地址
MOV TxdBuf,B
ADD A,B
LCALL SendByteB
MOV B,FuncCode ; 发送状态码
MOV TxdBuf,B
ADD A,B
LCALL SendByteB
MOV R0,#SendBuf
MOV R1,#2 ; 发送两个字节
SendDatToSubB1: movx a,@R0
mov b,a
;MOVx B,@R0
INC R0
MOV TxdBuf,B
ADD A,B
LCALL SendByteB
DJNZ R1,SendDatToSubB1
MOV TxdBuf,A
LCALL SendByteB ; 发送累加和
SETB EA
RET
;
; *******发送一个字节到键盘模块 *******
;
SendByteB: PUSH ACC
MOV A,TxdBuf
MOV BitCntB,#8
CLR TxdPortB
SETB TxdFlagB
SendByteB1: CALL BaudDelayB1
RRC A
MOV TxdPortB,C
DJNZ BitCntB,SendByteB1
CALL BaudDelayB1
SETB TxdPortB
CALL BaudDelayB1
CLR TxdFlagB
POP ACC
RET
;
; 资源使用:PAGE=2 R0 , R2 , R6 , R7 , ACC , B
;
; ******* 中断接收16个调速模块数据 *******
;
Int0RecvCom: CLR EX0
PUSH ACC
PUSH B
PUSH PSW
CLR PSW.3 ; RX : PAGE 2
SETB PSW.4
CLR RxdErrA
LCALL BaudDelayA2
JB RxdPortA,Int0RecvCom8 ; 判断是否起始位
JB RxdPortA,Int0RecvCom8 ; 判断是否起始位
MOV DPTR,#Int0Buf
MOV B,#16 ; 一次接收16个字节
MOV R6,#250
Int0RecvCom1: MOV R7,#250
MOV BitCntA,#08
Int0RecvCom2: LCALL BaudDelayA1
MOV C,RxdPortA
RRC A
DJNZ BitCntA,Int0RecvCom2
MOVX @DPTR,A
INC DPTR
LCALL BaudDelayA1
JNB RxdPortA,Int0RecvCom8 ; 判断是否停止位(高电平)
JNB RxdPortA,Int0RecvCom8 ; 判断是否停止位(高电平)
MOV BitCntA,#250
Int0RecvCom3: JB RxdPortA,Int0RecvCom4 ; 判断是否下一起始位
JB RxdPortA,Int0RecvCom4 ; 判断是否下一起始位
SJMP Int0RecvCom5
Int0RecvCom4: DJNZ BitCntA,Int0RecvCom3
NOP
Int0RecvCom5: LCALL BaudDelayA2
DJNZ B,Int0RecvCom7
LCALL BaudDelayA1
JNB RxdPortA,Int0RecvCom8 ; 判断是否结束位
JNB RxdPortA,Int0RecvCom8 ; 判断是否结束位
MOV DPTR,#Int0Buf ; 判断校验和是否正确
MOV R2,#14
CLR A
MOVX A,@DPTR
MOV R3,A ; 1
INC DPTR
Int0RecvCom6: MOVX A,@DPTR
ADD A,R3
MOV R3,A ;1+2
INC DPTR
DJNZ R2,Int0RecvCom6
MOVx A,@DPTR
XRL A,R3
JNZ Int0RecvCom8
LCALL RecvSpdCpuDat ; 接收调速模块数据
POP PSW
POP B
POP ACC
SETB EX0
RETI
Int0RecvCom7: DJNZ R7,Int0RecvCom1
DJNZ R6,Int0RecvCom1
Int0RecvCom8: SETB RxdErrA
POP PSW
POP B
POP ACC
SETB EX0
RETI
;
; 资源使用:PAGE=2 R1 , R3 , R4 , R5 , ACC , B
;
; ******* 中断接收八个键盘模块数据 *******
;
Int1RecvCom: CLR EX1
PUSH ACC
PUSH B
PUSH PSW
CLR PSW.3 ; RX : PAGE 2
SETB PSW.4
CLR RxdErrB
LCALL BaudDelayB2
JB RxdPortB,Int1RecvCom8 ; 判断是否起始位
JB RxdPortB,Int1RecvCom8 ; 判断是否起始位
MOV R1,#Int1Buf
MOV B,#08 ; 一次接收08个字节
MOV R4,#250
Int1RecvCom1: MOV R5,#250
MOV BitCntB,#08
Int1RecvCom2: LCALL BaudDelayB1
MOV C,RxdPortB
RRC A
DJNZ BitCntB,Int1RecvCom2
MOV @R1,A
INC R1
LCALL BaudDelayB1
JNB RxdPortB,Int1RecvCom8 ; 判断是否停止位(高电平)
JNB RxdPortB,Int1RecvCom8 ; 判断是否停止位(高电平)
MOV BitCntB,#250
Int1RecvCom3: JB RxdPortB,Int1RecvCom4 ; 判断是否下一起始位
JB RxdPortB,Int1RecvCom4 ; 判断是否下一起始位
SJMP Int1RecvCom5
Int1RecvCom4: DJNZ BitCntB,Int1RecvCom3
NOP
Int1RecvCom5: LCALL BaudDelayB2
DJNZ B,Int1RecvCom7
LCALL BaudDelayB1
JNB RxdPortB,Int1RecvCom8 ; 判断是否结束位
JNB RxdPortB,Int1RecvCom8 ; 判断是否结束位
MOV R1,#Int1Buf
MOV R2,#7
CLR A
Int1RecvCom6: ADD A,@R1
INC R1
DJNZ R2,Int1RecvCom6
MOV B,@R1
XRL A,B
; JNZ Int1RecvCom8
MOV R1,#Int1Buf+5
MOV A,@R1
MOV KeyNumber,A
SETB CommandBF
POP PSW
POP B
POP ACC
SETB EX1
RETI
Int1RecvCom7: DJNZ R5,Int1RecvCom1
DJNZ R4,Int1RecvCom1
Int1RecvCom8: SETB RxdErrB
POP PSW
POP B
POP ACC
SETB EX1
RETI
;
; ******* 波特率产生子程序 *******
;
BaudDelayA1: MOV R2,#BaudVal
BaudDelA1: DJNZ R2,BaudDelA1
RET
BaudDelayA2: MOV R2,#StrtVal
BaudDelA2: DJNZ R2,BaudDelA2
RET
;
; ******* 波特率产生子程序 *******
;
BaudDelayB1: MOV R3,#BaudVal
BaudDelB1: DJNZ R3,BaudDelB1
RET
BaudDelayB2: MOV R3,#StrtVal
BaudDelB2: DJNZ R3,BaudDelB2
RET
;
; ****** 接收调速模块数据 ******
;
RecvSpdCpuDat: MOV DPTR,#Int0Buf ; 通信接收缓冲区(16Byte)
MOVX A,@DPTR
CLR C
SUBB A,#0AAH ; 判断贞头
JZ RecvSpdCpuDat2
RET
RecvSpdCpuDat2: INC DPTR
MOVX A,@DPTR
CLR C
SUBB A,#0AAH ; 判断贞头
JZ RecvSpdCpuDat3
RET
RecvSpdCpuDat3: INC DPTR
MOVX A,@DPTR
CLR C
SUBB A,#00H ; 被呼叫机(主机)地址
JZ RecvSpdCpuDat4
RET
RecvSpdCpuDat4: INC DPTR
MOVX A,@DPTR
MOV HjjAddr,A ; 呼叫机的地址
INC DPTR
MOVX A,@DPTR ; 取功能码
INC DPTR
CJNE A,#RecvCpu2Func01,RecvSpdCpuDat5
LCALL JsKglZt ; 接收开关量状态
LJMP RecvSpdCpuEnd
RecvSpdCpuDat5: CJNE A,#RecvCpu2Func02,RecvSpdCpuDat6
LJMP RecvSpdCpuEnd
RecvSpdCpuDat6: CJNE A,#RecvCpu2Func03,RecvSpdCpuDat7
LJMP RecvSpdCpuEnd
RecvSpdCpuDat7: CJNE A,#RecvCpu2Func04,RecvSpdCpuDat8
LJMP RecvSpdCpuEnd
RecvSpdCpuDat8: CJNE A,#RecvCpu2Func05,RecvSpdCpuDat9
LJMP RecvSpdCpuEnd
RecvSpdCpuDat9: CJNE A,#RecvCpu2Func06,RecvSpdCpuDat10
LJMP RecvSpdCpuEnd
RecvSpdCpuDat10:CJNE A,#RecvCpu2Func07,RecvSpdCpuDat11
LJMP RecvSpdCpuEnd
RecvSpdCpuDat11:CJNE A,#RecvCpu2Func08,RecvSpdCpuDat12
LJMP RecvSpdCpuEnd
RecvSpdCpuDat12:CJNE A,#RecvCpu2Func09,RecvSpdCpuDat13
LJMP RecvSpdCpuEnd
RecvSpdCpuDat13:CJNE A,#RecvCpu2Func10,RecvSpdCpuDat14
LJMP RecvSpdCpuEnd
RecvSpdCpuDat14:CJNE A,#RecvCpu2Func11,RecvSpdCpuDat15
LJMP RecvSpdCpuEnd
RecvSpdCpuDat15:CJNE A,#RecvCpu2Func12,RecvSpdCpuDat16
LJMP RecvSpdCpuEnd
RecvSpdCpuDat16:CJNE A,#RecvCpu2Func13,RecvSpdCpuDat17
LJMP RecvSpdCpuEnd
RecvSpdCpuDat17:CJNE A,#RecvCpu2Func14,RecvSpdCpuDat18
LJMP RecvSpdCpuEnd
RecvSpdCpuDat18:CJNE A,#RecvCpu2Func15,RecvSpdCpuDat19
LJMP RecvSpdCpuEnd
RecvSpdCpuDat19:CJNE A,#RecvCpu2Func16,RecvSpdCpuEnd
LJMP RecvSpdCpuEnd
RecvSpdCpuEnd: RET
;
; ******* 接收开关量状态 *******
;
JsKglZt: MOV A,@R0
MOV KglStatus,A
RET
;
; 资源使用:PAGE=3 R1 , R2 , R6 , R7 , ACC , B
;
; ****** 接收远程CPU指令 ******
;
RecvFarCpuDat: CLR RI
PUSH PSW
PUSH ACC
PUSH B
SETB PSW.3 ; RX : PAGE 3
SETB PSW.4
MOV A,SBUF
XRL A,#DataHead
JZ RecvFarCpuDat1
MOV A,SBUF
POP B
POP ACC
POP PSW
RETI
RecvFarCpuDat1: MOV R6,#200
RecvFarCpuDat2: MOV R7,#200
RecvFarCpuDat3: JNB RI,RecvFarCpuDat4
CLR RI
MOV A,SBUF
XRL A,#DataHead
JZ RecvFarCpuDat5
MOV A,SBUF
POP B
POP ACC
POP PSW
RETI
RecvFarCpuDat4: DJNZ R7,RecvFarCpuDat3
DJNZ R6,RecvFarCpuDat2
MOV A,SBUF
POP B
POP ACC
POP PSW
RETI
RecvFarCpuDat5: MOV R6,#200
RecvFarCpuDat6: MOV R7,#200
RecvFarCpuDat7: JNB RI,RecvFarCpuDat8
CLR RI
MOV A,SBUF
MOV B,A
XRL A,#CurrentAdr ; 广播地址
JZ RecvFarCpuDat9
MOV A,B
MOV B,#SelfAddr ; 本机地址
CLR C
SUBB A,B
JZ RecvFarCpuDat9
MOV A,SBUF
POP B
POP ACC
POP PSW
RETI
RecvFarCpuDat8: DJNZ R7,RecvFarCpuDat7
DJNZ R6,RecvFarCpuDat6
MOV A,SBUF
POP B
POP ACC
POP PSW
RETI
RecvFarCpuDat9: MOV R1,#RecvBuf
MOV R2,#RecvNum-3 ; 一条记录字节数
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -