当前位置:文档之家› 24C02测试程序

24C02测试程序

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)

飞思卡尔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储存开机次数实验读写程序

24C02储存开机次数实验 24C02是2K字节的串行EEPROM, 内部含有256个8位字节,该器件通过总线操作,并有专门的写保护功能。 串行EEPROM简称I2C总线式串行器件。串行器件不仅占用很少的资源和I/O线,而且体积大大缩小,同时具有工作电源宽、抗干扰能力强、功耗低、数据不易丢失和支持在线编程等特点。 I2C总线是一种用于IC器件之间连接的二线制总线。它通过SDA(串行数据线)及SCL(串行时钟线)两根线在连到总线上的器件之间传送信息,并根据地址识别每个器件:不管是单片机、存储器、LCD驱动器还是键盘接口。 我们通过一个实验来了解24C02的读写操作过程: 该实验功能是单片机复位一次,自动从24C02中读取数据,然后加1,最终数码管中的数据就是开机的次数,具有一定的实用意义。 相关原理: 程序运行的照片:

接线方法: 1、接8位数码管的数据线。将数码管部份的数据口 JP5接到CPU部份的P0口JP51. 2、接8位数码管的显示位线。将数码管部份的显示位口 JP8接到CPU部份的P2口JP52. 3、用一根2PIN数据线一端插入CPU部份JP53(P3口)的P3.6,P3.7另外一端插入24C02部份的控制端JP38。 烧写后用手按复位键可以看到数码管每按一下加一。 程序流程图:

汇编语言参考程序:SDA24 EQU P3.7 SCLK24 EQU P3.6 ORG 0000H AJMP MAIN ORG 0080H MAIN:

CLR P3.7 ;打开写保护 MOV DPTR,#TAB MOV A,#00H ;读地址 LCALL RD24 CJNE A,#10,TT TT: JNC TT1 AJMP TT2 TT1: MOV A,#00 TT2: MOV 30H,A MOVC A,@A+DPTR CLR P2.6 ;开数码管 MOV P0,A ;送显示 MOV A,30H INC A MOV B,A MOV A,#00H LCALL WT24 AJMP $ TAB: DB 28H,7EH,0A2H,62H,74H,61H,21H,7AH,20H,60H RD24: PUSH ACC ;读24C02子程序。 SETB SDA24 CLR SCLK24 CALL START24 ;启动 MOV A,#0A0H CALL SHIFT8 ;移位 CALL ACK ;响应 POP ACC CALL SHIFT8 CALL ACK CALL START24 MOV A,#0A1H CALL SHIFT8 CALL ACK SETB SDA24 MOV R7,#8 CLR A SETB SDA24

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

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(); }

msp430f149的24c02标准C语言程序

机,msp430,avr单片机,单片机开发板单片机教程网(https://www.doczj.com/doc/d119182677.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

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 作为输出 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOB, &GPIO_InitStructure);

应广单片机读写24C02程序代码

应广单片机读写24C02程序代码 #include "extern. h〃 #include ,z main. h" ] f • 1 • • I • • I • • I • • I • • I • • I • • I • • 1 • • I • • I • • I • • I • • I • • I • • I • • 1 • • I • • I • • I • • I •• I • • I • • I • • 1 • • I • • I • • I • • I • • I • • I • • I • • 1 • • I • • I • • I • • I • • I • • I • • I • • 1 • • I • • I • • I • • I • • I • • I • • I • • 1 • • I • • I • 1 / t f ^

电气化自动技术 实验8-- 24C02读写-实验指导书

实验八 24C02读写实验 一、实验概述 使用I2C对24C02进行读写,记录开机的次数。 二、实验目的 1、掌握单片机IO模拟I2C总线的方法。 2、了解EEPROM保存数据的特性。 三、实验预习要求 1、AT24C02是一个2K位串行CMOS E2PROM,内部含有256个8位字节,CATALYST公 司的先进CMOS技术实质上减少了器件的功耗。AT24C02有一个16字节页写缓冲器。该器件通过IIC总线接口进行操作,有一个专门的写保护功能。 2、器件寻址: 前八位是地址地址信号,从最高位(MSB)开始,其中前四位是固定值1010,后三位有管脚A0、A1、A2的基地情况确定。最后一位是读写控制信号,0表示写,1表示读。若与SDA线发送过来的地址比较一致,则器件输出应答0,否则将返回等待状态。器件内部地址寻址是在器件寻址之后,对256个字节进行寻址,直接传送8位地址信 号(00-FF)对应于器件内部的地址。 四、实验原理 在实际的应用中,保存在单片机 RAM 中的数据,掉电后就丢失了,保存在单片机的FLASH 中的数据,又不能随意改变,也就是不能用它来记录变化的数值。但是在某些场合,我们又确实需要记录下某些数据,而它们还时常需要改变或更新,掉电之后 数据还不能丢失,比如我们的家用电表度数,电视机里边的频道记忆,一般都是使用EEPROM 来保存数据,特点就是掉电后不丢失。本实验使用的这个器件是 24C02,是 一个容量大小是 2Kbits,也就是 256 个字节的 EEPROM。一般情况下,EEPROM 拥有30 万到 100 万次的寿命,也就是它可以反复写入 30-100 万次,而读取次数是无限的。 24C02 是一个基于 I2C 通信协议的器件,因此,使用24C02还需要了解I2C通信协议。I2C 多用于板内通信,比如单片机和EEPROM 之间的通信。

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发生从低到高的跳变,就定义为结束信号。 开始和结束信号的时序图如下图所示:

华芯商城知识讲堂:24C02参数详解及写入源程序

今天华芯商城的知识讲堂给大家介绍一款热门的元器件24C02。 24C02是一个2K串行CMOS E2PROM,内部含有256个8位字节,该器件通过I2C总线接功能列表,主要在存储一些掉电后还要保存数据的场合,在上次运行时,保存的数据,在下一次运行时还能够调出。 24c02采用的IIC总线,是一种2线总线,我们在试验中用IO来模拟这种总线,至于总线的时序和原理,请参考相关资料。如果您不想研究,也没有关系,我们在程序中已经为你写好了,现在和今后您都可以只调用就是,不必花时间和精力去研究。 我们将24c02的两条总线接在了P26和P27上,因此,必须先定义: sbit SCL=P2^7; sbit SDA=P2^6; 在这个试验中,我们写入了一个字节数值0x88到24c02的0x02的位置。 写入完成后,P10灯会亮起,我们再在下一课来读出这个字节来验证结果。 下面一起来看具体代码吧: #define uchar unsigned char //定义一下方便使用 #define uint unsigned int #define ulong unsigned long #include //包括一个52标准内核的头文件 //本课试验写入一个字节到24c02中 char code dx516[3] _at_ 0x003b;//这是为了仿真设置的

#define WriteDeviceAddress 0xa0 //定义器件在IIC总线中的地址 #define ReadDviceAddress 0xa1 sbit SCL=P2^7; sbit SDA=P2^6; sbit P10=P1^0; //定时函数 void DelayMs(uint number) { uchar temp; for(;number!=0;number--) { for(temp=112;temp!=0;temp--) ; } } //开始总线 void Start() { SDA=1;

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