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

📄 e2rom134.asm

📁 epprom yu mcu d yingyong chengxu
💻 ASM
字号:
/*写一个字节进E2ROM*/
SDA BIT P0.2;数据读写线
SCL BIT P0.1;CLK脉冲信号线
ACK BIT 00H ;应答标志
DA_START DATA  40H;数据存储初始地址
SCTR     DATA  41H ;1110地址
SADD     DATA  42H;1110寄存器配置值
AUXR1    DATA  0A2H;
P0M1     DATA  84H
P0M2     DATA  85H


ORG 0000H
LJMP MAIN
ORG 0030H
MAIN:
      MOV AUXR1,#40H
      MOV SP,#50H ;设置堆栈
      MOV R0,#20H
ZERO: 
      
      MOV @R0,#0
      INC R0
      CJNE R0,#23H,ZERO
      MOV SADD,#00000000B/*1110register 配置值,sbua。7=1 转换的开始, sbua.6 sbua.5 保留位=00,sbua.4=1单周期转换
                          sbua.3.2=11,15sps , sbua.1.0=00,gain=1*/

      MOV DA_START,#20H   
    
      MOV P0M1,#00000000B
      MOV P0M2,#00000110B           
AD_START:    
      LCALL START
      MOV SCTR,#10101110B; 1001aaa wr/r, 如果为ads1110a0,aaa为000  如果为ads1110a3 ,则为011;sla.0=0 write
      MOV A,SCTR       ;控制字(写)
      LCALL WR_DB     
      LCALL CACK
      JNB   ACK,AD_START     
      MOV A,SADD      ;写地址
      LCALL WR_DB
      LCALL CACK
      JNB ACK,AD_START
      MOV A,#072H       ;写数值
      LCALL WR_DB
      LCALL CACK
      JNB ACK,AD_START
      
      MOV A,#079H       ;写数值
      LCALL WR_DB
      LCALL CACK
      JNB ACK,AD_START
      
      MOV A,#065H       ;写数值
      LCALL WR_DB
      LCALL CACK
      JNB ACK,AD_START
      LCALL STOP      
      

;++++++++++++++++++++++++++++++DU+++++++++++++++++++++++++

AD_SD:LCALL START
      MOV  A,SCTR   ;控制字(写)
      LCALL WR_DB   
      LCALL CACK
      JNB   ACK,AD_SD 
      MOV A,#02H ;读地址
      LCALL WR_DB
      LCALL CACK
      JNB  ACK,AD_SD
      MOV R5,#03H
AD_RD:      
      LCALL START
      INC SCTR      ;控制字(读)
      MOV A,SCTR
      LCALL WR_DB
      LCALL CACK1
      JNB ACK,AD_RD
      LCALL RD_BYTE ;数据读    
AD_END: 
        LCALL STOP     
        NOP
LOOP:      
     NOP
     NOP 
     AJMP LOOP














;-----------------读E2ROM数据------------------------
RD_BYTE: MOV R6,#3H
         MOV R0,DA_START ;保存第一字节到20H
        
RD_1:    NOP
         NOP
         NOP
         NOP
         NOP
        
  
         MOV P0M1,#00000100B
         MOV P0M2,#00000010B 
         
         NOP
         NOP
         NOP
         NOP
         NOP
         LCALL RD_DB
         DJNZ R6,RD_2
         
        
         
    
         AJMP RD_3
     

RD_2:    
         MOV P0M1,#00000000B
         MOV P0M2,#00000110B   
         LCALL MACK
         INC R0
         LJMP RD_1
RD_3:    LCALL MNACK                  
      
      
            
	 RET
;-----------------------读字节子程序结果保存到R2和A-----------------------
RD_DB:	     
        MOV	R7,#08H
RD_LOOP:
        NOP
        NOP
        NOP
        SETB   SCL       ;SDA=1:SCL FROM 0 TO 1  读数据
        NOP
        NOP
        NOP
        NOP
	CLR	SCL       ;下降沿读数据
        NOP
        NOP
        NOP
        NOP
        NOP
        NOP
        NOP
        NOP
	MOV	C,SDA
	MOV	A,R2
	RLC	A
        MOV	R2,A
        NOP
        NOP
        NOP
        NOP
        NOP
	DJNZ    R7,RD_LOOP
	MOV @R0,A
	RET

;-----------------------E2ROM的启动信号-----------------------
START:SETB SDA         ; scl=1:sda from 1 to 0
      NOP
      SETB  SCL
      NOP
      CLR   SDA
      NOP
      CLR   SCL        ;scl=0
      NOP
      NOP
      RET
;-------------------------END---------------------------------------

;-----------------------E2ROM的结束信号-----------------------
STOP: CLR SDA         ;scl=1:sda from 0 to 1
     NOP
     SETB SCL
     NOP
     SETB SDA
     NOP
     RET
;-------------------------END---------------------------------------



;-----------------------E2ROM的写程序-----------------------
WR_DB:	MOV	R7,#08H        ;8位
WR_LOOP:RLC	A
	JC	WR1
WR0:    CLR     SDA            ;sda=0:scl from 0 to 1
        NOP
        SETB    SCL
        NOP
	NOP
	SJMP	WR_CB1
WR1:	SETB	SDA            ;sda=1:scl from 0 to 1
        NOP
        SETB    SCL
        NOP
        NOP
WR_CB1: CLR   SCL            ;sda=0
        NOP
        NOP
	DJNZ	R7,WR_LOOP
	RET
;-------------------------END----------------------------------------



;-----------------------E2ROM应答子程序-----------------------
CACK:  
            
       SETB SDA     ;SDA=1: SCL FROM 0 to 1 ,等待反映
       MOV P0M1,#00000100B
       MOV P0M2,#00000010B  
       NOP
       SETB SCL
       LCALL DELAY
     
       NOP
       NOP
       CLR ACK
       MOV C,SDA
       JC   CEND  ;SDA=1 goto cend   
       SETB ACK   ;SDA=0,then ack=1
         
      
CEND:  CLR SCL
       NOP
       NOP
      MOV P0M1,#00000000B
      MOV P0M2,#00000110B       
       
       RET
;----------------------END------------------------------------------
CACK1:  
            
       SETB SDA     ;SDA=1: SCL FROM 0 to 1 ,等待反映
       MOV P0M1,#00000100B
       MOV P0M2,#00000010B  
       NOP
       SETB SCL
       LCALL DELAY
    
       CLR ACK
       MOV C,SDA
       JC   CEND1  ;SDA=1 goto cend   
       SETB ACK   ;SDA=0,then ack=1
         
      
CEND1:  NOP
       NOP
       NOP
      MOV P0M1,#00000000B
      MOV P0M2,#00000110B       
       
       RET

;=============发送应答信号子程序MACK===============================
MACK:	NOP
        CLR	SDA  ;SDA=0:SCL FORM 0 TO 1 暂时放弃总线,准备接受下个字节
        NOP
    	NOP
    	NOP
    	NOP
    	SETB	SCL
        NOP
        NOP
        NOP
        CLR     SCL  ;SCL=0
        NOP
        NOP
	RET
;--------------------END-----------------------------------------


;===========发送非应答信号子程序MNACK===========================
MNACK:  SETB	SDA ;SDA=1:SCL FROM 0 TO 1 
        NOP
        SETB    SCL
        NOP
        CLR     SCL  ;SCL=0
        NOP
        NOP
		RET
;-----------------END-------------------------------------------

;==============延时子程序============================================
DELAY:NOP
      NOP
      NOP
      RET

END

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -