📄 c34dsio.asm
字号:
inc r0
mov a, @r0
mov r6, a
inc r0
call eewr2h
inc r5
inc r5
djnz r4, SetP4
call WREN_CMD
MOV R6, #SR_NORM ; watchdog 1.4s protect 100--1ffh ee
call WRSR_CMD
SETB EWOK ; EEPROM is not admitted to write
clr xwp
SetPEnd: setb es
ret
;============================================
; 地址错误应答
;--------------------------------------------
ErrorAnswer:
mov r0, #ComBufferAd+2
mov @r0, #0ffh ; 没有相应卡错误
mov r3, #3
call WriteReadOkAnswer ; 发送ComBufferAd中应答信息
ret
;===========================================
; slave应答(发送)
; input :r3 byte num. (except CRC)
; 发送commbuffer中应答信息
; using r0,r3
;-------------------------------------------
WriteReadOkAnswer:
MOV CRCLo, #0FFH
MOV CRCHi, #0FFH
MOV A, #ComBufferAd
MOV R0, A
SETB SioTxRx
WOA1: MOV A, @R0
CALL SendByte_CRC
INC R0
DJNZ R3, WOA1
MOV A, CRCLo
CALL SendByte
MOV A, CRCHi
CALL SendByte
RET
;===========================================
;INPUT : A = byte num. to be transed
;output: bCRCOk
;-------------------------------------------
CheckCRC:
mov CRCLo, #0ffh
mov CRCHi, #0ffh
mov r3, a
mov r0, #ComBufferAd
CkCRC1: mov a, @r0
call ProduceCRC
inc r0
djnz r3, CkCRC1
mov a, @r0
xrl a, CRCLo
jnz CkCRCEr
inc r0
mov a, @r0
xrl a, CRCHi
jnz CkCRCEr
setb bCRCOk
ret
CkCRCEr: clr bCRCOk
ret
;===========================================
;input : a = new data
;output: CRCHi CRCLo
;-------------------------------------------
ProduceCRC:
push dph
push dpl
xrl a, CRCLo
push acc ; a =iIndax
mov dptr, #GetCRCLo
movc a, @a+dptr
xrl a, CRCHi
mov CRCLo, a
pop acc ; a =iIndax
mov dptr, #GetCRCHi
movc a, @a+dptr
mov CRCHi, a
pop dpl
pop dph
ret
;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
;===========================================
; 接收R3字节
; input : r3 receive num.,r0 buffer pointer
; output: bReceiveEr,r0 point to next
; A=last byte
; using : r0,r3,r6,r7
;-------------------------------------------
ReceiveSub:
MOV R7, #7FH
Rece2: MOV R6, #0FFH
Rece3: JNB RI, Rece4
CLR RI
MOV A, SBUF
MOV @R0, A
INC R0
DJNZ R3, ReceiveSub
CLR bReceiveEr
JMP Rece5
Rece4: DJNZ R6, Rece3
DJNZ R7, Rece2
SETB bReceiveEr
Rece5: RET
;===========================================
; 字节发送
;-------------------------------------------
SendByte_CRC:
PUSH ACC
CALL ProduceCRC
POP ACC
SendByte:MOV SBUF, A
JNB TI, $
CLR TI
RET
;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
;--------------------------------------------------------------------------------------------------
; CRC低位字节值表
;--------------------------------------------------------------------------------------------------
GetCRCLo:db 00h,0C1h, 81h, 40h, 01h,0C0h, 80h, 41h, 01h,0C0h, 80h, 41h, 00h,0C1h, 81h, 40h
db 01h,0C0h, 80h, 41h, 00h,0C1h, 81h, 40h, 00h,0C1h, 81h, 40h, 01h,0C0h, 80h, 41h
db 01h,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
db 01h,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
db 00h,0C1h, 81h, 40h, 01h,0C0h, 80h, 41h, 01h,0C0h, 80h, 41h, 00h,0C1h, 81h, 40h
db 01h,0C0h, 80h, 41h, 00h,0C1h, 81h, 40h, 00h,0C1h, 81h, 40h, 01h,0C0h, 80h, 41h
db 01h,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
db 00h,0C1h, 81h, 40h, 01h,0C0h, 80h, 41h, 01h,0C0h, 80h, 41h, 00h,0C1h, 81h, 40h
db 01h,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
db 01h,0C0h, 80h, 41h, 00h,0C1h, 81h, 40h, 00h,0C1h, 81h, 40h, 01h,0C0h, 80h, 41h
db 01h,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
;--------------------------------------------------------------------------------------------------
; CRC高位字节值表
;--------------------------------------------------------------------------------------------------
GetCRCHi:db 00h,0C0h,0C1h, 01h,0C3h, 03h, 02h,0C2h,0C6h, 06h, 07h,0C7h, 05h,0C5h,0C4h, 04h
db 0CCh, 0Ch, 0Dh,0CDh, 0Fh,0CFh,0CEh, 0Eh, 0Ah,0CAh,0CBh, 0Bh,0C9h, 09h, 08h,0C8h
db 0D8h, 18h, 19h,0D9h, 1Bh,0DBh,0DAh, 1Ah, 1Eh,0DEh,0DFh, 1Fh,0DDh, 1Dh, 1Ch,0DCh
db 14h,0D4h,0D5h, 15h,0D7h, 17h, 16h,0D6h,0D2h, 12h, 13h,0D3h, 11h,0D1h,0D0h, 10h
db 0F0h, 30h, 31h,0F1h, 33h,0F3h,0F2h, 32h, 36h,0F6h,0F7h, 37h,0F5h, 35h, 34h,0F4h
db 3Ch,0FCh,0FDh, 3Dh,0FFh, 3Fh, 3Eh,0FEh,0FAh, 3Ah, 3Bh,0FBh, 39h,0F9h,0F8h, 38h
db 28h,0E8h,0E9h, 29h,0EBh, 2Bh, 2Ah,0EAh,0EEh, 2Eh, 2Fh,0EFh, 2Dh,0EDh,0ECh, 2Ch
db 0E4h, 24h, 25h,0E5h, 27h,0E7h,0E6h, 26h, 22h,0E2h,0E3h, 23h,0E1h, 21h, 20h,0E0h
db 0A0h, 60h, 61h,0A1h, 63h,0A3h,0A2h, 62h, 66h,0A6h,0A7h, 67h,0A5h, 65h, 64h,0A4h
db 6Ch,0ACh,0ADh, 6Dh,0AFh, 6Fh, 6Eh,0AEh,0AAh, 6Ah, 6Bh,0ABh, 69h,0A9h,0A8h, 68h
db 78h,0B8h,0B9h, 79h,0BBh, 7Bh, 7Ah,0BAh,0BEh, 7Eh, 7Fh,0BFh, 7Dh,0BDh,0BCh, 7Ch
db 0B4h, 74h, 75h,0B5h, 77h,0B7h,0B6h, 76h, 72h,0B2h,0B3h, 73h,0B1h, 71h, 70h,0B0h
db 50h, 90h, 91h, 51h, 93h, 53h, 52h, 92h, 96h, 56h, 57h, 97h, 55h, 95h, 94h, 54h
db 9Ch, 5Ch, 5Dh, 9Dh, 5Fh, 9Fh, 9Eh, 5Eh, 5Ah, 9Ah, 9Bh, 5Bh, 99h, 59h, 58h, 98h
db 88h, 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
;--------------------------------------
bdtab: dw 90fdh, 0c8feh, 64ffh, 0b2ffh, 0d9ffh, 0edffh
;**********************************************************
; SIO interrupt subroutine
; used r0,r2,r3,r4(siosum),r6,r7
; BANK 2
;----------------------------------------------------------
SioSelf:
MOV A, SBUF
CJNE A,COMAD,SioComSEn
MOV R7, #7FH
SIO2: MOV R6, #0FFH
SIO3: JBC RI, SIO4 ; receive command
DJNZ R6, SIO3
DJNZ R7, SIO2
SJMP SioComSEn
SIO4: MOV A, SBUF
MOV R3, #0FFH ; delay 1.0ms
DJNZ R3, $
MOV R3, #0FFH ; delay 1.0ms
DJNZ R3, $
;
;
CJNE A,#0A1H,SIOR2
SETB SioTxRx
MOV siosum, #0
MOV A, COMAD ; return COM ADDRESS
CALL TRANSB
MOV A, #0A1H
CALL TRANSB ; return COMMAND
MOV R3, #8 ; trans ob ah al df
MOV R0, #iObjad ; 2 2 2 2
SIR1: MOV A, @R0
CALL TRANSB
INC R0
DJNZ R3, SIR1
MOV SBUF, A
JNB TI, $
CLR TI
SioComSEn:
JMP SioComSEnD
;
SIOR2: CJNE A,#0A2H,SIOR3
SETB SioTxRx
MOV siosum, #0
MOV A, COMAD ; return COM ADDRESS
CALL TRANSB
MOV A, #0A2H
CALL TRANSB ; return COMMAND
MOV R3, #14 ; trans cy pp ip dp bp up cp
MOV R0, #iCyad ; 2 2 2 2 2 2 2
AJMP SIR1
;
SIOR3: CJNE A,#0A3H,SIOW1
SETB SioTxRx
MOV siosum, #0
MOV A, COMAD ; return COM ADDRESS
CALL TRANSB
MOV A, #0A3H
CALL TRANSB ; return COMMAND
MOV R3, #10 ; trans yi aout stat poil cold lyi
MOV R0, #iYIad ; 2 2 1 1 2 2
AJMP SIR1
;--------------------------------
SIOW1: CJNE A,#0B1H,SIOW2
SETB SioTxRx
MOV A, COMAD ; return COM ADDRESS
CALL TRANSB
MOV A, #0B1H
CALL TRANSB ; return COMMAND
;
CLR SioTxRx
MOV R0, #ComBufferAd
MOV siosum, #0
SETB bSetAlrPara
MOV R3, #9 ; receive ob ah al df SUM
SIW1: MOV R7, #7FH ; 9 bytes 2 2 2 2 1
SIW2: MOV R6, #0FFH
SIW3: JNB RI, SIW5
CLR RI
MOV A, SBUF
DJNZ R3, SIW4
XRL A, siosum
;
MOV R7, #0FFH
DJNZ R7, $ ; delay 1.0ms
SETB SioTxRx
MOV SBUF, A ; return 0 for ok else false
JNB TI, $
CLR TI
JNZ SioComSEn
SETB USIOB
JMP SioComSEnD
SIW4: MOV @R0, A
ADD A, siosum
MOV siosum, A
INC R0
JMP SIW1
SIW5: DJNZ R6, SIW3
DJNZ R7, SIW2
JMP SioComSEnD
;
SIOW2: CJNE A,#0B2H,SIOW3
SETB SioTxRx
MOV A, COMAD ; return COM ADDRESS
CALL TRANSB
MOV A, #0B2H
CALL TRANSB ; return COMMAND
;
CLR SioTxRx
MOV R0, #ComBufferAd
MOV siosum, #0
SETB bSetPidPara
MOV R3, #15 ; receive cy pp ip dp bp up cp SUM
JMP SIW1 ; 15 bytes 2 2 2 2 2 2 2 1
;
SIOW3: CJNE A,#0B3H,SioComSEnD
SETB SioTxRx
MOV A, COMAD ; return COM ADDRESS
CALL TRANSB
MOV A, #0B3H
CALL TRANSB ; return COMMAND
;
CLR SioTxRx
MOV R0, #ComBufferAd
MOV siosum, #0
SETB W3B
MOV R3, #3 ; receive aout SUM
SETB PC_HAND
JMP SIW1 ; 2 1
SioComSEnD:
RET
;
TRANSB: MOV SBUF, A
JNB TI, $
CLR TI
ADD A, siosum
MOV siosum, A
RET
;************************************************************
; pcsio used to write pc parameter to ee
;------------------------------------------------------------
pcsio: LCALL WREN_CMD
MOV R6, #sr_setp ; protect 17f--1ffh ee
LCALL WRSR_CMD
mov r0, #ComBufferAd
jnb w1b, pcww2
clr w1b ;
mov r5, #eObad ;
mov r3, #4 ; ob ah al df
pcww1: mov a, @r0
mov r6, a
inc r0
mov a, @r0
mov r7, a
inc r0
clr ewok
lcall eewr2h
setb ewok
inc r5
inc r5
djnz r3, pcww1
pcwend: LCALL WREN_CMD
MOV R6, #sr_norm ; watchdog 1.4s protect 100--1ffh ee
LCALL WRSR_CMD
mov sioby, #0
ret
;
pcww2: jnb w2b, pcww3
clr w2b ;
mov r5, #eCYad
mov r3, #7 ; cy pp ip dp bp up cp
ajmp pcww1
pcww3: jnb w3b, pcwwe
clr w3b
mov pch_c, #120 ; 60s
mov suml, #0
mov sumh, #0
mov r1, #ComBufferAd
mov a, @r1
mov r6, a
mov aoutl, a
inc r1
mov a, @r1
mov r7, a
mov aouth, a
mov r5, #eHandOutad
clr ewok
Lcall eewr2
setb ewok
Lcall tpan
pcwwe: ajmp pcwend
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -