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

📄 程序功能本程序是利用文件240x.asm中的子程序对eeprom 240x进行多字节读写的操作.txt

📁 本程序是通过利用文件240X.ASM中的子程序对EEPROM240X进行多字节读写的操作
💻 TXT
📖 第 1 页 / 共 2 页
字号:
;        错误标志位C,若错误标志位C为高电平则表示总线不可用.
;占用资源:C.
;占用堆栈:0字节.
;子程序调用:无.
;说明:当SCL为高电平时,SDA由高变低.

I2C_START:  SETB        I2C_SDA
    SETB        I2C_SCL
            ;判断总线是否可用
            JNB         I2C_SDA,I2C_ER1  ;不为高则跳转
            JNB         I2C_SCL,I2C_ER1  ;不为高则跳转
                                                                 
            NOP                          ;保证启动建立时间大于4.7us (start 
setup time)
            CLR         I2C_SDA          ;保证启动保持时间大于4.0us (start hold 
time)
            NOP
            NOP
      NOP
    NOP
            NOP
            CLR         I2C_SCL
            CLR         C                ;清错误标志位(总线可用)
    SJMP        I2C_OK1
I2C_ER1:    SETB        C                ;置错误标志位(总线不可用)
I2C_OK1:    RET

;***********************I2C_STOP*******************************
;程序功能:本程序实现在虚拟I2C总线上发送结束位。
;入口参数:SCL在入口时应为低电平.
;出口参数:SDA,SCL都为高电平.
;占用资源:无.
;占用堆栈:0字节.
;子程序调用:无.
;说明:当SCL为高电平时,SDA由低变高。

I2C_STOP:  CLR         I2C_SDA
           NOP                          ;保证SCL低电平时间大于4.7us(clock pulse 
width low)
           NOP                          ;以及数据建立时间大于200ns(data in 
setup time)
           SETB        I2C_SCL
           NOP                          ;保证结束建立时间大于4.7us(stop setup 
time)
           NOP                                           
           NOP
           NOP
           NOP
           SETB        I2C_SDA
           RET
                            
                                
;**********************I2C_TACK*******************************
;程序功能:本程序实现向虚拟I2C总线上发送应答位。
;入口参数:SCL在入口时应为低电平.
;出口参数:SDA,SCL都为低电平.
;占用资源:无.
;占用堆栈:0字节.
;子程序调用:无.

I2C_TACK:  CLR         I2C_SDA          ;发送应答位
           NOP                          ;保证SCL低电平时间大于4.7us(clock pulse 
width low)
           NOP                          ;以及数据建立时间大于200ns(data in 
setup time)
           SETB        I2C_SCL          ;产生一个时钟周期
           NOP                          ;保证SCL高电平时间大于4.0us(clock pulse 
width high)
           NOP                                           
           NOP
           NOP
           CLR         I2C_SCL
           RET

;**********************I2C_TNACK******************************
;程序功能:本程序实现向虚拟I2C总线上发送非应答位。
;入口参数:SCL在入口时应为低电平.
;出口参数:SDA为高电平,SCL为低电平.
;占用资源:无.
;占用堆栈:0字节.
;子程序调用:无.

I2C_TNACK: SETB        I2C_SDA          ;发送非应答位
           NOP                          ;保证SCL低电平时间大于4.7us(clock pulse 
width low)
           NOP                          ;以及数据建立时间大于200ns(data in 
setup time)
           SETB        I2C_SCL          ;产生一个时钟周期
           NOP                          ;保证SCL高电平时间大于4.0us(clock pulse 
width high)
           NOP                                                      
           NOP
           NOP
           CLR         I2C_SCL
           RET

;**********************I2C_CACK*******************************
;程序功能:本程序实现从虚拟I2C总线上检查应答位。
;入口参数:SCL在入口时应为低电平.
;出口参数:应答位存在C中,SCL为低电平.
;占用资源:C.
;占用堆栈:0字节.
;子程序调用:无.

I2C_CACK:   SETB        I2C_SDA          ;置I2C_SDA为输入方式
            NOP                          ;保证SCL低电平时间大于4.7us(clock 
pulse width low)
            NOP                          ;以及保证tAA大于0.1us(clock low to 
data out valid)
            SETB        I2C_SCL
            NOP                          ;保证SCL高电平时间大于4.0us(clock 
pulse width high)
            NOP                                                     
            NOP  
            NOP
            MOV         C,I2C_SDA        ;接收应答位
            CLR         I2C_SCL          ;拉低时钟线
            RET

;***********************I2C_WRBYT******************************
;程序功能:本程序实现向虚拟I2C总线上发送一字节数据.
;入口参数:A存待发送单字节数据,SCL在入口时应为低电平.
;出口参数:SCL为低电平.
;占用资源:A,PSW,R0.
;占用堆栈:0字节.
;子程序调用:无.

I2C_WRBYT:  MOV         R0,#08H          ;计8位
I2C_WLP:    RLC         A
            MOV         I2C_SDA,C
                                         ;保证SCL低电平时间大于4.7us(clock 
pulse width low)
            NOP                          ;以及数据建立时间大于200ns(data in 
setup time)
            SETB        I2C_SCL          ;产生一个时钟周期
            NOP                          ;等待接收器件读取
            NOP                          ;保证SCL高电平时间大于4.0us(clock 
pulse width high)
    NOP
    NOP
            CLR         I2C_SCL          ;拉低时钟线以便再次发送
            DJNZ        R0,I2C_WLP       ;是否发完8位
            RET                                                     

;***********************I2C_RDBYT******************************
;程序功能:本程序实现从虚拟I2C总线上接收一字节数据.
;入口参数:SCL在入口时应为低电平.
;出口参数:A存放接收到的单字节数据,SCL为低电平.
;占用资源:A,PSW,R0.
;占用堆栈:0字节.
;子程序调用:无.
                                                   
I2C_RDBYT:  MOV         R0,#08H          ;计数8位
            SETB        I2C_SDA          ;置1以便输入
I2C_RLP:    NOP             ;保证SCL低电平时间大于4.7us(clock pulse 
width low)                            
                            
         ;保证SCL低电平时间大于4.7us(clock pulse width low)
            NOP             ;以及保证tAA大于0.1us(clock low to data 
out valid)                            
                            
         ;以及数据建立时间大于200ns(data in setup time)
            NOP
            SETB        I2C_SCL          ;拉高时钟线,以便输入
            NOP                          ;保证SCL高电平时间大于4.0us(clock 
pulse width high)
            NOP                                     
            MOV         C,I2C_SDA
            RLC         A
            CLR         I2C_SCL          ;拉低时钟线,以便发送器发送
            DJNZ        R0,I2C_RLP
            RET

;****************DELAYNMS***************************************
;程序功能:本程序实现延时Nms.
;入口参数:DELAYMS_NUM存放延时的毫秒数.
;出口参数:无.
;占用资源:R3
;占用堆栈:0字节.
;子程序调用:无.
;说明:1,本程序适用于晶振频率为12MHZ时,即单周期指令用时1us的模式,
;       时间计算公式为(249*4+1+1+2)*(DELAYMS_NUM)+2=1000*(DELAYMS_NUM)+2
;    2,未加上调用该子程序的指令执行的时间,如 LCALL DELAYNMS
;    3,使用该子程序前需定义符号DELAYMS_NUM,例DELAYMS_NUM DATA 55H

DELAYNMS:   MOV    R3,#0F9H              ;1us
LOOP500:    NOP
            NOP
            DJNZ    R3,LOOP500            ;2us
            NOP
    DJNZ    DELAYMS_NUM,DELAYNMS  ;2us
    RET                          ;2us
          

              
END                                                                             

⌨️ 快捷键说明

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