?? yjp_nxsx.asm
字號:
INC DPTR
MOVX A,@DPTR
LCALL SDA2_BCD_HEX ;分
MOV DPH,#01H
MOVX @DPTR,A
MOV DPH,#02H
INC DPTR
MOV A,#0
MOVX @DPTR,A
INC DPTR
MOVX A,@DPTR
ANL A,#7FH
LCALL SDA2_BCD_HEX ;秒
MOV DPH,#01H
MOVX @DPTR,A
RET
;;===================================================================
SDA2_HEXZH:
MOV R0,#MW00 ;MW00
MOV A,R0
MOV DPL,A
MOV DPH,#01H
INC DPTR
MOVX A,@DPTR
LCALL SDA2_HEX_BCD ;年
MOV DPH,#02H
MOVX @DPTR,A
MOV DPH,#01H
INC DPTR
INC DPTR
MOVX A,@DPTR
LCALL SDA2_HEX_BCD ;月
MOV DPH,#02H
MOVX @DPTR,A
MOV DPH,#01H
INC DPTR
INC DPTR
MOVX A,@DPTR
LCALL SDA2_HEX_BCD ;日
MOV DPH,#02H
MOVX @DPTR,A
MOV DPH,#01H
INC DPTR
INC DPTR
MOVX A,@DPTR
LCALL SDA2_HEX_BCD ;星期
MOV DPH,#02H
MOVX @DPTR,A
MOV DPH,#01H
INC DPTR
INC DPTR
MOVX A,@DPTR
LCALL SDA2_HEX_BCD ;時
MOV DPH,#02H
MOVX @DPTR,A
MOV DPH,#01H
INC DPTR
INC DPTR
MOVX A,@DPTR
LCALL SDA2_HEX_BCD ;分
MOV DPH,#02H
MOVX @DPTR,A
MOV DPH,#01H
INC DPTR
INC DPTR
MOVX A,@DPTR
LCALL SDA2_HEX_BCD ;秒
MOV DPH,#02H
MOVX @DPTR,A
RET
;;===================================================================
;名稱:SDA2_HEX_BCD
;描述:單字節16進制數轉化為單字節壓縮BCD碼
; 使用 A,B
;--------------------------------------------------------------------
SDA2_HEX_BCD:
MOV B,#10
DIV AB
SWAP A
ORL A,B
RET
;;===================================================================
;名稱:SDA2_BCD_HEX
;描述:單字節16進制數轉化為單字節壓縮BCD碼
; 使用 A,B,R4
;--------------------------------------------------------------------
SDA2_BCD_HEX:
MOV R4,A
ANL A,#0F0H
SWAP A
MOV B,#10
MUL AB
MOV B,A
MOV A,R4
ANL A,#0FH
ADD A,B
RET
;;===================================================================
RD_TIME:
LCALL SDA2_RCVDATA
LCALL SDA2_BCDZH
RET
;;===================================================================
SETUP_SDA2:
LCALL SDA2_START
MOV A,#62H
LCALL SDA2_SENTBYTEHL ;發送被控器總線地址
JB F0,SDA2_SETRETURN
MOV A,#0C0H
LCALL SDA2_SENTBYTELH
JB F0,SDA2_SETRETURN
LCALL SDA2_STOP
SDA2_SETRETURN:
RET
;;===================================================================
JDTIME: MOV A,#MW23
MOV DPL,A
MOV DPH,#01H
INC DPTR
MOVX A,@DPTR
MOV R0,A
LCALL PDSD_1
LCALL PDSD_2
LCALL PDSD_3
LCALL PDSD_4
RET
;;...................................................................
PDSD_1: MOV A,R0
JNB ACC.0,PDSD_1A
MOV R7,#0
LCALL PTIME1
MOV A,R7
JNZ PDSD_1B
PDSD_1A: MOV A,#MW60 ;時間未落在該時段或該時段不允許定時,清零對應位
MOV DPL,A
MOV DPH,#01H
MOV A,#0
MOVX @DPTR,A
INC DPTR
MOVX A,@DPTR
ANL A,#0FH
ANL A,#0EH
MOVX @DPTR,A
RET
PDSD_1B: MOV A,#MW60 ;已落在該時段,置位對應開關
MOV DPL,A
MOV DPH,#01H
MOV A,#0
MOVX @DPTR,A
INC DPTR
MOVX A,@DPTR
ANL A,#0FH
ORL A,#01H
MOVX @DPTR,A
RET
;;...................................................................
PDSD_2: MOV A,R0
JNB ACC.1,PDSD_2A
MOV R7,#0
LCALL PTIME2
MOV A,R7
JNZ PDSD_2B
PDSD_2A: MOV A,#MW60
MOV DPL,A
MOV DPH,#01H
MOV A,#0
MOVX @DPTR,A
INC DPTR
MOVX A,@DPTR
ANL A,#0FH
ANL A,#0DH
MOVX @DPTR,A
RET
PDSD_2B: MOV A,#MW60
MOV DPL,A
MOV DPH,#01H
MOV A,#0
MOVX @DPTR,A
INC DPTR
MOVX A,@DPTR
ANL A,#0FH
ORL A,#02H
MOVX @DPTR,A
RET
;;...................................................................
PDSD_3: MOV A,R0
JNB ACC.2,PDSD_3A
MOV R7,#0
LCALL PTIME3
MOV A,R7
JNZ PDSD_3B
PDSD_3A: MOV A,#MW60
MOV DPL,A
MOV DPH,#01H
MOV A,#0
MOVX @DPTR,A
INC DPTR
MOVX A,@DPTR
ANL A,#0FH
ANL A,#0BH
MOVX @DPTR,A
RET
PDSD_3B: MOV A,#MW60
MOV DPL,A
MOV DPH,#01H
MOV A,#0
MOVX @DPTR,A
INC DPTR
MOVX A,@DPTR
ANL A,#0FH
ORL A,#04H
MOVX @DPTR,A
RET
;;...................................................................
PDSD_4: MOV A,R0
JNB ACC.3,PDSD_4A
MOV R7,#0
LCALL PTIME4
MOV A,R7
JNZ PDSD_4B
PDSD_4A: MOV A,#MW60
MOV DPL,A
MOV DPH,#01H
MOV A,#0
MOVX @DPTR,A
INC DPTR
MOVX A,@DPTR
ANL A,#0FH
ANL A,#07H
MOVX @DPTR,A
RET
PDSD_4B: MOV A,#MW60
MOV DPL,A
MOV DPH,#01H
MOV A,#0
MOVX @DPTR,A
INC DPTR
MOVX A,@DPTR
ANL A,#0FH
ORL A,#08H
MOVX @DPTR,A
RET
;;...................................................................
PTIME1: MOV A,#MW07
MOV DPL,A
MOV DPH,#01H
INC DPTR
MOVX A,@DPTR
MOV R1,A ;定時開時
INC DPTR
INC DPTR
MOVX A,@DPTR
MOV R2,A ;定時開分
INC DPTR
INC DPTR
MOVX A,@DPTR
MOV R3,A ;定時關時
INC DPTR
INC DPTR
MOVX A,@DPTR
MOV R4,A ;定時關分
LCALL PTIME ;開始判斷
RET
;;...................................................................
PTIME2: MOV A,#MW11
MOV DPL,A
MOV DPH,#01H
INC DPTR
MOVX A,@DPTR
MOV R1,A ;定時開時
INC DPTR
INC DPTR
MOVX A,@DPTR
MOV R2,A ;定時開分
INC DPTR
INC DPTR
MOVX A,@DPTR
MOV R3,A ;定時關時
INC DPTR
INC DPTR
MOVX A,@DPTR
MOV R4,A ;定時關分
LCALL PTIME ;開始判斷
RET
;;...................................................................
PTIME3: MOV A,#MW15
MOV DPL,A
MOV DPH,#01H
INC DPTR
MOVX A,@DPTR
MOV R1,A ;定時開時
INC DPTR
INC DPTR
MOVX A,@DPTR
MOV R2,A ;定時開分
INC DPTR
INC DPTR
MOVX A,@DPTR
MOV R3,A ;定時關時
INC DPTR
INC DPTR
MOVX A,@DPTR
MOV R4,A ;定時關分
LCALL PTIME ;開始判斷
RET
;;...................................................................
PTIME4: MOV A,#MW19
MOV DPL,A
MOV DPH,#01H
INC DPTR
MOVX A,@DPTR
MOV R1,A ;定時開時
INC DPTR
INC DPTR
MOVX A,@DPTR
MOV R2,A ;定時開分
INC DPTR
INC DPTR
MOVX A,@DPTR
MOV R3,A ;定時關時
INC DPTR
INC DPTR
MOVX A,@DPTR
MOV R4,A ;定時關分
LCALL PTIME ;開始判斷
RET
;;...................................................................
;;
;;INPUT: T_HOUR_ON->R1 T_MINUTE_ON->R2
;; T_HOUR_OFF->R3 T_MINUTE_OFF->R4
;;OUTPUT: R7=1 TIME ON ::R7=0 TIME OFF
;;...................................................................
PTIME: MOV A,#MW04
MOV DPL,A
MOV DPH,#01H
INC DPTR
MOVX A,@DPTR
MOV R5,A ;;實時時間時
INC DPTR
INC DPTR
MOVX A,@DPTR
MOV R6,A ;;實時時間分
MOV A,R1
MOV B,A
MOV A,R5
CLR C
SUBB A,B
JC PTIMEEND
JZ PTIME_M
MOV A,R3
MOV B,A
MOV A,R5
CLR C
SUBB A,B
JC GTIMEON
JZ PTIMEMOFF
PTIMEEND: RET
PTIME_M:
MOV A,R2
MOV B,A
MOV A,R6
CLR C
SUBB A,B
JC PTIMEEND
JZ GTIMEON
MOV A,R3
MOV B,A
MOV A,R5
CLR C
SUBB A,B
JC GTIMEON
JZ PTIMEMOFF
RET
GTIMEON: MOV R7, #01
RET
PTIMEMOFF:
MOV A,R4
MOV B,A
MOV A,R6
CLR C
SUBB A,B
JC GTIMEON
RET
;;===================================================================
;CAT24C021 應用設計
;;===================================================================
;;以下為AT24C021 I2C存儲芯片操作子程序
;;-------------------------------------------------------------------
;復位看門狗
RST_WDOG:
CLR A24C_SDA
DB 0,0,0,0
SETB A24C_SDA
RET
;;===================================================================
;名稱:STR_24C021
;描述:啟動I2C總線子程序-發送I2C起始條件
;--------------------------------------------------------------------
STR_24C021:
SETB A24C_SDA ;發送起始條件數據信號
DB 0,0,0,0,0
DB 0,0,0,0,0
SETB A24C_SCL ;發送起始條件的時鐘信號
DB 0,0,0,0,0
DB 0,0,0,0,0 ;起始條件鎖定時間大于4.7us
CLR A24C_SDA ;發送起始信號
DB 0,0,0,0,0 ;起始條件鎖定時間大于4.7us
DB 0,0,0,0,0
CLR A24C_SCL ;鉗住I2C總線,準備發送或接收數據
DB 0,0,0,0,0
RET
;;===================================================================
;名稱:STOP_24C021
;描述:停止I2C總線子程序-發送I2C總線停止條件
;--------------------------------------------------------------------
STOP_24C021:
CLR A24C_SDA ;發送停止條件的數據信號
DB 0,0,0,0,0
DB 0,0,0,0,0
SETB A24C_SCL ;發送停止條件的時鐘信號
DB 0,0,0,0,0 ;起始條件建立時間大于4.7us
DB 0,0,0,0,0
SETB A24C_SDA ;發送I2C總線停止信號
DB 0,0,0,0,0
DB 0,0,0,0,0
RET
;;===================================================================
RD24C021:
MOV R3,#2
ACALL STR_24C021 ;I2C 總線開始信號
MOV A,#0A0H ;被控器CAT24WC02 I2C 總線地址(寫模式
ACALL WBYTE_24C021 ;發送被控器地址
JC ReadFail
MOV A,R0 ;取單元地址
ACALL WBYTE_24C021 ;發送單元地址
JC ReadFail
ACALL STR_24C021 ;I2C 總線開始信號
MOV A,#0A1H ;被控器CAT24WC02 I2C 總線地址讀模式
ACALL WBYTE_24C021 ;發送被控器地址
JC ReadFail
CLR F0
MOV A,R0
MOV DPL,A
MOV DPH,#01H
DJNZ R3,RD24C021_NEXT ;重復操作
SJMP RD24C021_LAST
RD24C021_NEXT:
ACALL RDBYTE_24C021 ;接收數據
MOVX @DPTR,A
INC DPTR
DJNZ R3,RD24C021_NEXT ;重復操作
;;===================================================================
RD24C021_LAST:
SETB F0 ;不發送應答位
ACALL RDBYTE_24C021
MOVX @DPTR,A
ACALL STOP_24C021 ;I2C 總線停止信號
RET
ReadFail:
ACALL STOP_24C021
RET
;;===================================================================
WR24C021:
MOV R3,#2
ACALL STR_24C021 ;I2C 總線開始信號
MOV A,#0A0H ;被控器CAT24WC02 I2C 總線地址寫模式
ACALL WBYTE_24C021 ;發送被控器地址
JC WriteFail
MOV A,R0 ;取單元地址
ACALL WBYTE_24C021 ;發送單元地址
JC WriteFail
MOV A,R0
MOV DPL,A
MOV DPH,#01H
WR24C021_NEXT:
MOVX A,@DPTR ;取所發送數據的地址
ACALL WBYTE_24C021 ;發送數據
JC WriteFail
INC DPTR ;取下一個數據
DJNZ R3,WR24C021_NEXT ;重復操作
ACALL STOP_24C021 ;I2C 總線停止信號
RET
WriteFail:
ACALL STOP_24C021
RET
;;===================================================================
DELAY_10MS: ;延時10ms
MOV R7,#60H
DELAY2: MOV R6,#34H
DJNZ R6,$
DJNZ R7,DELAY2
RET
;;===================================================================
WBYTE_24C021: ;寫操作
MOV R7,#08H
WBY0:
RLC A
JC WBY_ONE
CLR A24C_SDA
SJMP WBY_ZERO
WBY_ONE: ;發送數據位"1"
SETB A24C_SDA
DB 0,0
WBY_ZERO: ;發送數據位"0"
DB 0,0
SETB A24C_SCL
DB 0,0,0,0
DB 0,0,0,0
CLR A24C_SCL
DJNZ R7,WBY0
MOV R6,#5 ;等待應答信號
WaitLoop:
SETB A24C_SDA
DB 0,0,0,0
SETB A24C_SCL
DB 0,0,0,0,0,0
JB A24C_SDA,NOACK
CLR C ;HAVE ACK
CLR A24C_SCL
RET
NoAck: DJNZ R6,WaitLoop
SETB C ;NO ACK
CLR A24C_SCL
RET
;;===================================================================
RDBYTE_24C021: ;讀操作
SETB A24C_SDA
MOV R7,#08H ;字節為8 位
RD24C021_CY1: ;讀數據位
DB 0,0
CLR A24C_SCL ;準備讀
DB 0,0,0,0
DB 0,0,0,0
SETB A24C_SCL ;讀數據
DB 0,0,0,0
CLR C
JNB A24C_SDA,RD24C021_ZERO ;讀數據位"0"
SETB C ;讀數據位"1"
;;===================================================================
RD24C021_ZERO:
RLC A
DB 0,0,0,0
DJNZ R7,RD24C021_CY1 ;重復操作
CLR A24C_SCL
DB 0,0,0,0,0,0
CLR A24C_SDA
JNB F0,RD_ACK
SETB A24C_SDA ;無應答
RD_ACK: ;發送應答信號
DB 0,0,0,0
SETB A24C_SCL
DB 0,0,0,0,0,0
CLR A24C_SCL
DB 0,0,0,0
CLR F0
CLR A24C_SDA
RET
;;===================================================================
SAVE_TIKEYEND:RET
SAVE_TIKEY:MOV A,#MW25
MOV DPL,A
MOV DPH,#01H
INC DPTR
MOVX A,@DPTR
MOV B,A
MOV A,#MW23
MOV DPL,A
MOV DPH,#01H
INC DPTR
MOVX A,@DPTR
XRL A,B
JZ SAVE_TIKEYEND
MOV A,B
MOVX @DPTR,A
MOV R0,#MW23
LCALL WR24C021
RET
;;===================================================================
RD_SET_DATA:
MOV R1,#16
MOV R0,#MW07
RD_SET1: LCALL RD24C021
INC R0
INC R0
DJNZ R1,RD_SET1
LCALL CK_DATA2 ;;校驗時段數據
MOV R0,#MW23 ;;讀時段允許開關位內容
LCALL RD24C021
MOV A,#MW23
MOV DPL,A
MOV DPH,#01H
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -