📄 learn.asm
字号:
MOV C,ACC.1
LCALL DATABIT
MOV C,ACC.0
LCALL DATABIT
LCALL ACKBIT
MOV A,DPL
MOV C,ACC.7
LCALL DATABIT
MOV C,ACC.6
LCALL DATABIT
MOV C,ACC.5
LCALL DATABIT
MOV C,ACC.4
LCALL DATABIT
MOV C,ACC.3
LCALL DATABIT
MOV C,ACC.2
LCALL DATABIT
MOV C,ACC.1
LCALL DATABIT
MOV C,ACC.0
LCALL DATABIT
LCALL ACKBIT
LCALL STARTBIT
SETB C
LCALL DATABIT
CLR C
LCALL DATABIT
SETB C
LCALL DATABIT
CLR C
LCALL DATABIT
CLR C
LCALL DATABIT
CLR C
LCALL DATABIT
CLR C
LCALL DATABIT
SETB C ;READ COMMAND
LCALL DATABIT
RD_LOOP:
clr sda
NOP
nop
SETB SCL
NOP
NOP
CLR SCL
NOP
setb sda
LCALL IIC_RD_BIT
MOV ACC.7,C
LCALL IIC_RD_BIT
MOV ACC.6,C
LCALL IIC_RD_BIT
MOV ACC.5,C
LCALL IIC_RD_BIT
MOV ACC.4,C
LCALL IIC_RD_BIT
MOV ACC.3,C
LCALL IIC_RD_BIT
MOV ACC.2,C
LCALL IIC_RD_BIT
MOV ACC.1,C
LCALL IIC_RD_BIT
MOV ACC.0,C
MOV iic_RD_data,A
INC DPTR
JNB F_FIRST_READ,READBLOCK1
CLR F_FIRST_READ
mov c,acc.7
mov plority,c
clr acc.7
clr c
rlc a
mov tl0,a ;shift one
mov th0,#00h
clr c
rlc a
mov tl0,a
mov a,th0
rlc a
mov th0,a ;shift two
clr c
mov a,tl0
rlc a
mov tl0,a
mov a,th0
rlc a
mov th0,a ;shift three
clr c
mov a,tl0
rlc a
cpl a
mov tl0,a
mov a,th0
rlc a
cpl a
mov th0,a ;shift four
mov c,plority
mov serial_out,c
SETB TR0
SETB ET0
LJMP RD_LOOP
READBLOCK1: JNB F_SECOND_READ,block3
CLR F_SECOND_READ
mov c,acc.7
mov plority,c
clr acc.7
clr c
rlc a
mov sample0_h,#00h ;shift one
mov sample0_l,a
clr c
rlc a
mov sample0_l,a
mov a,sample0_h
rlc a
mov sample0_h,a ;shift two
clr c
mov a,sample0_l
rlc a
mov sample0_l,a
mov a,sample0_h
rlc a
mov sample0_h,a ;shift three
clr c
mov a,sample0_l
rlc a
cpl a
mov sample0_l,a
mov a,sample0_h
rlc a
cpl a
mov sample0_h,a ;shift four
LJMP RD_LOOP
block3: MOV A,DPH
XRL A,STOP_LEARN
JNZ BLOCK4
CLR ET0
CLR TR0
LJMP READ_END
BLOCK4: JNB f_necessary,BLOCK4
CLR f_necessary
MOV A,IIC_RD_DATA
mov c,acc.7
mov plority,c
clr acc.7
clr c
rlc a
mov sample0_h,#00h
mov sample0_l,a ;shift one
clr c
rlc a
mov sample0_l,a
mov a,sample0_h
rlc a
mov sample0_h,a ;shift two
clr c
mov a,sample0_l
rlc a
mov sample0_l,a
mov a,sample0_h
rlc a
mov sample0_h,a ;shift three
clr c
mov a,sample0_l
rlc a
cpl a
mov sample0_l,a
mov a,sample0_h
rlc a
cpl a
mov sample0_h,a ;shift four
jb plority,block5
mov stop_count,#00h
ljmp block6
block5: inc stop_count
block6: mov a, stop_count
XRL A,#20
JZ READ_END
LJMP RD_LOOP
READ_END:
clr f_necessary
setb serial_out
CLR TR0
CLR ET0
LCALL NAK
LCALL STOPBIT
RET
;*****************************************
STARTBIT: SETB SDA
SETB SCL
nop
nop
CLR SDA
NOP
NOP
CLR SCL
RET
DATABIT: MOV SDA,C
nop
SETB SCL
NOP
CLR SCL
RET
ACKBIT:
SETB SCL
nop
nop
CLR SCL
NOP
NOP
SETB SDA
NOP
NOP
CLR SDA
RET
NAK:
; Clock out a negative acknowledge bit (high).
; SCL expected low on entry. Return with SCL low, SDA high.
setb SDA ; NAK bit
nop ; enforce SCL low and data setup
nop ;
setb SCL ; raise clock
nop ; enforce SCL high
nop ;
nop ;
nop ;
clr SCL ; drop clock
ret
STOPBIT: SETB SCL
nop
nop
SETB SDA
RET
IIC_RD_BIT:SETB SCL
SETB SDA
nop
MOV C,SDA
NOP
CLR SCL
RET
delay_10ms:mov r2,#0dh
deld2: mov r3,#0ffh
deld1: djnz r3,deld1
djnz r2,deld2
ret
READBYTE_ID: LCALL compoent_addr
LCALL ID_CODE
CLR C ;WRITE COMMAND
LCALL DATABIT_ID
LCALL ACKBIT_ID
LCALL IIC_ADDR
LCALL compoent_addr
LCALL ID_CODE
SETB C ;READ COMMAND
LCALL DATABIT_ID
LCALL READ_OP
RET
STARTBIT_ID: SETB SDA_ID
SETB SCL_ID
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
CLR SDA_ID
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
CLR SCL_ID
NOP
NOP
RET
DATABIT_ID: MOV SDA_ID,C
NOP
NOP
NOP
NOP
NOP
SETB SCL_ID
NOP
NOP
NOP
NOP
NOP
CLR SCL_ID
NOP
NOP
NOP
RET
ACKBIT_ID: NOP
SETB SCL_ID
NOP
NOP
NOP
nop
NOP
NOP
CLR SCL_ID
NOP
NOP
NOP
NOP
SETB SDA_ID
NOP
NOP
NOP
CLR SDA_ID
NOP
RET
STOPBIT_ID: SETB SCL_ID
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
SETB SDA_ID
NOP
NOP
NOP
RET
IIC_ID_RD_BIT:SETB SCL_ID
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
SETB SDA_ID
NOP
NOP
NOP
NOP
MOV C,SDA_ID
NOP
NOP
NOP
NOP
NOP
CLR SCL_ID
NOP
NOP
NOP
NOP
NOP
NOP
RET
IIC_ADDR: MOV A,DPL
MOV C,ACC.7
LCALL DATABIT_ID
MOV C,ACC.6
LCALL DATABIT_ID
MOV C,ACC.5
LCALL DATABIT_ID
MOV C,ACC.4
LCALL DATABIT_ID
MOV C,ACC.3
LCALL DATABIT_ID
MOV C,ACC.2
LCALL DATABIT_ID
MOV C,ACC.1
LCALL DATABIT_ID
MOV C,ACC.0
LCALL DATABIT_ID
LCALL ACKBIT_ID
RET
ID_CODE: CLR C
LCALL DATABIT_ID ;A2=0
CLR C
LCALL DATABIT_ID ;A1=0
SETB C
LCALL DATABIT_ID ;A0=1
RET
compoent_addr: LCALL STARTBIT_ID
SETB C
LCALL DATABIT_ID
CLR C
LCALL DATABIT_ID
SETB C
LCALL DATABIT_ID
CLR C
LCALL DATABIT_ID
RET
READ_OP: nop
nop
nop
nop
nop
NOP
NOP
NOP
NOP
NOP
NOP
setb SCL_ID
nop
nop
nop
nop
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
clr SCL_ID
nop
nop
nop
nop
nop
NOP
NOP
NOP
NOP
NOP
NOP
LCALL IIC_ID_RD_BIT
MOV ACC.7,C
LCALL IIC_ID_RD_BIT
MOV ACC.6,C
LCALL IIC_ID_RD_BIT
MOV ACC.5,C
LCALL IIC_ID_RD_BIT
MOV ACC.4,C
LCALL IIC_ID_RD_BIT
MOV ACC.3,C
LCALL IIC_ID_RD_BIT
MOV ACC.2,C
LCALL IIC_ID_RD_BIT
MOV ACC.1,C
LCALL IIC_ID_RD_BIT
MOV ACC.0,C
MOV IIC_ID_RD_DATA,A
LCALL STOPBIT_ID
RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -