?? snt-c485.asm
字號:
MOV DPH,#1
LCALL WRITE_1
INC TEMP1
INC TEMP2
DJNZ R2,DEL_A5 ;以上為跨頁的表地址轉移
MOV R0,#00 ;以下為頁2的表地址轉移
MOV R1,#01
DEL_A5A: MOV DPH,#2
DEL_A6: MOV B,#07H
MOV A,R0
MUL AB
MOV DPL,A
MOV TEMP1,A ;
LCALL READ_1
CJNE A,#0AAH,DEL_A8
MOV A,R1
MOV B,#07H
MUL AB
MOV DPL,A
MOV TEMP2,A
MOV R2,#07H
DEL_A7: MOV DPL,TEMP2
LCALL READ_1
MOV DPL,TEMP1
LCALL WRITE_1
INC TEMP1
INC TEMP2
DJNZ R2,DEL_A7
INC R0
INC R1
LJMP DEL_A6
DEL_A8: LJMP DEL_A3
;*******************************************************
;判斷表地址中是否有所給表號子程序,即從EEPROM中找到要所給
;的表號,將表號序號存于寄存器R2中.YOUBIAO為是否有表標志
;寄存器: R2:地址序號 R3:表號字節數
;R0:所給表號的高字節地址 TEMP:臨時寄存器
;*******************************************
PAN_HAO: MOV R2,#00H
MOV R0,#BADD5
PAN_LOOP: MOV A,R2
CJNE A,#36,PAN_1
PAN_1: JNC PAN_4
MOV A,R2
MOV B,#07
MUL AB
MOV DPL,A
MOV DPH,#01H
LCALL READ_1
INC DPL
CJNE A,#0AAH,PAN_2B
MOV R3,#6
PAN_2: LCALL READ_1
MOV TEMP,A
MOV A,@R0
CJNE A,TEMP,PAN_3
INC DPTR
INC R0
DJNZ R3,PAN_2
SETB YOUBIAO
PAN_2A: RET
PAN_2B: CLR YOUBIAO
RET
PAN_3: INC R2
MOV R0,#BADD5
LJMP PAN_LOOP
PAN_4: MOV A,R2
CLR C
SUBB A,#36
MOV R2,A
PAN_4A: MOV A,R2
MOV B,#07H
MUL AB
MOV DPL,A
MOV DPH,#2
LCALL READ_1
INC DPL
CJNE A,#0AAH,PAN_5B
MOV R3,#6
PAN_5: LCALL READ_1
MOV TEMP,A
MOV A,@R0
CJNE A,TEMP,PAN_6
INC DPTR
INC R0
DJNZ R3,PAN_5
SETB YOUBIAO
MOV A,R2
ADD A,#36
MOV R2,A
PAN_5A: RET
PAN_5B: CLR YOUBIAO
RET
PAN_6: INC R2
MOV R0,#BADD5
LJMP PAN_4A
;*********************************************
;向上位機回應增/刪表地址子程序
;*********************************************
ADDEL: JNB ZS_OK,ADDEL_5
MOV 41H,#97H ;41H:97 起始符
MOV R3,#97H
MOV 42H,#40H ;42H:40 電表代號
MOV A,R3
ADD A,42H
MOV R3,A
MOV A,TEMP
MOV 43H,A
ADD A,R3
MOV R3,A
MOV R2,#6 ;43H-49H:A6-A0 采集器地址
MOV R0,#BADD5
MOV R1,#44H
ADDEL_1: MOV A,@R0
MOV @R1,A
ADD A,R3
MOV R3,A
INC R1
INC R0
DJNZ R2,ADDEL_1
MOV A,R3
MOV @R1,A ;4AH:R3 校驗和
INC R1
MOV @R1,#16H ;4BH:16 結束符
MOV R1,#41H
MOV R2,#11
ADDEL_2: MOV SBUF,@R1
ADDEL_3: JBC TI,ADDEL_4
LJMP ADDEL_3
ADDEL_4: INC R1
DJNZ R2,ADDEL_2
ADDEL_5: RET
;************************************
;定時器T0中斷服務子程序,0.05S中斷一次
;************************************
TINT0: MOV TH0,#4CH ;T=11059200*0.05/12=B400H 10000-B400=4C00H
SETB TINT_F
;*** 以下用于10S延時并判斷是否到 ***
JNB ST_YAN,TINT2 ;是否允許10秒定時
PUSH ACC
PUSH PSW
CLR C
MOV A,MINLAY_L
ADD A,#01H
MOV MINLAY_L,A
CLR C
SUBB A,#0C8H
JC TINT1
MOV MINLAY_L,#0
SETB MIN_FLAG
TINT1: POP PSW
POP ACC
TINT2: RETI
;***********************串行中斷服務子程序************************
;本程序用于接收上位機下達的命令,發送數據時不進中斷
;*****************************************************************
ESINT: CLR ES
PUSH ACC
PUSH B
PUSH DPH
PUSH DPL
PUSH PSW
PUSH TEMP
CLR RS1 ;工作寄存器用1區
SETB RS0
MOV A,SBUF
CLR RI
MOV R5,A
MOV A,COMMTYPE ;命令字類型
CJNE A,#00H,ACOMM1A
MOV A,RECCNT
RL A
MOV DPTR,#ACOMM1 ;COMMTYPE=0時,判斷如下
JMP @A+DPTR
ACOMM1: AJMP ACOMM2 ;幀頭
AJMP ACOMM3 ;表類型
AJMP ACOMM4 ;控制碼
ACOMM1A: LJMP BCOMM
ACOMM2: MOV A,R5 ;判斷幀頭
CJNE A,#97H,ACOMM2A
INC RECCNT
MOV R3,#97H
LJMP RETURN
ACOMM2A: MOV COMMTYPE,#0
MOV RECCNT,#0
LJMP RETURN
ACOMM3: MOV A,R5 ;判斷表類型
CJNE A,#40H,ACOMM3A
INC RECCNT
MOV A,R3
ADD A,R5
MOV R3,A
LJMP RETURN
ACOMM3A: MOV COMMTYPE,#0
MOV RECCNT,#0
; LJMP RETURN
LJMP ACOMM2
ACOMM4: MOV A,R5 ;判斷控制碼
MOV B,A
CJNE A,#0A1H,ACOMM4A
MOV COMMTYPE,#01H ;設置采集器地址
LJMP ACOMM4H
ACOMM4A: CJNE A,#0A2H,ACOMM4B
MOV COMMTYPE,#02H ;增表地址
LJMP ACOMM4H
ACOMM4B: CJNE A,#0A3H,ACOMM4C
MOV COMMTYPE,#03H ;刪表地址
LJMP ACOMM4H
ACOMM4C: CJNE A,#00H,ACOMM4D
MOV COMMTYPE,#04H ;讀單表數據
LJMP ACOMM4H
ACOMM4D: CJNE A,#0A5H,ACOMM4E
MOV COMMTYPE,#05H ;讀表地址
LJMP ACOMM4H
ACOMM4E: CJNE A,#0A6H,ACOMM4F
MOV COMMTYPE,#06H ;寫表地址
LJMP ACOMM4H
ACOMM4F: CJNE A,#0A7H,ACOMM4G
MOV COMMTYPE,#07H ;抄表數據
LJMP ACOMM4H
ACOMM4G: MOV COMMTYPE,#0
MOV RECCNT,#0
; LJMP RETURN
LJMP ACOMM2
ACOMM4H: INC RECCNT
MOV A,B
ADD A,R3
MOV R3,A
LJMP RETURN
;*****************;設置采集器地址部分*****************
ACOMM4I: LJMP CCOMM
BCOMM: CJNE A,#01H,ACOMM4I
MOV A,RECCNT ;設置采集器地址
CLR C
SUBB A,#03H
RL A
MOV DPTR,#BCOMM1
JMP @A+DPTR
BCOMM1: AJMP BCOMM2 ;數據長度
AJMP BCOMM3 ;地址A6
AJMP BCOMM4 ;地址A5
AJMP BCOMM5 ;地址A4
AJMP BCOMM6 ;地址A3
AJMP BCOMM7 ;地址A2
AJMP BCOMM8 ;地址A1
AJMP BCOMM9 ;地址A0
AJMP BCOMMA ;序列號
AJMP BCOMMB ;校驗和
AJMP BCOMMC ;結束符16H
BCOMM2: MOV A,R5 ;判數據長度
CJNE A,#08H,BCOMM2A
ADD A,R3
MOV R3,A
INC RECCNT
LJMP RETURN
BCOMM2A: MOV COMMTYPE,#0
MOV RECCNT,#0
LJMP RETURN
BCOMM3: MOV A,R5 ;暫存采集器地址A6
MOV ADDR6,A
ADD A,R3
MOV R3,A
INC RECCNT
LJMP RETURN
BCOMM4: MOV A,R5 ;暫存采集器地址A5
MOV ADDR5,A
ADD A,R3
MOV R3,A
INC RECCNT
LJMP RETURN
BCOMM5: MOV A,R5 ;暫存采集器地址A4
MOV ADDR4,A
ADD A,R3
MOV R3,A
INC RECCNT
LJMP RETURN
BCOMM6: MOV A,R5 ;暫存采集器地址A3
MOV ADDR3,A
ADD A,R3
MOV R3,A
INC RECCNT
LJMP RETURN
BCOMM7: MOV A,R5 ;暫存采集器地址A2
MOV ADDR2,A
ADD A,R3
MOV R3,A
INC RECCNT
LJMP RETURN
BCOMM8: MOV A,R5 ;暫存采集器地址A1
MOV ADDR1,A
ADD A,R3
MOV R3,A
INC RECCNT
LJMP RETURN
BCOMM9: MOV A,R5 ;暫存采集器地址A0
MOV ADDR0,A
ADD A,R3
MOV R3,A
INC RECCNT
LJMP RETURN
BCOMMA: MOV A,R5 ;暫存采集器序列號
MOV SERNO,A
ADD A,R3
MOV R3,A
INC RECCNT
LJMP RETURN
BCOMMB: MOV A,R5 ;判校驗和
MOV B,A
MOV A,R3
CJNE A,B,BCOMMD
INC RECCNT
LJMP RETURN
BCOMMC: MOV A,R5 ;判結束符
CJNE A,#16H,BCOMMD
LCALL STOR_ADDR ;存采集器地址及序列號
LCALL RET_DI
BCOMMD: MOV COMMTYPE,#0
MOV RECCNT,#0
LJMP RETURN
;***************增表地址部分********************
BCOMMDA: LJMP DCOMM
CCOMM: CJNE A,#02H,BCOMMDA
MOV A,RECCNT ;增加表地址
CLR C
SUBB A,#03H
RL A
MOV DPTR,#CCOMM1
JMP @A+DPTR
CCOMM1: AJMP CCOMM2 ;數據長度
AJMP CCOMM3 ;地址A6
AJMP CCOMM4 ;地址A5
AJMP CCOMM5 ;地址A4
AJMP CCOMM6 ;地址A3
AJMP CCOMM7 ;地址A2
AJMP CCOMM8 ;地址A1
AJMP CCOMM9 ;地址A0
AJMP CCOMMA ;表地址A5
AJMP CCOMMB ;表地址A4
AJMP CCOMMC ;表地址A3
AJMP CCOMMD ;表地址A2
AJMP CCOMME ;表地址A1
AJMP CCOMMF ;表地址A0
AJMP CCOMMG ;校驗和
AJMP CCOMMH ;結束符16H
CCOMM1A: LJMP CCOMMI
CCOMM2: MOV A,R5 ;判數據長度
CJNE A,#0DH,CCOMM1A
ADD A,R3
MOV R3,A
INC RECCNT
LJMP RETURN
CCOMM3: MOV A,R5 ;判采集器地址A6
CJNE A,CK_ADDR6,CCOMM1A
ADD A,R3
MOV R3,A
INC RECCNT
LJMP RETURN
CCOMM4: MOV A,R5 ;判采集器地址A5
CJNE A,CK_ADDR5,CCOMM1A
ADD A,R3
MOV R3,A
INC RECCNT
LJMP RETURN
CCOMM5: MOV A,R5 ;判采集器地址A4
CJNE A,CK_ADDR4,CCOMM1A
ADD A,R3
MOV R3,A
INC RECCNT
LJMP RETURN
CCOMM6: MOV A,R5 ;判采集器地址A3
CJNE A,CK_ADDR3,CCOMM1A
ADD A,R3
MOV R3,A
INC RECCNT
LJMP RETURN
LJMP RETURN
CCOMM7: MOV A,R5 ;判采集器地址A2
CJNE A,CK_ADDR2,CCOMM1A
ADD A,R3
MOV R3,A
INC RECCNT
LJMP RETURN
CCOMM8: MOV A,R5 ;判采集器地址A1
CJNE A,CK_ADDR1,CCOMM1A
ADD A,R3
MOV R3,A
INC RECCNT
LJMP RETURN
CCOMM9: MOV A,R5 ;判采集器地址A0
CJNE A,CK_ADDR0,CCOMM1A
ADD A,R3
MOV R3,A
INC RECCNT
LJMP RETURN
CCOMMA: MOV A,R5 ;暫存表地址A5
MOV DBADR5,A
ADD A,R3
MOV R3,A
INC RECCNT
LJMP RETURN
CCOMMB: MOV A,R5 ;暫存表地址A4
MOV DBADR4,A
ADD A,R3
MOV R3,A
INC RECCNT
LJMP RETURN
CCOMMC: MOV A,R5 ;暫存表地址A3
MOV DBADR3,A
ADD A,R3
MOV R3,A
INC RECCNT
LJMP RETURN
CCOMMD: MOV A,R5 ;暫存表地址A2
MOV DBADR2,A
ADD A,R3
MOV R3,A
INC RECCNT
LJMP RETURN
CCOMME: MOV A,R5 ;暫存表地址A1
MOV DBADR1,A
ADD A,R3
MOV R3,A
INC RECCNT
LJMP RETURN
CCOMMF: MOV A,R5 ;暫存表地址A0
MOV DBADR0,A
ADD A,R3
MOV R3,A
INC RECCNT
LJMP RETURN
CCOMMG: MOV A,R5 ;判校驗和
MOV B,A
MOV A,R3
CJNE A,B,CCOMMI
INC RECCNT
LJMP RETURN
CCOMMH: MOV A,R5 ;判結束符
CJNE A,#16H,CCOMMI
MOV R0,#BADD5
MOV R1,#DBADR5
MOV R2,#6
CCOMMHA: MOV A,@R1
MOV @R0,A
INC R0
INC R1
DJNZ R2,CCOMMHA
LCALL ADDR_ADD ;增加表地址
LCALL ADDEL
MOV COMMTYPE,#0
MOV RECCNT,#0
LJMP RETURN
CCOMMI: MOV COMMTYPE,#0
MOV RECCNT,#0
LJMP RETURN
;***************刪表地址部分***************
CCOMMJ: LJMP ECOMM
DCOMM: CJNE A,#03H,CCOMMJ
MOV A,RECCNT ;刪除表地址
CLR C
SUBB A,#03H
RL A
MOV DPTR,#DCOMM1
JMP @A+DPTR
DCOMM1: AJMP DCOMM2 ;數據長度
AJMP DCOMM3 ;地址A6
AJMP DCOMM4 ;地址A5
AJMP DCOMM5 ;地址A4
AJMP DCOMM6 ;地址A3
AJMP DCOMM7 ;地址A2
AJMP DCOMM8 ;地址A1
AJMP DCOMM9 ;地址A0
AJMP DCOMMA ;表地址A5
AJMP DCOMMB ;表地址A4
AJMP DCOMMC ;表地址A3
AJMP DCOMMD ;表地址A2
AJMP DCOMME ;表地址A1
AJMP DCOMMF ;表地址A0
AJMP DCOMMG ;校驗和
AJMP DCOMMH ;結束符16H
DCOMM1A: LJMP DCOMMI
DCOMM2: MOV A,R5 ;判數據長度
CJNE A,#0DH,DCOMM1A
ADD A,R3
MOV R3,A
INC RECCNT
LJMP RETURN
DCOMM3: MOV A,R5 ;判采集器地址A6
CJNE A,CK_ADDR6,DCOMM1A
ADD A,R3
MOV R3,A
INC RECCNT
LJMP RETURN
DCOMM4: MOV A,R5 ;判采集器地址A5
CJNE A,CK_ADDR5,DCOMM1A
ADD A,R3
MOV R3,A
INC RECCNT
LJMP RETURN
DCOMM5: MOV A,R5 ;判采集器地址A4
CJNE A,CK_ADDR4,DCOMM1A
ADD A,R3
MOV R3,A
INC RECCNT
LJMP RETURN
DCOMM6: MOV A,R5 ;判采集器地址A3
CJNE A,CK_ADDR3,DCOMM1A
ADD A,R3
MOV R3,A
INC RECCNT
LJMP RETURN
LJMP RETURN
DCOMM7: MOV A,R5 ;判采集器地址A2
CJNE A,CK_ADDR2,DCOMM1A
ADD A,R3
MOV R3,A
INC RECCNT
LJMP RETURN
DCOMM8: MOV A,R5 ;判采集器地址A1
CJNE A,CK_ADDR1,DCOMM1A
ADD A,R3
MOV R3,A
INC RECCNT
LJMP RETURN
DCOMM9: MOV A,R5 ;判采集器地址A0
CJNE A,CK_ADDR0,DCOMM1A
ADD A,R3
MOV R3,A
INC RECCNT
LJMP RETURN
DCOMMA: MOV A,R5 ;暫存表地址A5
MOV DBADR5,A
ADD A,R3
MOV R3,A
INC RECCNT
LJMP RETURN
DCOMMB: MOV A,R5 ;暫存表地址A4
MOV DBADR4,A
ADD A,R3
MOV R3,A
INC RECCNT
LJMP RETURN
DCOMMC: MOV A,R5 ;暫存表地址A3
MOV DBADR3,A
ADD A,R3
MOV R3,A
INC RECCNT
LJMP RETURN
DCOMMD: MOV A,R5 ;暫存表地址A2
MOV DBADR2,A
ADD A,R3
MOV R3,A
INC RECCNT
LJMP RETURN
DCOMME: MOV A,R5 ;暫存表地址A1
MOV DBADR1,A
ADD A,R3
MOV R3,A
INC RECCNT
LJMP RETURN
DCOMMF: MOV A,R5 ;暫存表地址A0
MOV DBADR0,A
ADD A,R3
MOV R3,A
INC RECCNT
LJMP RETURN
DCOMMG: MOV A,R5 ;判校驗和
MOV B,A
MOV A,R3
CJNE A,B,DCOMMI
INC RECCNT
LJMP RETURN
DCOMMH: MOV A,R5 ;判結束符
CJNE A,#16H,DCOMMI
MOV R0,#BADD5
MOV R1,#DBADR5
MOV R2,#6
DCOMMHA: MOV A,@R1
MOV @R0,A
INC R0
INC R1
DJNZ R2,DCOMMHA
LCALL DEL_ADDR ;刪除表地址
LCALL ADDEL
MOV COMMTYPE,#0
MOV RECCNT,#0
LJMP RETURN
DCOMMI: MOV COMMTYPE,#0
MOV RECCNT,#0
LJMP RETURN
;*********************讀單表數據命令部分***********
DCOMMJ: LJMP FCOMM
ECOMM: CJNE A,#04H,DCOMMJ
MOV A,RECCNT ;讀單表數據
CLR C
SUBB A,#03H
RL A
MOV DPTR,#ECOMM1
JMP @A+DPTR
ECOMM1: AJMP ECOMM2 ;表地址A5
AJMP ECOMM3 ;表地址A4
AJMP ECOMM4 ;表地址A3
AJMP ECOMM5 ;表地址A2
AJMP ECOMM6 ;表地址A1
AJMP ECOMM7 ;表地址A0
AJMP ECOMM8 ;控制碼
AJMP ECOMM9 ;數據域長度
AJMP ECOMMA ;數據標識A0H
AJMP ECOMMB ;數據標識17H
AJMP ECOMMC ;序列號
AJMP ECOMMD ;數據
AJMP ECOMME ;校驗和
AJMP ECOMMF ;結束符16H
ECOMM2: MOV A,R5 ;暫存表地址A5
MOV DBADR5,A
ADD A,R3
MOV R3,A
INC RECCNT
LJMP RETURN
ECOMM3: MOV A,R5 ;暫存表地址A4
MOV DBADR4,A
ADD A,R3
MOV R3,A
INC RECCNT
LJMP RETURN
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -