📄 dog5
字号:
CLR LED_OUT8
AJMP LED_END
;***************************
;***************************
;从EEPROM中读取数据
;***************************
READ_FROM_NVD: NOP
MOV R0,#SND_BUFF ;得到需读取的地址
INC R0
INC R0
MOV A,@R0
MOV BYTE_ADDRESS,A
ACALL I2C_STRT ;I2C开始
MOV A,#0A0H
ACALL I2C_WRITE_BYTE ;写入器件地址
MOV A,BYTE_ADDRESS
ACALL I2C_WRITE_BYTE ;写入数据地址
ACALL I2C_STRT ;I2C开始
MOV A,#0A1H
ACALL I2C_WRITE_BYTE ;写入读操作
LCALL I2C_READ_BYTE ;从SDA上读取1BYTE数据
ACALL I2C_STOP ;I2C结束
MOV BYTE_DATA,A
MOV R0,#SND_BUFF ;将数据写入需发送的数据包中
INC R0
INC R0
INC R0
MOV @R0,A
MOV A,#SOH_OUT1
NOP
RET
;***************************
;***************************
;向EEPROM中写入数据
;***************************
WRITE_TO_NVD: NOP
MOV R0,#SND_BUFF ;得到需写入的地址
INC R0
INC R0
MOV A,@R0
MOV BYTE_ADDRESS,A
INC R0
MOV A,@R0
MOV BYTE_DATA,A
INC R0
ACALL I2C_STRT
MOV A,#0A0H
ACALL I2C_WRITE_BYTE
MOV A,BYTE_ADDRESS
ACALL I2C_WRITE_BYTE
MOV A,BYTE_DATA
ACALL I2C_WRITE_BYTE
ACALL I2C_STOP
MOV A,#SOH_OUT1
NOP
RET
;***************************
;***************************
;
;***************************
WRITE_NVD: NOP
ACALL I2C_STRT
MOV A,#0A0H
ACALL I2C_WRITE_BYTE
MOV A,BYTE_ADDRESS
ACALL I2C_WRITE_BYTE
MOV A,BYTE_DATA
ACALL I2C_WRITE_BYTE
ACALL I2C_STOP
RET
;******************************
;***************************
;***************************
;
;***************************
READ_BYTE: NOP
ACALL I2C_STRT
MOV A,#0A0H
ACALL I2C_WRITE_BYTE
MOV A,BYTE_ADDRESS
ACALL I2C_WRITE_BYTE
ACALL I2C_STRT
MOV A,#0A1H
ACALL I2C_WRITE_BYTE
LCALL I2C_READ_BYTE
ACALL I2C_STOP
RET
;***************************
;***************************
;
;***************************
I2C_READ_BYTE: NOP
MOV A,#00H
MOV R0,#8
CLR SCL
NOP
I2C_R_BYTE1: SETB SCL
MOV C,SDA
RLC A
CLR SCL
NOP
NOP
DJNZ R0,I2C_R_BYTE1
RET
;***************************
;***************************
;
;***************************
READ_SDA: NOP
MOV A,#00H
CLR CY
MOV R7,#00H
CLR DATA_FLAG
RD_SDA_1: JB SCL,RD_SDA_2
JNB DATA_FLAG,RD_SDA_1
CLR DATA_FLAG
AJMP RD_SDA_1
RD_SDA_2: JB DATA_FLAG,RD_SDA_1
SETB DATA_FLAG
MOV CY,SDA
RLC A
INC R7
MOV A,R7
CJNE A,#08H,RD_SDA_1
RET
;******************************
;***************************
;
;***************************
I2C_CLK: SETB SCL
NOP
NOP
NOP
NOP
CLR SCL
RET
;***************************
;
;***************************
I2C_STRT: SETB SDA
SETB SCL
NOP
NOP
NOP
NOP
CLR SDA
NOP
NOP
NOP
NOP
CLR SCL
RET
;***************************
;
;***************************
I2C_STOP: CLR SDA
SETB SCL
NOP
NOP
NOP
NOP
SETB SDA
RET
;***************************
;
;***************************
I2C_ACK: SETB SDA
SETB SCL
NOP
NOP
NOP
NOP
CLR SCL
RET
;***************************
;
;***************************
I2C_WRITE_BYTE: NOP
MOV R0,#8
I2C_W_BYTE1: RLC A
MOV SDA,C
NOP
NOP
ACALL I2C_CLK
DJNZ R0,I2C_W_BYTE1
NOP
ACALL I2C_ACK
RET
;***************************
;***************************
;
;***************************
DELAY5MS: NOP
MOV R3,#25
DELAY5_1: MOV R2,#200
DELAY5_2: DJNZ R2,DELAY5_2
DJNZ R3,DELAY5_1
RET
;***************************
;***************************
DELAY50MS: NOP
MOV R3,#250
DELAY50_1: MOV R2,#200
DELAY50_2: DJNZ R2,DELAY50_2
DJNZ R3,DELAY50_1
RET
;***************************
;***************************
DELAY500MS: NOP
MOV R4,#5
DELAY5S_0: MOV R3,#250
DELAY5S_1: MOV R2,#200
DELAY5S_2: DJNZ R2,DELAY5S_2
DJNZ R3,DELAY5S_1
DJNZ R4,DELAY5S_0
RET
;******************************
;******************************
DELAY100MS: NOP
MOV R4,#1
DELAY10S_0: MOV R3,#250
DELAY10S_1: MOV R2,#200
DELAY10S_2: DJNZ R2,DELAY10S_2
DJNZ R3,DELAY10S_1
DJNZ R4,DELAY10S_0
RET
;*******************************
;*******************************
;16进制转换为10进制
;输入:A
;输出:A(转换后的高位),B(转换后低位)
;*******************************
HEX_TO_ASCII: NOP
MOV B,#10H
DIV AB
CJNE A,#0AH,HEX_TO_ASC_1
HEX_TO_ASC_1: JC HEX_TO_ASC_2
ADD A,#37H
AJMP HEX_TO_ASC_3
HEX_TO_ASC_2: ADD A,#30H
HEX_TO_ASC_3: PUSH A
MOV A,B
CJNE A,#0AH,HEX_TO_ASC_4
HEX_TO_ASC_4: JC HEX_TO_ASC_5
ADD A,#37H
AJMP HEX_TO_ASC_6
HEX_TO_ASC_5: ADD A,#30H
HEX_TO_ASC_6: MOV B,A
POP A
RET
;*******************************
;***************************
;
;***************************
SEND_ALARM_IN_STATE: NOP
MOV R0,#SND_BUFF
INC R0
INC R0
MOV A,@R0
CJNE A,#01H,ALM_IN_STA_1 ;通道1
JNB ALM_PIN_1,ALM_IN_STA_YES
AJMP ALM_IN_STA_NO
ALM_IN_STA_1: CJNE A,#02H,ALM_IN_STA_2 ;通道2
JNB ALM_PIN_2,ALM_IN_STA_YES
AJMP ALM_IN_STA_NO
ALM_IN_STA_2: CJNE A,#03H,ALM_IN_STA_3 ;通道3
JNB ALM_PIN_3,ALM_IN_STA_YES
AJMP ALM_IN_STA_NO
ALM_IN_STA_3: CJNE A,#04H,ALM_IN_STA_4 ;通道4
JNB ALM_PIN_4,ALM_IN_STA_YES
AJMP ALM_IN_STA_NO
ALM_IN_STA_4: CJNE A,#05H,ALM_IN_STA_5 ;通道5
JNB ALM_PIN_5,ALM_IN_STA_YES
AJMP ALM_IN_STA_NO
ALM_IN_STA_5: CJNE A,#06H,ALM_IN_STA_6 ;通道6
JNB ALM_PIN_6,ALM_IN_STA_YES
AJMP ALM_IN_STA_NO
ALM_IN_STA_6: CJNE A,#07H,ALM_IN_STA_7 ;通道7
JNB ALM_PIN_7,ALM_IN_STA_YES
AJMP ALM_IN_STA_NO
ALM_IN_STA_7: CJNE A,#08H,ALM_IN_STA_10 ;通道8
JNB ALM_PIN_8,ALM_IN_STA_YES
AJMP ALM_IN_STA_NO
ALM_IN_STA_10: CJNE A,#09H,ALM_IN_STA_11 ;通道8
JNB ALM_PIN_9,ALM_IN_STA_YES
AJMP ALM_IN_STA_NO
ALM_IN_STA_11: CJNE A,#0AH,ALM_IN_STA_12 ;通道10
JNB ALM_PIN_10,ALM_IN_STA_YES
AJMP ALM_IN_STA_NO
ALM_IN_STA_12: CJNE A,#0BH,ALM_IN_STA_13 ;通道11
JNB ALM_PIN_11,ALM_IN_STA_YES
AJMP ALM_IN_STA_NO
ALM_IN_STA_13: CJNE A,#0CH,ALM_IN_STA_14 ;通道12
JNB ALM_PIN_12,ALM_IN_STA_YES
AJMP ALM_IN_STA_NO
ALM_IN_STA_14: CJNE A,#0DH,ALM_IN_STA_15 ;通道13
JNB ALM_PIN_13,ALM_IN_STA_YES
AJMP ALM_IN_STA_NO
ALM_IN_STA_15: CJNE A,#0EH,ALM_IN_STA_16 ;通道14
JNB ALM_PIN_14,ALM_IN_STA_YES
AJMP ALM_IN_STA_NO
ALM_IN_STA_16: CJNE A,#0FH,ALM_IN_STA_17 ;通道15
JNB ALM_PIN_15,ALM_IN_STA_YES
AJMP ALM_IN_STA_NO
ALM_IN_STA_17: CJNE A,#010H,ALM_IN_STA_ERROR ;通道16
JNB ALM_PIN_16,ALM_IN_STA_YES
ALM_IN_STA_NO: MOV A,#YES
AJMP ALM_IN_STA_18
ALM_IN_STA_YES:MOV A,#NO
ALM_IN_STA_18: NOP
MOV R0,#SND_BUFF
INC R0
INC R0
INC R0
MOV @R0,A
MOV A,#SOH_OUT1
RET
ALM_IN_STA_ERROR:
MOV A,#SOH_OUT4
RET
;***************************
;***************************
;
;***************************
SEND_ALARM_OUT_STATE: NOP
MOV R0,#SND_BUFF
INC R0
INC R0
MOV A,@R0
CJNE A,#01H,LED_OUT_STA_1 ;判断通道序号并设置相应的BIT位
JB ALARM_OUT1,LED_OUT_STA_STA_YES
AJMP LED_OUT_STA_STA_NO
LED_OUT_STA_1: CJNE A,#02H,LED_OUT_STA_2
JB ALARM_OUT2,LED_OUT_STA_STA_YES
AJMP LED_OUT_STA_STA_NO
LED_OUT_STA_2: CJNE A,#03H,LED_OUT_STA_3
JB ALARM_OUT3,LED_OUT_STA_STA_YES
AJMP LED_OUT_STA_STA_NO
LED_OUT_STA_3: CJNE A,#04H,LED_OUT_STA_4
JB ALARM_OUT4,LED_OUT_STA_STA_YES
AJMP LED_OUT_STA_STA_NO
LED_OUT_STA_4: CJNE A,#05H,LED_OUT_STA_5
JB ALARM_OUT5,LED_OUT_STA_STA_YES
AJMP LED_OUT_STA_STA_NO
LED_OUT_STA_5: CJNE A,#06H,LED_OUT_STA_6
JB ALARM_OUT6,LED_OUT_STA_STA_YES
AJMP LED_OUT_STA_STA_NO
LED_OUT_STA_6: CJNE A,#07H,LED_OUT_STA_7
JB ALARM_OUT7,LED_OUT_STA_STA_YES
AJMP LED_OUT_STA_STA_NO
LED_OUT_STA_7: CJNE A,#08H,LED_OUT_STA_STA_ERROR
JB ALARM_OUT8,LED_OUT_STA_STA_YES
LED_OUT_STA_STA_NO: NOP
MOV A,#NO
AJMP LED_OUT_STA_STA_8
LED_OUT_STA_STA_YES: NOP
MOV A,#YES
LED_OUT_STA_STA_8: NOP
MOV R0,#SND_BUFF
INC R0
INC R0
INC R0
MOV @R0,A
MOV A,#SOH_OUT1
RET
LED_OUT_STA_STA_ERROR:
MOV A,#SOH_OUT4
RET
;***************************
;
;***************************
SEND_LED_STATE: NOP
MOV R0,#SND_BUFF
INC R0
INC R0
MOV A,@R0
CJNE A,#01H,LED_STA_1
JB LED_OUT1,LED_STA_YES
LJMP LED_STA_NO
LED_STA_1: CJNE A,#02H,LED_STA_2
JB LED_OUT2,LED_STA_YES
LJMP LED_STA_NO
LED_STA_2: CJNE A,#03H,LED_STA_3
JB LED_OUT3,LED_STA_YES
LJMP LED_STA_NO
LED_STA_3: CJNE A,#04H,LED_STA_4
JB LED_OUT4,LED_STA_YES
LJMP LED_STA_NO
LED_STA_4: CJNE A,#05H,LED_STA_5
JB LED_OUT5,LED_STA_YES
LJMP LED_STA_NO
LED_STA_5: CJNE A,#06H,LED_STA_6
JB LED_OUT6,LED_STA_YES
LJMP LED_STA_NO
LED_STA_6: CJNE A,#07H,LED_STA_7
JB LED_OUT7,LED_STA_YES
LJMP LED_STA_NO
LED_STA_7: CJNE A,#08H,LED_STA_ERROR
JB LED_OUT8,LED_STA_YES
LED_STA_NO: MOV A,#NO
AJMP LED_STA_8
LED_STA_YES: MOV A,#YES
LED_STA_8: MOV R0,#SND_BUFF
INC R0
INC R0
INC R0
MOV @R0,A
MOV A,#SOH_OUT1
RET
LED_STA_ERROR:
MOV A,#SOH_OUT4
RET
;***************************
SEND_ALM_IN: NOP
MOV SEND_TIME,#00H
SEND_ALM_1: MOV A,SEND_TIME
CJNE A,#010,SEND_ALM_2
SEND_ALM_2: JC SEND_ALM_3
MOV A,#0AAH
RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -