📄 ic.asm
字号:
ORG 0000H
SCL EQU 0B0H ;IC2401,byte-wr
SDA EQU 0B1H
;-------------------------------------------------------
START: MOV SP,#53H
JB P1.0,$
LCALL DL10MS
JB P1.0,START
LCALL DL10MS
MOV R0,#00H
MOV R1,#55H
conw1: push 00h ;R0 IS IC CAR WR ADDRESS
push 01h ;R1 IS IC CAR I/O DATA
CPL P1.1 ;WR-LED
LCALL WR2401_1W ;Byte Wr
CJNE R5,#00H,DISPERR
pop 01h
pop 00h
inc r0
inc r1
cjne r0,#7fh,conw1
SETB P1.1
MOV R0,#00H ;R0 IS RD ADDRESS
mov dptr,#4000h ;[4000H----407FH]=55,56,57,....................
conr1: push 00h
CPL P1.2 ;RD-LED
LCALL RD2401_1W
CJNE R5,#00H,DISPERR
pop 00h
movx @dptr,a
inc dpl
inc r0
cjne r0,#7fh,conr1
SETB P1.2
condisp:lcall disp
sjmp condisp
DISPERR:
LCALL DISP1
SJMP DISPERR
DISP1: mov 7eh,#01h
mov 7dh,#0ch
mov 7ch,#10h
mov 7bh,#0Eh
mov 7ah,#14h
mov 79h,#14h
AJMP DISP2
DL10MS: MOV R7,#0AH
DL0: MOV R6,#0FFH
DJNZ R6,$
DJNZ R7,DL0
RET
DISP: mov 7eh,#01h
mov 7dh,#0ch
mov 7ch,#09h
mov 7bh,#00h
mov 7ah,#00h
mov 79h,#0dh
DISP2: MOV R0,#7EH
MOV R2,#20H
MOV R3,#00H
MOV DPTR,#TAB
LS2: MOV A,@R0
MOVC A,@A+DPTR
MOV R1,#22H
MOVX @R1,A
MOV A,R2
DEC R1
MOVX @R1,A
DEC R0
DJNZ R3,$
CLR C
RRC A
MOV R2,A
JNZ LS2
INC R1
MOV A,#0FFH
MOVX @R1,A
RET
TAB: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H
DB 88H,83H,0C6H,0A1H,86H,8EH,0FFH,0CH,0DEH,0F3H,8FH
;****************************************************************************
WR2401_1W: ;R0 IS ADDR,R1 IS DATA
LCALL C_A2401 ;WR FIX ADDRESS AND PROGRAM ADDRESS TO IC
CJNE R5,#00H,WR2401_ERROR
MOV A,R1 ;WR DATA TO IC
MOV R5,#08H
WR2401_BIT:
CLR SCL
RLC A
JNC CLR_SDA
SETB SDA
SJMP WR_NEXT_BIT
CLR_SDA:
CLR SDA
WR_NEXT_BIT:
LCALL DY
SETB SCL
LCALL DY
DJNZ R5,WR2401_BIT
CLR SCL
LCALL DY
SETB SCL
LCALL DY
JB SDA,WR2401_ERROR
LCALL STOP2401 ;WR TIME
LCALL DY
LCALL DY
MOV R5,#00H
RET
WR2401_ERROR:
MOV R5,#5AH
RET
;--------------------------------------------------
DY: MOV R7,#35H
DJNZ R7,$
RET
START2401:
SETB SDA
LCALL DY
SETB SCL
LCALL DY
CLR SDA
LCALL DY
CLR SCL
LCALL DY
RET
STOP2401:
CLR SCL ;
LCALL DY
CLR SDA
LCALL DY
SETB SCL
LCALL DY
SETB SDA
LCALL DY
RET
;---------------------------------------------------------
C_A2401: ;R0 ADDR
LCALL STOP2401
LCALL DY
LCALL START2401
MOV A,#0A0H ;WR2401
MOV R5,#08H
CONT2401:
CLR SCL
RLC A
JNC CA_CLR_SDA
SETB SDA
SJMP CA_CONT_NEXT
CA_CLR_SDA:
CLR SDA
CA_CONT_NEXT:
LCALL DY
SETB SCL
LCALL DY
DJNZ R5,CONT2401
CLR SCL
LCALL DY
SETB SCL
LCALL DY
JB SDA,C_A_ERROR
MOV R5,#08H
MOV A,R0 ;R0 INPUT ADDR
ADDR2401:
CLR SCL
RLC A
JNC AD_CLR_SDA
SETB SDA
SJMP AD_CONT_NEXT
AD_CLR_SDA:
CLR SDA
AD_CONT_NEXT:
LCALL DY
SETB SCL
LCALL DY
DJNZ R5,ADDR2401
CLR SCL
LCALL DY
SETB SCL
LCALL DY
JB SDA,C_A_ERROR
LCALL DY
CLR SCL
LCALL DY
MOV R5,#00H
RET
C_A_ERROR:
MOV R5,#5AH
RET
;-----------------------------------------------------------------------------------------
RD2401_1W: ;SUEI JI RD ,R0 INPUT ADDR,OUTPUT WORD,IN ACC
LCALL C_A2401 ;KONG WR,SET FIRST ADDRESS
CJNE R5,#00H,RD2401_ERROR
LCALL START2401 ;START
MOV R5,#08H ;DEVICE ADDERS
MOV A,#0A1H
RD_CONT2401:
CLR SCL
RLC A
JNC RD24_CLR_SDA
SETB SDA
SJMP RD_CONT2401_NEXT
RD24_CLR_SDA:
CLR SDA
RD_CONT2401_NEXT:
LCALL DY
SETB SCL
LCALL DY
DJNZ R5,RD_CONT2401
CLR SCL
LCALL DY
SETB SCL
JNB SDA,RD_CONT_OK ;ACK
LCALL STOP2401
SJMP RD2401_ERROR
RD_CONT_OK: ;READ DATA
CLR SCL
MOV R5,#08H
CLR A
RD24_BIT:
SETB SCL
LCALL DY
JNB SDA,RD24_0_DATA
SETB C
SJMP RD24_NEXT_BIT
RD24_0_DATA:
CLR C
RD24_NEXT_BIT:
CLR SCL
LCALL DY
RLC A
DJNZ R5,RD24_BIT
SETB SCL
LCALL DY
CLR SCL
LCALL DY
LCALL STOP2401
MOV R5,#00H
RET
RD2401_ERROR: ;OUTPUT IS IN ACC
MOV R5,#5AH
RET
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -