📄 f200asm.asm
字号:
NAME FBPROGRAM
$INCLUDE(F200ASM.INC)
PUBLIC POWER_ON_CPU,POWER_OFF_CPU,_RESET_CPU,_YCL_RESET_CPU
PUBLIC _COMMAND_T0_CPU,_COMMAND_T1_CPU,RST_CPU,OK_RESET_CPU,OK_RESET_SAM,ERR_RESET_CPU,ERR_RESET_SAM
PUBLIC POWER_ON_SAM,POWER_OFF_SAM,_RESET_SAM
PUBLIC _COMMAND_T0_SAM,_COMMAND_T1_SAM,RST_SAM
PUBLIC PROTOCOL_CPU,PROTOCOL_SAM
PUBLIC ICCARD_BAK,FLASH_BAK
FBDATA SEGMENT DATA
FBCODE SEGMENT CODE
FBBIT SEGMENT BIT
RSEG FBDATA
PROTECT_TIME_CPU: DS 1
PROTECT_TIME_SAM: DS 1
INS: DS 1
INSBU: DS 1 ;INS补码
LER: DS 1
LC: DS 1
RETNUM: DS 1
BAND_DELAY_CPU: DS 1
BAND_DELAY_SAM: DS 1
ICCARD_BAK: DS 1
FLASH_BAK: DS 1
VER_TIME: DS 1 ;校验错误后数据重新传送(接收)次数
R3BAK: DS 1 ;
OFFSET: DS 1 ;P3中DATA的偏移量
DPLBAK: DS 1 ;
DPHBAK: DS 1 ;
DPLBUBAK: DS 1 ;
DPHBUBAK: DS 1 ;
RSEG FBBIT
RST_CPU: DBIT 1
RST_SAM: DBIT 1
PROTOCOL_CPU: DBIT 1
PROTOCOL_SAM: DBIT 1
PCB_CPU: DBIT 1
PCB_SAM: DBIT 1
PROMISE_CPU: DBIT 1
PROMISE_SAM: DBIT 1
ERR_RESET_CPU: DBIT 1 ;复位应答为0X3D错误标志0:无 1:是
OK_RESET_CPU: DBIT 1 ;复位应答错误标志0:错误 1:正确
INS_BUBIT: DBIT 1 ;过程字节为INS补码
OK_RESET_SAM: DBIT 1 ;复位应答错误标志0:错误 1:正确
ERR_RESET_SAM: DBIT 1 ;复位应答为0X3D错误标志0:无 1:是
RSEG FBCODE
;***************************************************************************;
; 每个bit之间允许的单周期指令数 = f/(12*baut rate)
;18432M (9600bps-每个bit之间允许160条单周期指令-现有12条 148=160-12 74=148/2)
;18432M (19200bps-每个bit之间允许80条单周期指令-现有12条 68=80-12 34=68/2)
;18432M (38400bps-每个bit之间允许40条单周期指令-现有12条 28=40-12 14=28/2)
RECEIVECPU_BYTEA:
DJNZ R1,RECEIVECPU_BYTED
JB CPU_IO,RECEIVECPU_BYTEB
LJMP RECEIVECPU_BYTE1
RECEIVECPU_BYTEB:
DJNZ R2,RECEIVECPU_BYTED
JB CPU_IO,RECEIVECPU_BYTEC
LJMP RECEIVECPU_BYTE1
RECEIVECPU_BYTEC:
DJNZ R3,RECEIVECPU_BYTED
SETB CPU_IO
CLR C
RET
RECEIVECPU_BYTED:
JB CPU_IO,RECEIVECPU_BYTE0
LJMP RECEIVECPU_BYTE1
;start
RECEIVECPU_BYTE:
MOV VER_TIME,#04H
RECEIVECPU_BYTESTAR:
SETB CPU_IO
MOV R2,#00H
MOV R1,#00H
MOV R3BAK,R3
RECEIVECPU_BYTE0:
JB CPU_IO,RECEIVECPU_BYTEA ;START ;2
NOP ;1
NOP ;1
RECEIVECPU_BYTE1:
NOP ;1
NOP ;1
NOP ;1
NOP ;1
NOP ;1
NOP ;1
MOV R0,BAND_DELAY_CPU ;2
DJNZ R0,$ ;2
NOP ;1
NOP ;1
MOV A,BAND_DELAY_CPU ;1
CLR C ;1
RRC A ;1
MOV R0,A ;1
DJNZ R0,$ ;2
RECEIVECPU_BYTE2:
MOV C,CPU_IO ;BIT0 ;1
JNB PROMISE_CPU,RECEIVECPU_BYTE20 ;2
CPL C ;1
RLC A ;1
LJMP RECEIVECPU_BYTE21 ;2
RECEIVECPU_BYTE20:
RRC A ;1
NOP ;1
NOP ;1
NOP ;1
RECEIVECPU_BYTE21:
NOP ;1
NOP ;1
NOP ;1
MOV R0,BAND_DELAY_CPU ;2
DJNZ R0,$ ;3
RECEIVECPU_BYTE3:
MOV C,CPU_IO ;BIT1 ;1
JNB PROMISE_CPU,RECEIVECPU_BYTE30 ;2
CPL C ;1
RLC A ;1
LJMP RECEIVECPU_BYTE31 ;2
RECEIVECPU_BYTE30:
RRC A ;1
NOP ;1
NOP ;1
NOP ;1
RECEIVECPU_BYTE31:
NOP ;1
NOP ;1
NOP ;1
MOV R0,BAND_DELAY_CPU ;2
DJNZ R0,$ ;3
RECEIVECPU_BYTE4:
MOV C,CPU_IO ;BIT2 ;1
JNB PROMISE_CPU,RECEIVECPU_BYTE40 ;2
CPL C ;1
RLC A ;1
LJMP RECEIVECPU_BYTE41 ;2
RECEIVECPU_BYTE40:
RRC A ;1
NOP ;1
NOP ;1
NOP ;1
RECEIVECPU_BYTE41:
NOP ;1
NOP ;1
NOP ;1
MOV R0,BAND_DELAY_CPU ;2
DJNZ R0,$ ;2
RECEIVECPU_BYTE5:
MOV C,CPU_IO ;BIT3 ;1
JNB PROMISE_CPU,RECEIVECPU_BYTE50 ;2
CPL C ;1
RLC A ;1
LJMP RECEIVECPU_BYTE51 ;2
RECEIVECPU_BYTE50:
RRC A ;1
NOP ;1
NOP ;1
NOP ;1
RECEIVECPU_BYTE51:
NOP ;1
NOP ;1
NOP ;1
MOV R0,BAND_DELAY_CPU
DJNZ R0,$
RECEIVECPU_BYTE6:
MOV C,CPU_IO ;BIT4
JNB PROMISE_CPU,RECEIVECPU_BYTE60
CPL C
RLC A
LJMP RECEIVECPU_BYTE61
RECEIVECPU_BYTE60:
RRC A ;1
NOP ;1
NOP ;1
NOP ;1
RECEIVECPU_BYTE61:
NOP ;1
NOP ;1
NOP ;1
MOV R0,BAND_DELAY_CPU
DJNZ R0,$
RECEIVECPU_BYTE7:
MOV C,CPU_IO ;BIT5
JNB PROMISE_CPU,RECEIVECPU_BYTE70
CPL C
RLC A
LJMP RECEIVECPU_BYTE71
RECEIVECPU_BYTE70:
RRC A ;1
NOP ;1
NOP ;1
NOP ;1
RECEIVECPU_BYTE71:
NOP ;1
NOP ;1
NOP ;1
MOV R0,BAND_DELAY_CPU
DJNZ R0,$
RECEIVECPU_BYTE8:
MOV C,CPU_IO ;BIT6
JNB PROMISE_CPU,RECEIVECPU_BYTE80
CPL C
RLC A
LJMP RECEIVECPU_BYTE81
RECEIVECPU_BYTE80:
RRC A ;1
NOP ;1
NOP ;1
NOP ;1
RECEIVECPU_BYTE81:
NOP ;1
NOP ;1
NOP ;1
MOV R0,BAND_DELAY_CPU
DJNZ R0,$
RECEIVECPU_BYTE9:
MOV C,CPU_IO ;BIT7 ;2
JNB PROMISE_CPU,RECEIVECPU_BYTE90 ;4
CPL C ;1
RLC A ;1
LJMP RECEIVECPU_BYTE91 ;2
RECEIVECPU_BYTE90:
RRC A ;1
NOP ;1
NOP ;1
NOP ;1
RECEIVECPU_BYTE91:
NOP ;1
NOP ;1
NOP ;1
MOV R0,BAND_DELAY_CPU ;2
DJNZ R0,$ ;2
RECEIVECPU_BYTE10: ;奇偶校验位判断
MOV C,CPU_IO ;2
JNB P,RECEIVECPU_BYTE101 ;4
CPL C ;1
RECEIVECPU_BYTE101:
MOV R3,R3BAK
JNC RECEIVECPU_BYTEOK ;4
MOV R0,BAND_DELAY_CPU; ;2奇偶校验位错误
DJNZ R0,$ ;3
CLR CPU_IO ;2 10.5个ETU处拉低CPU_IO电平2个ETU
MOV R0,BAND_DELAY_CPU; ;2
DJNZ R0,$ ;3
MOV R0,BAND_DELAY_CPU; ;2
DJNZ R0,$ ;3
DJNZ VER_TIME,RECEIVECPU_BYTEAGAIN ;3 重新接收数据3次
MOV R3,#0H
LJMP RECEIVECPU_BYTEC
RECEIVECPU_BYTEAGAIN:
LJMP RECEIVECPU_BYTESTAR
RECEIVECPU_BYTEOK: ;奇偶校验位正确
PUSH ACC ;2
MOV A,BAND_DELAY_CPU; ;1
CLR C ;1
RRC A ;1
MOV R0,A ;1
DJNZ R0,$ ;2
POP ACC ;2
SETB CPU_IO ;1
SETB C ;1 ;if over time,c=0
RET ;2
;****************************************************************************
DELAY_CPU: ;t=0==>320;t=1==>160
JB PROTOCOL_CPU,DELAY_CPU0 ;2
NOP ;1
MOV R0,#8 ;1
DJNZ R0,$ ;2
MOV R0,BAND_DELAY_CPU ;2
DELAY_CPUA:
NOP
NOP
DJNZ R0,DELAY_CPUA ;2
LJMP DELAY_CPU1 ;2
DELAY_CPU0: ;extra_protect_time
NOP ;1
MOV R0,#3 ;1
DJNZ R0,$ ;2
MOV R0,BAND_DELAY_CPU ;2
DJNZ R0,$ ;2
DELAY_CPU1:
MOV A,PROTECT_TIME_CPU ;1
MOV R4,A ;1
JNZ DELAY_CPU2 ;2
RET
DELAY_CPU2:
NOP ;1
MOV R0,#4 ;1
DJNZ R0,$ ;2
MOV R0,BAND_DELAY_CPU ;2
DJNZ R0,$ ;2
DJNZ R4,DELAY_CPU2 ;2
RET
;****************************************************************************
SENDCPU_BYTE:
MOV VER_TIME,#04H
SENDCPU_BYTESTAR:
PUSH ACC
CLR CPU_IO;START ;1
JNB PROMISE_CPU,SENDCPU_BYTE0 ;2
NOP ;1
NOP ;1
NOP ;1
MOV R0,BAND_DELAY_CPU ;2
DJNZ R0,$ ;2
RLC A ;1
CPL C ;1
LJMP SENDCPU_BYTE01 ;2
SENDCPU_BYTE0:
NOP
NOP
NOP
NOP
NOP
NOP
MOV R0,BAND_DELAY_CPU ;2
DJNZ R0,$ ;2
RRC A ;1
SENDCPU_BYTE01:
MOV CPU_IO,C;BIT0 ;2
JNB PROMISE_CPU,SENDCPU_BYTE1 ;2
NOP ;1
NOP ;1
MOV R0,BAND_DELAY_CPU ;2
DJNZ R0,$ ;2
RLC A ;1
CPL C ;1
LJMP SENDCPU_BYTE11 ;2
SENDCPU_BYTE1: ;
NOP ;
NOP ;
NOP ;
NOP ;
NOP ;
MOV R0,BAND_DELAY_CPU ;2
DJNZ R0,$
RRC A
SENDCPU_BYTE11:
MOV CPU_IO,C ;BIT1
JNB PROMISE_CPU,SENDCPU_BYTE2
NOP
NOP
MOV R0,BAND_DELAY_CPU
DJNZ R0,$
RLC A
CPL C
LJMP SENDCPU_BYTE21
SENDCPU_BYTE2:
NOP
NOP
NOP
NOP
NOP
MOV R0,BAND_DELAY_CPU ;2
DJNZ R0,$
RRC A
SENDCPU_BYTE21:
MOV CPU_IO,C ;BIT2
JNB PROMISE_CPU,SENDCPU_BYTE3
NOP
NOP
MOV R0,BAND_DELAY_CPU
DJNZ R0,$
RLC A
CPL C
LJMP SENDCPU_BYTE31
SENDCPU_BYTE3:
NOP
NOP
NOP
NOP
NOP
MOV R0,BAND_DELAY_CPU ;2
DJNZ R0,$
RRC A
SENDCPU_BYTE31:
MOV CPU_IO,C ;BIT3
JNB PROMISE_CPU,SENDCPU_BYTE4
NOP
NOP
MOV R0,BAND_DELAY_CPU
DJNZ R0,$
RLC A
CPL C
LJMP SENDCPU_BYTE41
SENDCPU_BYTE4:
NOP
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -