⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 learn.asm

📁 红外线学习控制及低压AC220V电力线载波组网通讯
💻 ASM
📖 第 1 页 / 共 2 页
字号:
               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 + -