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

📄 s3c9454_i2c.txt

📁 s3c9454通过I2C总线读写24C02的子程序
💻 TXT
字号:
;===============================================================================
;子程序:I2C开始 
;===============================================================================
BUS_START:   OR   SCL,#SCL_BIT
             NOP
             NOP
             OR   SDA,#SDA_BIT
             NOP
             NOP
             NOP
             AND  SDA,#~SDA_BIT
             NOP
             NOP
             AND  SCL,#~SCL_BIT
             NOP
             
             RET
;===============================================================================
;子程序:I2C停止 
;===============================================================================            
BUS_STOP:    AND  SDA,#~SDA_BIT
             NOP
             NOP
             OR   SCL,#SCL_BIT
             NOP
             NOP
             NOP
             OR   SDA,#SDA_BIT
             NOP
             
             RET
;===============================================================================
;子程序:发送一位数据时SCL的状态 
;===============================================================================
BUS_CLK:     NOP
             
             OR   SCL,#SCL_BIT
             NOP
             NOP
             NOP
             AND  SCL,#~SCL_BIT
             NOP
             
             RET
;===============================================================================
;子程序:主机应答 
;===============================================================================
BAKASK:      AND  SDA,#~SDA_BIT
             NOP
             NOP
             OR   SCL,#SCL_BIT
             NOP
             NOP
             NOP
             AND  SCL,#~SCL_BIT
             NOP
             NOP
             OR   SDA,#SDA_BIT
             NOP
             
             RET

;===============================================================================
;子程序:从机应答 
;===============================================================================
ASK:         AND  P2CONH,#11110111B
             LD   R2,#100
             OR   SCL,#SCL_BIT  
ASK1:        DEC  R2
             CP   R2,#0
             JR   EQ,ASK2
             TM   SDA,#SDA_BIT
             JR   NZ,ASK1
             OR  I2C_FLAG,#I2C_FLAG_BIT
             OR   P2CONH,#00001000B	
             AND  SCL,#~SCL_BIT
             RET
ASK2:        AND  I2C_FLAG,#~I2C_FLAG_BIT             
             OR  P2CONH,#00001000B
             RET
;===============================================================================
;子程序:传输8位数据 
;===============================================================================         
WRITE_8BIT:  LD   R2,#0

             RCF
WRITE0:      RLC  R0
             JR   C,WRITE1
             AND  SDA,#~SDA_BIT
             JR   WRITE2

WRITE1:      OR   SDA,#SDA_BIT
WRITE2:      CALL BUS_CLK
             INC  R2
             CP   R2,#8
             JR   ULT,WRITE0
             RET

;===============================================================================
;子程序:读8位数据 
;===============================================================================            
READ_8BIT:   LD   R2,#0
             AND  P2CONH,#11110111B
             NOP
READ0:      
             NOP
             OR   SCL,#SCL_BIT
             NOP
             TM   SDA,#SDA_BIT
             JR   Z,READ1
             SCF
             RLC  R0
             JR   READ2

READ1:       RCF
             RLC  R0
READ2:       AND  SCL,#~SCL_BIT
             INC  R2
             CP   R2,#8
             JR   ULT,READ0
             NOP
             NOP
             OR  P2CONH,#00001000B        ;PEESDA
             OR  SDA,#SDA_BIT
             RET 

⌨️ 快捷键说明

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