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

📄 读写程序.txt

📁 汇编写的24C01 单字节读写程序 有需要的可以下载
💻 TXT
字号:
   汇编写的24C01 单字节读写程序
; =======================================================
;         24C01存储器I2C总线实验        汇编语言例子
; =======================================================
;
;      ew51仿真编程器         配套实验板学习例程
;
;      中山单片机学习网       诚电科技       站长:逸风
;
;      http://www.zsMCU.com
;      E-mail:ew51@zsmcu.com
; =======================================================
SDA              EQU       P2.0
SCL        EQU       P2.1
Address          EQU       08H
I2CData         EQU       09H 
 
ORG 0000H 
 
START:
       MOV      SP,#60H
 
       MOV      Address,#00H
       MOV      I2CData,#55H
       CALL      I2C_WRITE   ;写入数据
 
       MOV      I2CDATA,#0AAH   ;
 
       MOV      Address,#00H
       CALL      I2C_READ
       MOV      I2CData,A      ;读出数据
       NOP
       NOP
 
MAIN:
 
       JMP        MAIN
 
/*=======================================================
写一个字节    Address地址  I2CDatata写入的数据
=======================================================*/
I2C_WRITE:
    I2C_WRITE_A:
       LCALL    I2C_START
       MOV      A,#10100000B
       LCALL    I2C_SEND8BIT
       LCALL    I2C_ACK
       JC   I2C_WRITE_A      ;=1,表示无确认,再次发送
       
       MOV      A,Address
       LCALL    I2C_SEND8BIT
       LCALL    I2C_ACK       
 
       MOV      A,I2CData
       LCALL    I2C_SEND8BIT
       LCALL    I2C_ACK       
       LCALL    I2C_STOP
RET 
 
/*=======================================================
读一个字节    Address地址  Data读出的数据
=======================================================*/
 
I2C_READ:
    I2C_READ_A:
       LCALL    I2C_START
       MOV      A,#10100000B
       LCALL    I2C_SEND8BIT
       LCALL    I2C_ACK
       JC   I2C_READ_A ;=1,表示无确认,再次发送
 
       MOV      A,Address
       LCALL    I2C_SEND8BIT
       LCALL    I2C_ACK       
 
    I2C_READ_B:
       LCALL    I2C_START
       MOV      A,#10100001B
       LCALL    I2C_SEND8BIT
       LCALL    I2C_ACK
       JC   I2C_READ_B
 
       LCALL    I2C_RECEIVE8BIT
       MOV      I2CData,A
       LCALL    I2C_ACK
       LCALL    I2C_STOP
RET
;=======================================================
;发送开始信号
I2C_START:
       SETB      SCL
       SETB      SDA
       NOP
       NOP
       CLR SDA
       NOP
       NOP
       CLR SCL
RET
;=======================================================
;发送结束信号
I2C_STOP:
       CLR SDA
       NOP
       NOP
       SETB      SCL
       NOP
       NOP
       SETB      SDA
RET
;=======================================================
;发送接收确认信号
I2C_ACk:
       SETB      SDA
       SETB      SCL
       NOP
       NOP
       JB    SDA,I2C_ACK0
       CLR C     
       SJMP      I2C_ACK_END
    I2C_ACK0:
       SETB      C
    I2C_ACK_END:
       CLR SCL
RET
;=======================================================
;送八位数据
I2C_SEND8BIT:
       MOV      B,#08H
I2C_SEND8BIT_A:       
       RLC A
       
       MOV      SDA,C
       SETB      SCL
       NOP
       NOP
       CLR SCL
       DJNZ      B,I2C_SEND8BIT_A
RET
;=======================================================
;接收八位数据
I2C_RECEIVE8BIT:
       MOV      B,#08H
       CLR A
       SETB      SDA
I2C_RECEIVE8IT_A:
       SETB      SCL
       NOP
       NOP
       MOV      C,SDA
       RLC A
       CLR SCL
       DJNZ      B,I2C_RECEIVE8IT_A
 
RET
 
 
5    C语言写的24C01 单字节读写程序
/*=======================================================
                    24C01存储器I2C总线实验   C语言例子   
 =======================================================
 
       ew51仿真编程器         配套实验板学习例程
 
       中山单片机学习网       诚电科技       站长:逸风
 
       http://www.zsmcu.com
       E-mail:ew51@zsmcu.com
=======================================================*/
#include 
#include 
sbit  SDA=0x90;
sbit  SCL=0x91;
 
//函数声明
unsigned char i2c_read(unsigned char);
void i2c_write(unsigned char,unsigned char);
 
void i2c_send8bit(unsigned char);
unsigned char i2c_receive8bit(void);
void i2c_start(void);
void i2c_stop(void);
bit i2c_ack(void);
//=======================================================
void main(void)
{
       unsigned char dd;
 
       i2c_write(0x00,0x55);
       _nop_();
 
       dd=i2c_read(0x00);
    for(;;)
       {}
}
 
/*=======================================================
i2c_write(地址,数据),写一个字节
=======================================================*/
void i2c_write(unsigned char Address,unsigned char Data)
{
       do{
       i2c_start();
       i2c_send8bit(0xA0);
       }while(i2c_ack());
       i2c_send8bit(Address);
       i2c_ack();
       i2c_send8bit(Data);
       i2c_ack();
       i2c_stop();
       return;
}
/*=======================================================
i2c_read(地址,数据),写一个字节
=======================================================*/
unsigned char i2c_read(unsigned char Address)
{
       unsigned char c;
       do{
       i2c_start();
       i2c_send8bit(0xA0);
       }while(i2c_ack());                //=1,表示无确认,再次发送
       i2c_send8bit(Address);
       i2c_ack();
 
       do{
       i2c_start();
       i2c_send8bit(0xA1);
       }while(i2c_ack());
       c=i2c_receive8bit();
       i2c_ack();
       i2c_stop();
       return(c);
}
//=======================================================
//发送开始信号
void i2c_start(void)
{
       SDA = 1;
       SCL = 1;
       SDA = 0;
       SCL = 0;
       return;
}
//发送结束信号
void i2c_stop(void)
{
       SDA = 0;
       SCL = 1; 
       SDA = 1;
       return;
}     
//发送接收确认信号
bit    i2c_ack(void)
{
       bit    ack;
       SDA = 1;
       SCL = 1;
       if     (SDA==1)
       ack = 1;
       else
       ack = 0;
       SCL = 0;
       return      (ack);
}
 
//送八位数据
void i2c_send8bit(unsigned char b)
{
       unsigned  char a;
       for(a=0;a<8;a++)
              {
              if     ((b< 
              SDA = 1;
              else 
              SDA = 0;
              SCL = 1;
              SCL = 0;
              }
       return;
}
//接收八位数据
unsigned char i2c_receive8bit(void)
{
       unsigned  char a;
       unsigned char b=0;
       for(a=0;a<8;a++)
              {
              SCL = 1;
              b=b<<1;
              if (SDA==1)
              b=b|0x01;       //按位或
              SCL = 0;
              }
       return      (b);
} 

⌨️ 快捷键说明

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