当前位置:文档之家› 24c02典型程序

24c02典型程序

24c02典型程序

#include

#include

#include

#define uchar unsigned char

#define uint unsigned int

#define adwrite 0xae //24c02地址(写)

#define adread 0xaf //24c02地址(读)

uchar num_wr[4]={'a','b','c','d'}; //存放写入数据(液晶显示abcd)

//uchar num_rd[4]; //存放读24c02回的数据

/**************************************** ***

函数名称:delayms()

功能:延迟j毫秒

参数:char j

返回值:无

***************************************** ***/

void delayms(uchar j)

{

uint i;

for(;j>0;j--)

{

for(i=0;i<125;i++)

{;}

}

}

/**************************************** ***

函数名称:rom_write()

功能:循环写进num个字节

参数:如下

返回值:无

***************************************** ***/

void rom_write(uchar date[],uchar

address,uchar num)

{

uchar i; // 循环次数

iic_start();

iic_write(adwrite); // 24c02写地址

iic_ack();

iic_write(address); // 24c02起始存储地址写入可自动+1

iic_ack();

for(i=0;i

iic_write(date[i]);

iic_ack();

}

iic_stop(); // 结束

}

/**************************************** ***

函数名称:rom_read()

功能:读回1个字节

参数:uchar address

返回值:q

***************************************** ***/

unsigned char rom_read (uchar address)

{ uchar q;

iic_start();

iic_write(0xae); //写入芯片地址

iic_ack();

iic_write(address); //写入存储地址

iic_ack();

iic_start();

iic_write(0xaf); //读回地址

iic_ack();

q=iic_read(); //读数据

iic_noack();

iic_stop(); //最后非应答

return q; //读回该地址存储的数}

/****************************************

***

函数名称:main()

功能:初始化及循环调用子函数显示

参数:无

返回值:无

***************************************** ***/

/*void main()

{

uchar i;

init(); //1602初始化

wp=0;

P2=0xff;

rom_write(num_wr,6,4); //从24c02地址6开始写入4个数据

delayms(40);

for(i=6;i<10;i++) //液晶1602显示'abcd' w_dat(rom_read(i));

while(1);

}

*/

STM32F103读写24C02程序,使用过肯定能用

//实验24C02连接在PF口 //WP、A0、A1、A2都接地 #include "stm32f10x_flash.h" #include "stm32f10x_gpio.h" #include "stm32f10x_rcc.h" #define AT24C02 0xa0 //AT24C02 地址 /******************************** 变量定义---------------------------------------------------------*/ GPIO_InitTypeDef GPIO_InitStructure; //GPIO ErrorStatus HSEStartUpStatus; unsigned char Count1 , Count2; unsigned int USEC; static vu32 TimingDelay; unsigned char Readzfc; unsigned char pDat[8] = {0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55}; unsigned char R_Dat[8]; /*********************************声明函数-----------------------------------------------*/ void RCC_Configuration(void); void SysTick_Configuration(void); void Delay_us_24C02(u32 nTime); /************************************24C02硬件接口******************************/ #define SData GPIO_Pin_6 //I2C 时钟 #define SCLK GPIO_Pin_7 //I2C 数据 /********************************宏定义*******************************************/ #define SCL(x) x ? GPIO_SetBits(GPIOF , SCLK) : GPIO_ResetBits(GPIOF , SCLK) #define SDA(x) x ? GPIO_SetBits(GPIOF , SData) : GPIO_ResetBits(GPIOF , SData) /********************************变量*******************************************/ u8 ack; /*******************************************************************

STM32-24C02读写程序(亲自编写测试可用)

本文档内容为在STM32条件下的24C02读写程序。全文共分四部分,第一部分24C02的C程序,第二部分为24C02的.h程序,第三部分为端口与时钟配置函数,第四部分为主函数。下面分别进行介绍。 第一部分:24C02的.c函数 ******************************************************************************/ #include "stm32f10x.h" #include "system_config.h" #include "24C02.h" u8 savedata[10]={10,9,8,7,6,5,4,3,2,1}; /****************************************************************************** * * Function Name : AT24C02_SDA_IO_SET(uchar io_set) * Description : SDA方向控制 * Input : None * Output : None * Return : None ******************************************************************************* / void AT24C02_SDA_IO_SET(unsigned char io_set) { GPIO_InitTypeDef GPIO_InitStructure; if(io_set) { GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7 ;//SDA 设置为输出 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init(GPIOB, &GPIO_InitStructure); } else { GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7 ;//SDA 设置为输入 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_Init(GPIOB, &GPIO_InitStructure); } } /****************************************************************************** * * Function Name : delay2 * Description : 延时函数 * Input : None * Output : None

24c02读写程序大全

51晶振为 〖文件〗 2001/09/18 --------------------------------------------------------------------------------*/ /*--------------------------------------------------------------------------------------------------------------- 调用方式:void WriteIIC_24CXX(enum EEPROMTYPE eepromtype,unsigned int address,unsigned char ddata) ﹫2001/09/18 函数说明:对于IIC芯片24CXX,在指定地址address写入一个字节ddata 调用方式:unsigned char ReadIIC_24CXX(enum EEPROMTYPE eepromtype,unsigned int address) ﹫2001/09/18 函数说明:读取IIC芯片24CXX,指定地址address的数据。 -----------------------------------------------------------------------------------------------------------------*/ #include "" #include "" sbit SCL= P2^7; sbit SDA= P2^6; enum EEPROMTYPE {IIC24C01,IIC24C01A,IIC24C02,IIC24C04,IIC24C08,IIC24C16,IIC24C32,IIC24C64,IIC24C128 ,IIC24C256}; enum EEPROMTYPE eepromtype; delay() { unsigned int i=1200; while(i--); } /*---------------------------------------------------------------------------- 调用方式:write_8bit(unsigned char ch) ﹫2001/03/23 函数说明:内函数,私有,用户不直接调用。 -------------------------------------------------------------------------------*/ void write_8bit(unsigned char ch)

STM32模拟IIC读写24C02程序代码

STM32模拟IIC读写24C02程序代码 STM32 模拟IIC读写24C02程序代码 最近用到STM32F103V来读写A T24C02 EEPROM 于是从原来51单片机的程序代码的基础上修改了下,移植到了STM32,测试工作正常。 引脚定义和配置: #define SCL GPIO_Pin_6 //24C02 SCL #define SDA GPIO_Pin_7 //24C02 SDA void GPIO_Configuration(void) { RCC_APB2PeriphClockCmd( RCC_APB2Periph_USART1 |RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOC | RCC_APB2Periph_GPIOD | RCC_APB2Periph_GPIOE, ENABLE); GPIO_InitStructure.GPIO_Pin = SCL; //24C02 SC L GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOB, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = SDA; //24C02 SDA 作为输出 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOB, &GPIO_InitStructure); } void AT24C02_SDA_IO_SET(unsigned char io_set) //SDA引脚输入输出设置 { if(io_set==0) { GPIO_InitStructure.GPIO_Pin = SDA; //24C02 SDA 作为输出

飞思卡尔IIC的24c02程序

本程序是HCS系列都可以本人已通过实验下面是程序代码 /*****************头文件*****************************************/ #include /* for EnableInterrupts macro */ #include "derivative.h" /* include peripheral declarations */ #include "iic24c02.h" /*********************延时函数************************************/ void delay(void) { byte i; i=8; while(i>0) { i--; } } /*********************ICC初始化************************************/ void Init_IIC(void) { SOPT1_IICPS=0; //IIC 在PTA引脚上 // IICF=0x0d; //设置波特率<100kbps // IICF=0X4B; IICF=0X24; IICC_IICEN=1;//使能IIC IICC_TXAK=0; //当接收完一字节数据产生确认位 IICC_IICIE=0;//禁止中断 // IICA=0x38; } /*********************写函数************************************/ void WRITE_IIC(uchar addres,uchar date) { byte temp; IICC_IICEN = 0; IICC_IICEN = 1; //使能IIC

24c02典型程序

24c02典型程序

#include #include #include #define uchar unsigned char #define uint unsigned int #define adwrite 0xae //24c02地址(写) #define adread 0xaf //24c02地址(读) uchar num_wr[4]={'a','b','c','d'}; //存放写入数据(液晶显示abcd) //uchar num_rd[4]; //存放读24c02回的数据 /**************************************** *** 函数名称:delayms() 功能:延迟j毫秒 参数:char j 返回值:无

***************************************** ***/ void delayms(uchar j) { uint i; for(;j>0;j--) { for(i=0;i<125;i++) {;} } } /**************************************** *** 函数名称:rom_write() 功能:循环写进num个字节 参数:如下 返回值:无 ***************************************** ***/ void rom_write(uchar date[],uchar

address,uchar num) { uchar i; // 循环次数 iic_start(); iic_write(adwrite); // 24c02写地址 iic_ack(); iic_write(address); // 24c02起始存储地址写入可自动+1 iic_ack(); for(i=0;i

24C02原理图及应用程序

程序: #include #include #define uchar unsigned char sbit SCL=P3^6; //I2C 时钟 sbit SDA=P3^7; //I2C 数据 sbit anjian_1=P3^5; uchar code LED[]= {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71}; void delay_us() { _nop_(); /*起始条件建立时间大于4.7us,延时*/ _nop_(); _nop_(); _nop_(); _nop_(); _nop_();

_nop_(); _nop_(); } delay_ms() { unsigned int i; for(i=0;i<20000;i++); } void delayms(unsigned int k) { unsigned int j,i; for(j=k;j>0;j--) for(i=110;i>0;i--); } void Start_I2c() { SDA=1; /*发送起始条件的数据信号*/ delay_us(); SCL=1; delay_us(); SDA=0; /*发送起始信号*/ delay_us(); } void Stop_I2c() { SDA=0; /*发送结束条件的数据信号*/ delay_us(); SCL=1; delay_us(); SDA=1; /*发送I2C总线结束信号*/ delay_us(); } void Ack_I2c() //应答函数 { uchar i=0; SCL=1; delay_us(); while(SDA==1&&i<200) i++; SCL=0; delay_us(); }

AT24C02程序

//试验AT24C02EEPROM芯片程序 #include #include #define uint unsigned int #define uchar unsigned char unsigned char sec; //定义计数值,每过1秒,sec加1 unsigned int tcnt; //定时中断次数 bit write=0; //写24C08的标志; sbit sda=P2^0; //IO口定义 sbit scl=P2^1; sbit dula=P2^6; sbit wela=P2^7; unsigned char j,k; void delay(unsigned char i) //延时程序 { for(j=i;j>0;j--) for(k=125;k>0;k--); } uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d, //数码管编码 0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; void display(uchar bai_c,uchar sh_c) //显示程序 { dula=0; P0=table[bai_c]; //显示百位 dula=1; dula=0; wela=0; P0=0x7e; wela=1; wela=0; delay(5); dula=0; P0=table[sh_c]; //显示十位 dula=1; dula=0; wela=0; P0=0x7d; wela=1; wela=0; delay(5);

ATMEGA16读写iic(TWI)(24c02) C语言程序

ATMEGA16读写iic(24c02) C语言程序测试通过 #include #include "I2C.h" #include "1602.h" #include "delay.h" /*通过AVR往I IC写数据,并通过串口把数据读出显示出来*/ //=============================================================== void UART_init(void) //UART初始化 { DDRD = 0x02; PORTD = 0x00; UCSRA = 0x02; /*无倍速*/ UCSRB = 0x18; /*允许接收和发送*/ UC SRC = 0x06; /*8位数据,1位停止位,无校验*/ UBRRH = 0x00; UBRRL = 12; /*9600*/ } //=============================================================== void USART_TXD(float data) //发送采用查询方式 { while( !(UCSRA & BIT(UDRE)) ); UDR=data; while( !(UCSRA & BIT(TXC )) ); UCSRA|=BIT(TXC); } void main(void) { unsigned char i; //LCD_init(); uart_init();//TART初始化 SEI(); //全局中断使能

while(1) {/* I2C_Write('n',0x00); I2C_Write('c',0x01); I2C_Write('e',0x02); I2C_Write('p',0x03); I2C_Write('u',0x04); */ i=I2C_Read(0x00); //LCD_write_char(0,0,i); USART_TXD(i); i=I2C_Read(0x01); //LCD_write_data(i); USART_TXD(i); i=I2C_Read(0x02); //LCD_write_data(i); USART_TXD(i); i=I2C_Read(0x03); //LCD_write_data(i); USART_TXD(i); i=I2C_Read(0x04); //LCD_write_data(i); USART_TXD(i); } } /*上面上主函数部分*/ #include #include "delay.h" //I2C 状态定义 //MT 主方式传输 MR 主方式接受#define START 0x08 #define RE_START 0x10 #define MT_SLA_ACK 0x18 #define MT_SLA_NOACK 0x20 #define MT_DATA_ACK 0x28 #define MT_DATA_NOACK 0x30 #define MR_SLA_ACK 0x40 #define MR_SLA_NOACK 0x48 #define MR_DATA_ACK 0x50 #define MR_DATA_NOACK 0x58

msp430f149的24c02标准C语言程序

机,msp430,avr单片机,单片机开发板单片机教程网(https://www.doczj.com/doc/6019006015.html,)是专业提供各种单片机教程、资料、程序,为初学者打造一个良好的学习交流的平台! msp430f149的24c02标准C语言程序 #include typedef unsigned char uchar; typedef unsigned int uint; #define SCL_H P3OUT |= BIT3 #define SCL_L P3OUT &= ~BIT3 #define SDA_H P3OUT |= BIT1 #define SDA_L P3OUT &= ~BIT1 #define SDA_in P3DIR &= ~BIT1 //SDA改成输入模式 #define SDA_out P3DIR |= BIT1 //SDA变回输出模式 #define SDA_val P3IN&BIT1 //SDA的位值 #define TRUE 1 #define FALSE 0

#define deviceaddress 0xa0 //AT24C02的设备地址/********************************************/ /******************************************* 函数名称:delay 功能:延时约15us的时间 参数:无 返回值:无 ********************************************/ void delay(void) { uchar i; for(i = 0;i 15;i++) _NOP(); } /******************************************* 函数名称:start 功能:完成IIC的起始条件操作 参数:无 返回值:无 ********************************************/ void start(void) { SCL_H; SDA_H; delay(); SDA_L; delay(); SCL_L;

ATMEL24c02使用详解(汇编及C程序都有)

ATMEL 24c02使用详解(汇编及C程序都有)1000字 ATMEL 24c02是一种串行EEPROM存储器,具有2KB的存储容量,可通过I2C总线进行读写操作。 使用ATMEL 24c02时,需先设置I2C总线的通信速率和设备地址。然后,可以使用汇编语言或C语言编写程序进行读写数据操作。 汇编语言程序示例: 1. 设置I2C总线通信速率及设备地址 ``` LDAA #$0 ;设置I2C总线通信速率为100kHz STAA SCLDIV LDAA #$A0 ;设置EEPROM的设备地址为0xA0 STAA SLA ``` 2. 写入数据到EEPROM ``` BYTE_WRITE PROC LDAA #$00 ;设置数据的存储地址为0x00 STAA DADDR LDAA #$A5 ;设置需要写入的数据为0xA5 STAA DATA JSR I2C_WRITE ;调用I2C总线写入函数 RTS BYTE_WRITE ENDP ```

3. 从EEPROM读取数据 ``` BYTE_READ PROC LDAA #$00 ;设置数据的读取地址为0x00 STAA DADDR JSR I2C_START ;发送起始信号 LDAA #$A1 ;设置EEPROM的设备地址为0xA1,读操作时需要在地址末位添加1 JSR I2C_SEND ;发送EEPROM设备地址 LDAA #$00 ;设置要读取的数据长度为1 JSR I2C_READ ;调用I2C总线读取函数 LDA DATA ;将读取到的数据保存到DATA寄存器中 RTS BYTE_READ ENDP ``` C语言程序示例: 1. 在main函数中,调用I2C_Init()函数,设置I2C总线速率和设备地址。 ``` void main() { I2C_Init(); //设置I2C总线速率和设备地址 } ``` 2. 写入数据到EEPROM

24C02(IIC)读写操作

1. AT24C02写操作 首先我们来看一下写AT24C02。 一般步骤是: 1) 发送起始信号 2) 发送写器件地址 3) 等待应答 4) 发送要写入的24C02 的地址 5) 等待应答 6) 发送要写入的数据 7) 等待应答 8) 发送数据结束发送结束信号 具体程序如下: /****************************************************************************** * * 函数名: AT24Cxx_WriteOneByte * 函数功能: 24c02写一个字节地址数据 * 输入: addr dt * 输出: 无 ********************************************/ void AT24Cxx_WriteOneByte(u16 addr,u8 dt) { I2C_Start(); if(EE_TYPE>AT24C16) { I2C_Send_Byte(0xA0); I2C_Wait_Ack(); I2C_Send_Byte(addr>>8); //发送数据地址高位 } else { I2C_Send_Byte(0xA0+((addr/256)<<1));//器件地址+数据地址 } I2C_Wait_Ack(); I2C_Send_Byte(addr%256);//双字节是数据地址低位 //单字节是数据地址低位 I2C_Wait_Ack(); I2C_Send_Byte(dt); I2C_Wait_Ack(); I2C_Stop(); delay_ms(10); } 2. AT24C02读操作 那么读取AT24C02 的步骤是:

24c02驱动程序

/********************************************************************** 24c02驱动的使用方法 1、要想出入数据时只要使用write_data24c02(uchar address,ulong date);函数即可 2、要想读出数据时只要使用read_address24c02(uchar address)即可返回其内容值 **********************************************************************/ //ucharshuju_24c02;//需要显示我们存入24c02的内容时才要使用此变量,否则将其屏蔽 sbit SCK24c02=P1^5; sbit SDA24c02=P1^4; //6us延时函数 void delay24c02(uintz)ﻩ { while(z-—); } void init24c02()ﻩ //总线初始化函数 { SCK24c02=1; delay24c02(1); SDA24c02=1; delay24c02(1); } void start24c02() //2402开始信号函数 { SDA24c02=1; delay24c02(1); SCK24c02=1; delay24c02(1); SDA24c02=0; } 2402停止信号函数 void stop24c02()ﻩ // { SDA24c02=0; delay24c02(1); SCK24c02=1; delay24c02(1); SDA24c02=1; delay24c02(); } void yingda24c02()ﻩ//2402应答函数

24c02读写程序

E2PROM芯片24C02的读写程序 一、实验目的: 给24C02的内部RAM写入一组数据,数据从24C02内部RAM的01h开始存放。然后再把这组数据读出来,检验写入和读出是否正确。 在这里我们给24C02中写入0、1、2的段码,然后把它读出来,送到数码管显示。 二、理论知识准备: 上面两个实验主要学习的是利用单片机的串口进行通讯,本实验要介绍的是基于I2C总线的串行通讯方法,下面我们先介绍一下I2C总线的相关理论知识。 (一)、I2C总线概念 I2C总线是一种双向二线制总线,它的结构简单,可靠性和抗干扰性能好。目前很多公司都推出了基于I2C总线的外围器件,例如我们学习板上的24C02芯片,就是一个带有I2C总线接口的E2PROM存储器,具有掉电记忆的功能,方便进行数据的长期保存。 (二)、I2C总线结构 I2C总线结构很简单,只有两条线,包括一条数据线(SDA)和一条串行时钟线(SCL)。具有I2C接口的器件可以通过这两根线接到总线上,进行相互之间的信息传递。连接到总线的器件具有不同的地址,CPU根据不同的地址进行识别,从而实现对硬件系统简单灵活的控制。 一个典型的I2C总线应用系统的组成结构如下图所示(假设图中的微控制器、LCD驱动、E2PROM、ADC各器件都是具有I2C总线接口的器件): 我们知道单片机串行通讯的发送和接收一般都各用一条线TXD和RXD,而I2C总线的数据线既可以发送也可以接受,工作方式可以通过软件设置。所以,I2C总线结构的硬件结构非常简洁。

当某器件向总线上发送信息时,它就是发送器,而当其从总线上接收信息时,又成为接收器。 (三)、I2C总线上的数据传送 下面我们看看I2C总线是如何进行数据传送的。我们知道,在一根数据线上传送数据时必须一位一位的进行,所以我们首先研究位传送。 1、位传输 I2C总线每传送一位数据必须有一个时钟脉冲。被传送的数据在时钟SCL的高电平期间保持稳定,只有在SCL低电平期间才能够改变,示意图如下图所示,在标准模式下,高低电平宽度必须不小于4.7us。 那么是不是所有I2C总线中的信号都必须符合上述的有效性呢?只有两个例外,就是开始和停止信号。 开始信号:当SCL为高电平时,SDA发生从高到低的跳变,就定义为开始信号。 停止信号:当SCL为高电平时,SDA发生从低到高的跳变,就定义为结束信号。 开始和结束信号的时序图如下图所示:

相关主题
文本预览
相关文档 最新文档