当前位置:文档之家› PIC读写24LCxx系列的EEPROM的实例C语言程序

PIC读写24LCxx系列的EEPROM的实例C语言程序

PIC读写24LCxx系列的EEPROM的实例C语言程序
PIC读写24LCxx系列的EEPROM的实例C语言程序

PIC:读写24LCxx系列的EEPROM的实例C语言程序

//********************************************************* //* Using I2C Master Mode for access Slave (EEPRM)

//*

//* Written by: Richard Yang

//* Sr. Corporate Application Engineer

//* Microchip Technology Inc.

//* Date: Oct. 3nd '2002

//* Revision: 1.00

//* Language tools : MPLAB-C18 v2.09.13

//* MPLINK v3.10

//* MPLAB-IDE v6.00.17 & ICD2 //***********************************************************

/* Include Header files */

#i nclude

#i nclude // Load I2C Header file from defult direct

#i nclude

#i nclude "P18LCD.h" // Load P18LCD Header file form current working direct

/* Declare the Function Prototype */

void Initialize_I2C_Master(void);

void EE_Page_Write(unsigned char,unsigned char,unsigned char,unsigned char *); void EE_SEQU_Read(unsigned char,unsigned char,unsigned char,unsigned char *);

void EEPROM_Write(unsigned char,unsigned char,unsigned char);

void EEPROM_ACK(unsigned char);

unsigned char EEPROM_Read(unsigned char,unsigned char);

void I2C_Done(void);

void Initialize_Timer2(void);

void isr_high_direct(void);

void isr_high(void);

#pragma romdata My_romdata=0x1000

const rom far unsigned char LCD_MSG1[]="SW2: Byte Write ";

const rom far unsigned char LCD_MSG2[]="SW6: Random Read";

const rom far unsigned char LCD_MSG3[]="Byte Write Mode ";

const rom far unsigned char LCD_MSG4[]="Random Read Mode";

const rom far unsigned char LCD_MSG5[]="Sended: ";

const rom far unsigned char LCD_MSG6[]="Send: ";

const rom unsigned char I2C_Write_Buffer[]="Microchip Technology";

#pragma romdata

/* Define following array in data memory */

unsigned char I2C_Read_Buffer [32];

/* define following variable in data memory at Access Bank */

#pragma udata access My_RAM

near unsigned char Debounce;

near unsigned char Send_Addr;

near unsigned char Send_Data;

near unsigned char Send_Length;

near unsigned char Read_Data;

near unsigned char P_SW2;

near unsigned char P_SW6;

#pragma udata

#define Page_Length 8

#define SW2 PORTAbits.RA4

#define SW6 PORTEbits.RE1

#define Bounce_Time 6

#define EE_CMD 0xA0

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

/* */

/* Main Program */

/* */

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

void main(void)

{

ADCON1=0b00000110; // Disable A/D Function

TRISAbits.TRISA4=1; // Set SW2 for input

TRISEbits.TRISE1=1; // Set SW6 for Input

Initialize_Timer2( );

Initialize_I2C_Master( );

OpenLCD( );

if (SW2 & SW6)Debounce=0;

else Debounce = Bounce_Time;

while(1)

{

LCD_Set_Cursor(0,0); // Put LCD Cursor on (0,0)

putrsLCD(LCD_MSG1);

LCD_Set_Cursor(1,0); // Put LCD Cursor on (1,0)

putrsLCD(LCD_MSG2);

P_SW2=P_SW6=0;

Send_Addr=0;

while(1)

{

if (P_SW2)

{

P_SW2=0;

Debounce = Bounce_Time;

LCD_Set_Cursor(0,0); // Put LCD Cursor on (0,0)

putrsLCD(LCD_MSG3);

LCD_Set_Cursor(1,0); // Put LCD Cursor on (0,0)

putrsLCD(LCD_MSG5);

do

{

while (!P_SW2);

P_SW2=0;

LCD_Set_Cursor(1,8);

Send_Data=I2C_Write_Buffer[Send_Addr];

EEPROM_Write(EE_CMD,Send_Addr,Send_Data);

puthexLCD(EE_CMD);

putcLCD(' ');

puthexLCD(Send_Addr);

putcLCD(' ');

puthexLCD(Send_Data);

EEPROM_ACK(EE_CMD);

Send_Addr++;

} while (I2C_Write_Buffer[Send_Addr]!=0x00);

break;

}

if (P_SW6)

{

P_SW6=0;

Debounce = Bounce_Time;

LCD_Set_Cursor(0,0); // Put LCD Cursor on (0,0)

putrsLCD(LCD_MSG4);

LCD_Set_Cursor(1,0); // Put LCD Cursor on (0,0)

putrsLCD(LCD_MSG6);

while(1)

{

if (P_SW6)

{

P_SW6=0;

LCD_Set_Cursor(1,5);

Read_Data = EEPROM_Read(EE_CMD,Send_Addr);

puthexLCD(EE_CMD);

putcLCD(' ');

puthexLCD(Send_Addr);

putcLCD(' ');

puthexLCD(EE_CMD);

putcLCD(' ');

puthexLCD(Read_Data);

Send_Addr++;

}

if (P_SW2) break;

}

if (P_SW2) break;

}

if (P_SW2)

{

P_SW2=0;

break;

}

}

}

}

//************************************************ //* #pragma Interrupt Declarations *

//* *

//* Function: isr_high_direct *

//* - Direct execution to the actual *

//* high-priority interrupt code. *

//************************************************ #pragma code isrhighcode = 0x0008

void isr_high_direct(void)

{

_asm //begin in-line assembly

goto isr_high //go to isr_high function

_endasm //end in-line assembly

}

#pragma code

//************************************************ //* Function: isr_high(void) *

//* High priority interrupt for Timer2 * //************************************************

#pragma interrupt isr_high

void isr_high(void)

{

PIR1bits.TMR2IF=0; // Clear Timer2 interrupt Flag

if (Debounce==0)

{

if (!SW2)

{ P_SW2=1; Debounce =Bounce_Time; }

if (!SW6)

{ P_SW6=1; Debounce =Bounce_Time; }

}

else if (SW2 & SW6)Debounce--;

else Debounce =Bounce_Time;

}

#pragma code

//*********************************************** //* Write a Byte to EEPROM

//* - ctrl : Control Byte of EEPROM

//* - addr : Location of EEPROM

//* - data : Data Byte of EEPROM

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

void Initialize_Timer2(void)

{

RCONbits.IPEN=1; // Enable Interrupt Priority bit

IPR1bits.TMR2IP=1; // Set Timer2 for High Priority

INTCONbits.GIEH=1; // Enable High Priority Interrupt

OpenTimer2 (TIMER_INT_ON // Turn On the Timer2 with Interrupt & T2_PS_1_4 // (4Mhz/4) [4*10*(99+1)] = 4mS */

& T2_POST_1_10);

PR2 = 99;

}

//*********************************************** //* Write a Byte to EEPROM *

//* - ctrl : Control Byte of EEPROM *

//* - addr : Location of EEPROM *

//* - data : Data Byte of EEPROM *

//*********************************************** void EEPROM_Write(unsigned char ctrl,unsigned char addr,unsigned char data)

{

IdleI2C(); // ensure module is idle

StartI2C(); // Start condition

I2C_Done(); // Wait Start condition completed and clear SSPIF flag

WriteI2C(ctrl); // Write Control+Write to EEPROM & Check BF flag

while(SSPCON2bits.ACKSTAT); // wait until received the Acknowledge from EEPROM

I2C_Done(); // Clear SSPIF flag

WriteI2C(addr); // Write Address to EEPROM

while(SSPCON2bits.ACKSTAT); // wait until received the Acknowledge from EEPROM

I2C_Done();

WriteI2C(data); // Write Data to EEPROM

while(SSPCON2bits.ACKSTAT); // wait until received the Acknowledge from EEPROM

I2C_Done();

StopI2C(); // Stop condition

I2C_Done(); // Wait the Stop condition completed

}

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

//* Pae Write to EEPROM

//*

//* - ctrl : Control Byte of EEPROM

//* - addr : Location of EEPROM

//* - length : Write counter

//* - *dptr : RAM point --> EEPROM

//*

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

void EE_Page_Write(unsigned char ctrl,unsigned char addr,unsigned char length,unsigne

d char *dptr)

{

IdleI2C(); // ensure module is idle

StartI2C(); // Start condition

I2C_Done(); // Wait Start condition completed

WriteI2C(ctrl); // Write Control+Write to EEPROM & Check BF flag

while(SSPCON2bits.ACKSTAT); // wait until received the Acknowledge from EEPROM

I2C_Done(); // Clear SSPIF flag

WriteI2C(addr); // Write Address to EEPROM

while(SSPCON2bits.ACKSTAT); // wait until received the Acknowledge from EEPROM

I2C_Done();

while (length!=0) // Check write completed ?

{

WriteI2C(*dptr); // Write data to EEPROM

while(SSPCON2bits.ACKSTAT); // wait until received the Acknowledge from EEPROM

I2C_Done();

dptr++; // Point to next byte

length--;

}

StopI2C(); // Stop condition

I2C_Done(); // Wait the Stop condition completed

}

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

//* EEPROM Acknowledge Polling *

//* -- The routine will polling the ACK *

//* response from EEPROM *

//* -- ACK=0 return *

//* -- ACK=1 send Restart & loop check *

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

void EEPROM_ACK(unsigned char ctrl)

{

unsigned char i;

IdleI2C(); // ensure module is idle

StartI2C(); // Start condition

I2C_Done(); // Wait Start condition completed

WriteI2C(ctrl); // Write Control to EEPROM (WRITE)

I2C_Done(); // Clear SSPIF flag

while (SSPCON2bits.ACKSTAT) // test for Acknowledge from EEPROM

{

for (i=0;i<100;i++); // Delay for next Repet-Start

RestartI2C(); // initiate Repet-Start condition

I2C_Done(); // Wait Repet-Start condition completed

WriteI2C(ctrl); // Write Control to EEPROM (WRITE)

I2C_Done(); // Clear SSPIF flag

}

StopI2C(); // send STOP condition

I2C_Done(); // wait until stop condition is over

}

//*********************************************** //* Random Read a Byte from EEPROM *

//* - ctrl : Control Byte of EEPROM (Write) *

//* (Ctrl +1 ) : Read Command *

//* - addr : Address Byte of EEPROM *

//* - Return : Read Data from EEPROM *

//*********************************************** unsigned char EEPROM_Read(unsigned char ctrl,unsigned char addr)

{

unsigned char f;

IdleI2C(); // ensure module is idle

StartI2C(); // Start condition

I2C_Done(); // Wait Start condition completed

WriteI2C(ctrl); // Write Control to EEPROM while(SSPCON2bits.ACKSTAT); // test for ACK condition, if received

I2C_Done(); // Clear SSPIF flag

WriteI2C(addr); // Write Address to EEPROM while(SSPCON2bits.ACKSTAT); // test for ACK condition, if received

I2C_Done(); // Clear SSPIF flag

RestartI2C(); // initiate Restart condition

I2C_Done();

WriteI2C(ctrl+1); // Write Control to EEPROM

while(SSPCON2bits.ACKSTAT); // test for ACK condition, if received

I2C_Done(); // Clear SSPIF flag

f=ReadI2C(); // Enable I2C Receiver & wait BF=1 until received data

I2C_Done(); // Clear SSPIF flag

NotAckI2C(); // Genarate Non_Acknowledge to EEPROM

I2C_Done();

StopI2C(); // send STOP condition

I2C_Done(); // wait until stop condition is over

return(f); // Return Data from EEPROM

}

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

//* Sequential Read from EEPROM

//*

//* - ctrl : Control Byte of EEPROM

//* - addr : Location of EEPROM

//* - length : Read counter

//* - *dptr : Store EEPROM data to RAM

//*

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

void EE_SEQU_Read(unsigned char ctrl,unsigned char addr,unsigned char length,unsigne

d char *dptr)

{

IdleI2C(); // ensure module is idle

StartI2C(); // Start condition

I2C_Done(); // Wait Start condition completed

WriteI2C(ctrl); // Write Control to EEPROM

while(SSPCON2bits.ACKSTAT); // test for ACK condition, if received

I2C_Done(); // Clear SSPIF flag

WriteI2C(addr); // Write Address to EEPROM

while(SSPCON2bits.ACKSTAT); // test for ACK condition, if received

I2C_Done(); // Clear SSPIF flag

RestartI2C(); // initiate Restart condition

I2C_Done();

WriteI2C(ctrl+1); // Write Control to EEPROM

while(SSPCON2bits.ACKSTAT); // Test for ACK condition, if received

I2C_Done(); // Clear SSPIF flag

while (length!=0)

{

*dptr=ReadI2C(); // Enable I2C Receiver & Store EEPROM data to Point buffer

I2C_Done();

dptr++;

length--;

if (length==0) NotAckI2C();

else AckI2C(); // Continue read next data, send a acknowledge to EEPROM

I2C_Done();

}

StopI2C(); // send STOP condition

I2C_Done(); // wait until stop condition is over

}

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

//* Check I2C action that is completed *

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

void I2C_Done(void)

{

while (!PIR1bits.SSPIF); // Completed the action when the SSPIF is Hi.

PIR1bits.SSPIF=0; // Clear SSPIF

}

//************************************************ //* Initial I2C Master Mode with 7 bits Address *

//* Clock Speed : 100KHz @4MHz *

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

void Initialize_I2C_Master(void)

{

OpenI2C(MASTER,SLEW_ON);

SSPADD= 9;

}

静态存储器-实验报告

计算机科学与技术系 实验报告 专业名称计算机科学与技术 课程名称计算机组成与结构 项目名称静态随机存储器实验 班级 学号 姓名 同组人员无 实验日期 2015-10-24

一、实验目的与要求 掌握静态随机存储器RAM 工作特性及数据的读写方法 二、实验逻辑原理图与分析 2.1 实验逻辑原理图及分析 实验所用的静态存储器由一片6116(2K ×8bit)构成(位于MEM 单元),如下 图所示。6116有三个控制线:CS(片选线)、OE(读线)、WE(写线),当片选有效(CS=0)时,OE=0时进行读操作,WE=0时进行写操作,本实验将CS 常接地线。 由于存储器(MEM)最终是要挂接到CPU 上,所以其还需要一个读写控制逻辑,使得CPU 能控制MEM 的读写,实验中的读写控制逻辑如下图所示,由于T3的参与,可以保证MEM 的写脉宽与T3一致,T3由时序单元的TS3给出。IOM 用来选择是对I/O 还是对MEM 进行读写操作,RD=1时为读,WR=1时为写。 XMRD XIOR XIOW XMWR RD IOM WE T3 读写控制逻辑 实验原理图如下如所示,存储器数据线接至数据总线,数据总线上接有8 个LED 灯显示D7…D0的内容。地址线接至地址总线,地址总线上接有8个LED 灯显示A7…A0的内容,地址由地址锁存器(74LS273,位于PC&AR 单元)给出。数据开关(位于IN 单元)经一个三态门(74LS245)连至数据总线,分时给出地址和数据。地址寄存器为8位,接入6116的地址A7…A0,6116的高三位地址A10…A8接地,所以其实际容量为256字节。

实现存储器EEPROM AT24C02的数据读写操作 采用IIC总线读写 C程序

/*************************************************************** 功能:11:32 2008-6-27 作者:SG 时间:2004-03-15 版本:V1.0 ***************************************************************/ #include "INTRINS.H" #include "reg52.h" #define WriteDeviceAddress 0xa0 //写驱动地址指令 #define ReadDeviceAddress 0xa1 //读驱动地址指令 sbit AT24C02_SCL = 0xa4; sbit AT24C02_SDA = 0xa5; /*------------------------------------------------------------- 功能:发起始信号 ------------------------------------------------------------*/ void Start_Cond() { AT24C02_SCL = 0; _nop_(); AT24C02_SDA = 1; _nop_(); AT24C02_SCL = 1; _nop_(); AT24C02_SDA = 0; _nop_(); } /*------------------------------------------------------------- 功能:发停止信号 ------------------------------------------------------------*/ void Stop_Cond() { AT24C02_SCL = 0; _nop_(); AT24C02_SDA = 0; _nop_(); AT24C02_SCL = 1; _nop_(); AT24C02_SDA = 1; _nop_();

计算机组成原理存储器读写和总线控制实验实验报告

信息与管理科学学院计算机科学与技术 实验报告 课程名称:计算机组成原理 实验名称:存储器读写和总线控制实验 姓名:班级:指导教师:学号: 实验室:组成原理实验室 日期: 2013-11-22

一、实验目的 1、掌握半导体静态随机存储器RAM的特性和使用方法。 2、掌握地址和数据在计算机总线的传送关系。 3、了解运算器和存储器如何协同工作。 二、实验环境 EL-JY-II型计算机组成原理实验系统一套,排线若干。 三、实验内容 学习静态RAM的存储方式,往RAM的任意地址里存放数据,然后读出并检查结果是否正确。 四、实验操作过程 开关控制操作方式实验 注:为了避免总线冲突,首先将控制开关电路的所有开关拨到输出高电平“1”状态,所有对应的指示灯亮。 本实验中所有控制开关拨动,相应指示灯亮代表高电平“1”,指示灯灭代表低电平“0”。连线时应注意:对于横排座,应使排线插头上的箭头面向自己插在横排座上;对于竖排座,应使排线插头上的箭头面向左边插在竖排座上。 1、按图3-1接线图接线: 2、拨动清零开关CLR,使其指示灯显示状态为亮—灭—亮。 3、往存储器写数据:

以往存储器的(FF ) 地址单元写入数据“AABB ”为例,操作过程如下: 4、按上述步骤按表3-2所列地址写入相应的数据 表3-2 5、从存储器里读数据: 以从存储器的(FF ) 地址单元读出数据“AABB ”为例,操作过程如下: (操作) (显示) (操作) (显示) (操作) (显6、按上述步骤读出表3-2数据,验证其正确性。 五、实验结果及结论 通过按照实验的要求以及具体步骤,对数据进行了严格的检验,结果是正确的,具体数据如图所示:

Eeprom的读写

所看过的对24系列I2C读写时序描述最准确最容易理解的资料,尤其是关于主从器件的应答描述和页写描述,看完后明白了很多。关于页写的描述,网络上绝大部分范程都没提到页写时的数据地址必须是每页的首地址才能准确写入,而且如果写入超过一页的数据会循环覆盖当前页的数据。 关于IIC总线 I2C总线:i2c总线是Philips 公司首先推出的一种两线制串行传输总线。它由一根数据线(SDA)和一根时钟线(SDL)组成。i2c总线的数据传输过程如图3所示,基本过程为: 1、主机发出开始信号。 2、主机接着送出1字节的从机地址信息,其中最低位为读写控制码(1为读、0为写),高7位为从机器件地址代码。 3、从机发出认可信号。 4、主机开始发送信息,每发完一字节后,从机发出认可信号给主机。 5、主机发出停止信号。 I2C总线上各信号的具体说明: 开始信号:在时钟线(SCL)为高电平其间,数据线(SDA)由高变低,将产生一个开始信号。 停止信号:在时钟线(SCL)为高电平其间,数据线(SDA)由低变高,将产生一个停止信号。 应答信号:既认可信号,主机写从机时每写完一字节,如果正确从机将在下一个时钟周期将数据线(SDA)拉低,以告诉主机操作有效。在主机读从机时正确读完一字节后,主机在下一个时钟周期同样也要将数据线(SDA)拉低,发出认可信号,告诉从机所发数据已经收妥。(注:读从机时主机在最后1字节数据接收完以后不发应答,直接发停止信号)。 注意:在I2C通信过程中,所有的数据改变都必须在时钟线SCL为低电平时改变,在时钟线SCL为高电平时必须保持数据SDA信号的稳定,任何在时钟线为高电平时数据线上的电平改变都被认为是起始或停止信号。 作为一种非易失性存储器(NVM),24系列EEPROM使用的很普遍,一般作为数据量不太大的数据存储器。下面总结一下其应用的一些要点。从命名上看,24CXX中XX的单位是kbit,如24C08,其存储容量为8k bit,即1k Byte=1024 Byte。 一、工作条件 1.工作电压(VCC) 24CXX:4.5V-5.5V 24CXX-W:2.5V-5.5V 24CXX-R:1.8V-5.5V 2.输入电平定义(VIH,VIL) VIH:0.7VCC-VCC+1 VIL:-0.45V-0.3VCC 二、硬件连接 1.上拉电阻RP的取值 由于I2C总线电容要满足小于400pf的条件。从以下波形可以看出,上拉电阻越大,总线的电容越小,可以实现的数据传输率就越大,可达400khz。 [点击图片可在新窗口打开] 2.写保护脚 芯片写保护脚是高电平有效,即WP接高电平时禁止写入

STC单片机EEPROM读写程序

/* STC89C54RD+的flash空间从0x4000~0xf3ff 共90个扇区,每扇区512字节*/ // #define BaseAddr 0x1000 /* 51rc */ // #define EndSectoraddr 0x3d00 /* 51rc */ // #define EndAddr 0x3fff /* 51rc 12K eeprom */ #define BaseAddr 0x4000 #define EndSectoraddr 0xf200 #define EndAddr 0xf3ff #define UseAddr 0x1000 /* ------------- 定义扇区大小------------- */ #define PerSector 512 /* 用户程序需要记忆的数组, 用户实际使用了n-1个数据,数组长度规整到 2 4 8 16 32 64 上*/ uchar Ttotal[16] = { 0x55, /* 作为判别引导头使用,用户程序请不要修改它*/ /* 用户保存记忆的数据*/ 0x01, /* 用途说明....*/ 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, }; uint timerForDelay, /* 专供延时用的变量*/ i, /* 循环变量*/ EepromPtr; /* eeprom读写指针*/ /* --------------- 命令定义--------------- */ #define RdCommand 0x01 /* 字节读*/ #define PrgCommand 0x02 /* 字节写*/

实验五存储器读写实验报告

实验五存储器读写实验报告 实验报告 课程名:《计算机组成原理》题目:实验五存储器读写班级:计算机+ 自动化0901班姓名:张哲玮,郑俊飞 《计算机组成原理》实验报告- 1 - 实验五、存储器读写实验 一、目的与要求 (1)掌握存储器的工作特性 (2)熟悉静态存储器的操作过程,验证存储器的读写方法 二、实验原理及原理图 (1)?静态存储器芯片6116的逻辑功能 6116是一种数据宽度为8位(8个二进制位),容量为2048字节的静态存储器芯片,封在24引脚的封装中,封装型式如图2-7所示。6116芯片有8根双向三态数据线D7-D0,所谓三态是指输入状态,输出状态和高阻状态,高阻状态数据线处于一种特殊的“断开”状态;11根地址线A10-A0,指示芯片内部2048个存储单元号;3根控制线CS片选控制信号,低电平时,芯片可进行读写操作,高电平时,芯片保存信息不能进行读写;WE 为写入控制信号,低电平时,把数据线上的信息存入地址线A10-A0指示的存储单元中;0E为输出使能控制信号,低电平时,把地址线A10-A0指示的存储单元中的数据读出送到数据线上。

6116芯片控制信号逻辑功能表 (2).存储器实验单元电路 因为在计算机组成原理实验中仅用了256个存储单元,所以6116芯片的3根地址线A11-A8接地也没有多片联用问题,片选信号CS接地使芯片总是处于被选中状态。芯片的WE和0E信号分别连接实验台的存储器写信号M-W和存储器读信号M-Ro这种简化了控制过程的实验电路可方便实验进行。 存储器部件电路图 (3)?存储器实验电路 存储器读\写实验需三部分电路共同完成:存储器单元(MEM UNIT),地址寄存器单元(ADDRESS UNIT)和输入,输出单元(INPUT/OUTPIT UNIT).存储器单元6116芯片为中心构成,地址寄存器单元主要由一片74LS273组成,控制信号B-AR的作用是把总线上的数据送入地址寄存器,向存储器单元电路提供地址信息,输入,输出单元作用与以前相同。

计算机组成原理实验五存储器读写实验

实验五 存储器读写实验实验目的 1. 掌握存储器的工作特性。 2. 熟悉静态存储器的操作过程,验证存储器的读写方法。 二、实验原理 表芯片控制信号逻辑功能表

2. 存储器实验单元电路 芯片状态 控制信号状态 DO-D7 数据状态 M-R M -W 保持 1 1 高阻抗 读出 0 1 6116-^总钱 写人 1 0 总线-*6116 无效 报警 ^2-10 D7—DO A7—A0

團2-8存储器实验电路逻辑图 三、实验过程 1. 连线 1) 连接实验一(输入、输出实验)的全部连线。 2) 按逻辑原理图连接M-W M-R 两根信号低电平有效信号线 3) 连接A7-A0 8根地址线。 4) 连接B-AR 正脉冲有效信号 2. 顺序写入存储器单元实验操作过程 1) 把有B-AR 控制开关全部拨到0,把有其他开关全部拨到1,使全部信号都处 于无效 状态。 2) 在输入数据开关拨一个实验数据,如“ 00000001”即16进制的01耳 把IO-R 控制开关拨下,把地址数据送到总线。 3) 拨动一下B-AR 开关,即实现“1-0-1 ”产生一个正脉冲,把地址数据送地 址寄存器保存。 4) 在输入数据开关拨一个实验数据,如“ 10000000',即16进制的80耳 把IO-R 控 制开关拨下,把实验数据送到总线。 3. 存储器实验电路 0 O O 0 0 olo O O O O 0 00 OUTPUT L/O :W 8-AR £ ■」2 ■七 ol^Fgr' L P O 74LS273 A7- AO vz 0 o|o 0 r 6116 A7 INPUT D7-O0 [olololololololol T2

IIC总线的使用EEPROM芯片的读写程序

51单片机第二十二课IIC总线的使用EEPROM芯片的读写 所属类别:课程代码发布日期:2011-03-05 点击量:341 #include #include #define uchar unsigned char #define uint unsigned int sbit sda=P2^1; sbit scl=P2^0; unsigned char code smg_du[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e, 0x79,0x71,0x00}; unsigned char code smg_we[]={0x08,0x18,0x28,0x38,0x48,0x58,0x68,0x78}; void start(void); void stop(void); void ack(void); void noack(void); void iicwr_byte(uchar dat); uchar iicre_byte(void); void delay (void); void init(void); void delay1(void); void write_byte(uchar add,uchar dat); uchar read_byte(uchar add); /////////////////////////////////// void delay1(void) { uint a=30000; while(a--); } void delay (void) { _nop_();_nop_();_nop_();_nop_(); _nop_();_nop_();_nop_();_nop_(); }

51内部eeprom读写,实现掉电存储

主函数: #include #include"EEPROM.h" #include"smg.h" void main() { num=byte_read(DEBUG_Data_Memory_Begin_Sector_addr);//字节读(程序开始时读取EEPROM中数据) if(num>=60)num=0;//防止首次上电时读取出错?? while(1) { if(num<60) { display(num); num++;delay(5); delay1(DELAY_CONST); sector_erase(DEBUG_Data_Memory_Begin_Sector_addr);//擦出扇区 byte_program (DEBUG_Data_Memory_Begin_Sector_addr,num);//字节编程} if(num==60)num=0; } } EEPROM.h: /*STC89C51RC,STC89LE51RC 0x2000 共八个扇区 STC89C52RC,STC89LE52RC 0x2000 共八个扇区 STC89C54RD+,STC89LE54RD+ 0x8000 共五十八个扇区 STC89C55RD+,STC89LE55RD+ 0x8000 共五十八个扇区 STC89C58RD+,STC89LE58RD+ 0x8000 共五十八个扇区*/ #include #include //sfr定义特殊功能寄存器 sfr ISP_DA TA =0xe2;//ISP/IAP 操作时的数据寄存器,从Flash 读出的数据放在此处,向Flash 写的数据也需放在此处 sfr ISP_ADDRH =0xe3;//ISP/IAP 操作时的地址寄存器高八位 sfr ISP_ADDRL =0xe4;//ISP/IAP 操作时的地址寄存器低八位 sfr ISP_CMD =0xe5;//ISP/IAP 操作时的命令模式寄存器,须命令触发寄存器触发方可生效 sfr ISP_TRIG =0xe6;//ISP/IAP 操作时的命令触发寄存器 sfr ISP_CONTR =0xe7;//ISP/IAP 控制寄存器 /* 定义命令*/

实验一 存储器实验

实验一存储器实验 1.FPGA中LPM_ROM定制与读出实验 一.实验目的 1、掌握FPGA中lpm_ROM的设置,作为只读存储器ROM的工作特性与配置方法。 2、用文本编辑器编辑mif文件配置ROM,学习将程序代码以mif格式文件加载于 lpm_ROM中; 3、在初始化存储器编辑窗口编辑mif文件配置ROM; 4、验证FPGA中mega_lpm_ROM的功能。 二.实验原理 ALTERA的FPGA中有许多可调用的LPM (Library Parameterized Modules)参数化的模块库,可构成如lpm_rom、lpm_ram_io、lpm_fifo、lpm_ram_dq的存储器结构。CPU 中的重要部件,如RAM、ROM可直接调用她们构成,因此在FPGA中利用嵌入式阵列块EAB 可以构成各种结构的存储器,lpm_ROM就是其中的一种。lpm_ROM有5组信号:地址信号address[ ]、数据信号q[ ]、时钟信号inclock、outclock、允许信号memenable,其参数都就是可以设定的。由于ROM就是只读存储器,所以它的数据口就是单向的输出端口,ROM中的数据就是在对FPGA现场配置时,通过配置文件一起写入存储单元的。图3-1-1中的lpm_ROM有3组信号:inclk——输入时钟脉冲;q[23、、0]——lpm_ROM的24位数据输出端;a[5、、0]——lpm_ROM的6位读出地址。 实验中主要应掌握以下三方面的内容: ⑴ lpm_ROM的参数设置; ⑵ lpm_ROM中数据的写入,即LPM_FILE初始化文件的编写; ⑶lpm_ROM的实际应用,在GW48_CP+实验台上的调试方法。 三.实验步骤 (1)用图形编辑,进入mega_lpm元件库,调用lpm_rom元件,设置地址总线宽度address[] 与数据总线宽度q[],分别为6位与24位,并添加输入输出引脚,如图3-1-1设置与连接。 (2)设置图3-1-1为工程。 (3)在设置lpm_rom数据参数选择项lpm_file的对应窗口中(图3-1-2),用键盘输入 lpm_ROM配置文件的路径(rom_a、mif),然后设置在系统ROM/RAM读写允许,以便能

AT24C02EEPROM读写程序

;--------------------------------------------------------------------------------------------------------------------- ;本程序是针对AT89S52单片机编制的EEPROM读写程序(2013.8.4测试通过) ;本程序在4MHZ、12MHZ和24MHZ分别测试通过 ;AT24C02的A0、A1、A2均接GND,设备地址高7位为(1010)000;WP接GND,充许对EEPROM正常读写 ;本程序仅作学习交流之用。 ;--------------------------------------------------------------------------------------------------------------------- SCl equ P2.0 ;SCL接A T89S52的P2.0端口,作为EEPROM的串行输入时钟 SDA equ P2.1 ;SDA接AT89S52的P2.1端口,作为主机与EEPROM之间信息串行传输总线WRITEDATA equ 08H;拟写入EEPROM的数据在主机中的存贮单元地址 READDATA equ 09H ;从EEPROM读取的数据存放到主机存贮单元地址EPROMADDRESS equ 0AH;拟随机读写EEPROM的存贮单元地址 ;------------------------------------------------ ORG 00H LJMP MAIN ;------------------------------------------------ ORG 50H MAIN: MOV SP,#20H;防止堆栈影响已用内存数据 ;以下为写EEPROM过程 mov EPROMADDRESS,#09H;该地址可以随意输入(00H~FFH),但读和写的地址须相同 MOV WRITEDA TA,#01010010B;该数字可以随意输入,并将读和写的数据进行比较;如读数正确则按将读出数据在P1口输出,可在P1口各位分别接LED灯直观显示出来。 LCALL WRITEEEPROMR ;以下为读EEPROM过程 mov EPROMADDRESS,#09H;该地址可以随意输入(00H~FFH),但读和写的地址须相同 LCALL READEEPROMR ;以下为EEPROM读写操作验证 MOV A,WRITEdata MOV B,A MOV A,READDATA CJNE A,B,MAIN1 MOV P1,READDATA;写入数和读出数相等时,读出的数据在P1口输出并按位分别控制LED灯直观显示 sJMP $ MAIN1: MOV P1,#00H;写入数和读出数相等时,LED灯全亮 ;以下可接其它主程序,此处暂为死循环 SJMP $ ;--------------------------------------------------------------------------------------------------------------------- ;WRITEEEPROMR是随机写EEPROM(AT24C02)子程序 ;入口1:EEPROMADRESS(拟读写EEPROM存贮单元地址,00~FFH) ;入口2:WRITEDATA(拟写入EEPROM的字节数据在主机的存放地址)

计算机组成原理实验五存储器读写实验

实验五 存储器读写实验 一、实验目的 1.掌握存储器的工作特性。 2.熟悉静态存储器的操作过程,验证存储器的读写方法。 二、实验原理 1.静态存储器芯片的6116的逻辑功能

2.存储器实验单元电路

3.存储器实验电路 三、实验过程 1.连线 1)连接实验一(输入、输出实验)的全部连线。 2)按逻辑原理图连接M-W、 M-R 两根信号低电平有效信号线。 3)连接A7-A0 8根地址线。 4)连接B-AR正脉冲有效信号 2.顺序写入存储器单元实验操作过程 1)把有B-AR控制开关全部拨到0,把有其他开关全部拨到1,使全部信号都处 于无效状态。 2)在输入数据开关拨一个实验数据,如“00000001”,即16进制的01H。 把IO-R控制开关拨下,把地址数据送到总线。 3)拨动一下B-AR开关,即实现“1-0-1”,产生一个正脉冲,把地址数据送地 址寄存器保存。 4)在输入数据开关拨一个实验数据,如“10000000”,即16进制的80H。 把IO-R控制开关拨下,把实验数据送到总线。

5)拨动M—W控制开关,即实现“1—0—1”,产生一个负脉冲,把实验数据存 入存储器的01H号单元。 6)按表2-11所示的地址数据和实验数据,重复上面(1)、(2)、(3)、(4)4 个步骤,顺序在存储器单元中存放不同的实验数据。 表2-11 推荐的典型实验数 3.顺序读出存储器单元实验操作过程 (1)在输入数据开关上拨一个地址(如00000001,即16进制数01H),拨下IO —R开关把地址数据送人总线。 (2)拨动一下B—AR开关,即实现“0—1—0”,产生一个正脉冲,把地址数据送地址寄存器(AR)保存。 (3)把IO—R开关拨上,切断输入开关与总线的联系。 (4)拨下M—R控制开关,把实验数据从存储器的01H号单元赌场送总线,验证实验数据是否与表2-11中的内容相符合。 (5)拨动IO—R开关,即实现“1—0—1”,产生一个负脉冲,把从存储器读出的实验数据从总线送输出显示电路L7—L0。 (6)拨上M—R控制开关,使存储器处于保持状态。 (7)重复上面的(1)—(6)6个步骤,按顺序从地址01H—05H的存储器单元中读出实验数据送输出显示电路L7—L0,验证读出数据与表2-11中的内容是否相符。

IC读写EEPROM问题总结

I C读写E E P R O M问题 总结 文件管理序列号:[K8UY-K9IO69-O6M243-OL889-F88688]

2017年6月30日星期五 目的:利用TMS320F2801芯片上外设I2C(2线串口)读写EEPROM数据(24LC128) 关键点1:24LC时钟频率400KHz,寄存器设置如下: I2caRegs.I2CPSC.all = 9; // Prescaler - need 7-12 Mhz on module clk I2caRegs.I2CCLKL = 10; // NOTE: must be non zero I2caRegs.I2CCLKH = 5; // NOTE: must be non zero 时钟频率也可设为200KHz,三个参数分别为9、20、20(CPU时钟频率为100MHz)(未测试?) 关键点2:波形分析 问题:I2C模块是不是只有I2CCNT 减到0才会发出停止信号 I2C模块是硬件的,当检测到发送完了就会发结束自动发信号,不需要人为干预 问题1:字节写操作正常,但是字节读函数出错 原因:写EEPROM是在七位器件地址后添加写标志,而读EEPROM需要在七位器件地址后添加写标志。 关键点:读EEPROM数据需要发送两次命令。第一次为写地址(此地址会被赋值给EEPROM内的地址指针),因此需要添加写标志;第二次为读数据,将写标志改为读标志。

问题2:主机接收时,SDA数据线上有数据传输,且I2CDRR接收数据寄存器有数据更新,但寄存器显示不可读,即CPU认为一直没接收到数据,一直停在下面语句 while 关键点:初始化设置时采用的是FIFO接收方式,因此无效,应查询FIFO 接收中断位while方式查询位。 此位只有在非FIFO中断接收方式时才有效。 问题3:断续单字节读写正常,但是采用连续的单字节读写出错。 原因:EEPROM写过程的结束并不是I2C总线写结束就结束,实际上I2C 总线的写入数据先被保存到了EEPROM内部的缓冲区,当遇到I2C结束条件后,EEPROM才启动内部写过程,这个过程才是保存数据的过程。非常悲哀的是这个过程比较长,官方文档标注为5ms。如果在这5ms以内对EEPROM芯片访问将被忽略。 关键点:读写EEPROM应延时至少5ms,软件延时10ms do{}while(EEPROM_Timer <= 10); //10ms 问题4:查询EEPROM写过程是否结束造成死机,只能查询EEPROM读过程。 官方文档说EEPROM内部写周期最长为5ms,在很多情况下是远远低于 5ms的,为了节约时间,官方给出一个解决办法。当写周期完毕后就开始进行应答查询,来确定EEPROM写周期何时结束。所谓应答查询官方解释为:就是向EEPROM发送一个I2C起始条件后发送器件地址和一个读写标

微机原理存储器读写实验

微机原理及单片机应用实验 实验报告 实验存储器读写实验 实验内容 对指定地址区间的RAM(4000H~4FFH)先进行写数据55AAH,然后将其内容读出再写到5000H~5FFH中。 实验步骤 l、在系统提示符“P”状态下,按SCAL键。2、输入执行地址1850后,按EXEC键。3、稍后按RST键退出,用存贮器读方法检查4000H~43FFH中的内容和5000~53FFH中的内容应都是55AA。 实验程序清单 CODE SEGMENT ;RAM.ASM ASSUME CS:CODE PA EQU 0FF20H ;字位口 PB EQU 0FF21H ;字形口 PC EQU 0FF22H ;键入口 ORG 1850h START: JMP START0 BUF DB ?,?,?,?,?,? data1: db0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8h,80h,90h,88h,83h,0c6h,0a1h db 86h,8eh,0ffh,0ch,89h,0deh,0c7h,8ch,0f3h,0bfh,8FH START0: MOV AX,0H MOV DS,AX ;写数据段地址 MOV BX,4000H ;内存首址 MOV AX,55AAH ;要写入的字 MOV CX,0200H ;数据长度 RAMW1: MOV DS:[BX],AX ;写数据 ADD BX,0002H ;下一个单元 LOOP RAMW1 ;循环写 MOV AX,4000H ;首址 MOV SI,AX ;SI置源首址 MOV AX,5000H MOV DI,AX ;DI置目首址 MOV CX,0400H ;数据长度 CLD ;增址 REP MOVSB ;串传送 call buf1 ;写”62256-” mov cx,0ffh con1: push cx call disp ;显示 pop cx

PIC单片机的EEPROM读写实例及说明

PIC单片机的EEPROM读写实例及说明 ; PIC 单片机的EEPROM 读写实例及说明; ******************************************************************** ********; This is a program to test the function of readingwritting for EEPROM.; You can observe the value of register(30H--?) buy changing “VALU” and “WRC_”.; Notice that:it must be { ADDR+WRC_=0ffh } !;******************************************************************* *********include “p16f877.inc”ADDR EQU 20H ;写入地址寄存器VALU EQU 21H ;写入值REC_ EQU 22H ;读计数WRC_ EQU 24H ;写计数org 0goto mainmainbcf STATUS,RP1bcf STATUS,RP0 ;bank0movlw 10hmovwf ADDR ;写入EEPROM 初始值movlw 90hmovwf VALU ;初始写入值movlw 30hmovwf FSR ;间址,读出值初始存放地址movlw 0Fhmovwf WRC_ ;写入次数movwf REC_;incf REC_ ;读出次数wri_ ;写子程序bsf STATUS,RP1bsf STATUS,RP0 ;bank3btfsc EECON1,WRgoto $-1bcf STATUS,RP0bcf STATUS,RP1 ;bank0movf ADDR,Wbsf STATUS,RP1 ;bank2movwf EEADRbcf STATUS,RP1 ;bank0movf VALU,Wbsf STATUS,RP1 ;bank2movwf EEDATAbsf STATUS,RP0 ;bank3bcf EECON1,EEPGD ;to data memorybsf EECON1,WRENbcf INTCON,GIEmovlw 55hmovwf EECON2movlw 0aahmovwf EECON2bsf EECON1,WRbcf STATUS,RP0bcf STATUS,RP1 ;bank0incf ADDR,1decf VALU,1decfsz WRC_ ;all write,to read_goto wri_read_ ;读子程序bcf STATUS,RP1bcf STATUS,RP0 ;bank0decf ADDR ;next valuebsf STATUS,RP1 ;bank2movwf EEADRbsf STATUS,RP0 ;bank3EEwr.asm 程序说明:1、本程序是对PIC16F877 单片机的EEPROM 数据区进行读写的演示程序;

IIC读写EEPROM

u32 ulTimeOut_Time; /* ******************************************************************************* ************************** * I2C_EE_WriteStr() * * Description : 将一个数据块写入EEPROM 的指定的地址 * * Argument(s) : xChip - 从器件地址 * xAddr - EEPROM存储空间地址 * xpBuf - 数据缓冲区指针 * xLen - 数据长度 * * Return(s) : none. * * Caller(s) : Application. * * Note(s) : (1) *------------------------------------------------------------------------------------------------------- * Modified by : * Modified date : * Description : *------------------------------------------------------------------------------------------------------- ******************************************************************************* ************************** */ void I2C_EE_WriteStr(u8 xChip, u16 xAddr, u8 *xpBuf, u16 xLen) { u8 *pbuf; u8 err; u8 retry; u16 addr; u16 len; // pbuf = xpBuf; addr = xAddr; len = xLen; I2C_EE_Drv_BusEn(); // 允许总线,写允许

存储器读写实验

实验一存储器读写实验 一、实验目的 1. 熟悉静态RAM 的使用方法,掌握8088 微机系统扩展RAM 的方法; 2. 掌握静态RAM 读写数据编程方法。 二、实验内容 对指定地址区间的RAM(4000H~43FFH)先进行写数据55AAH,然后将其内容读出再写到5000H~53FFH 中。 三、实验接线图(系统中已连接好) 四、实验步骤 1. 在PC 机和实验系统联机状态下,编辑源程序。 2. 从存储器窗口检查和记录4000H~43FFH 中的内容和5000~53FFH 中的内容。 3. 对源程序进行编译和装载,生成可执行文件。 4. 对可执行文件进行调试,调试方法有:单步,宏单步,自动单步,自动宏单步,注意这些方法之间的区别。 5. 连续运行实验程序。 6. 从存储器窗口检查和记录4000H~43FFH 中的内容和5000~53FFH 中的内容,比较程序运行前、后存储器内容的变化情况。 五、实验程序清单 CODE SEGMENT ;RAM.ASM ASSUME CS:CODE PA EQU 0FF20H ;字位口 PB EQU 0FF21H ;字形口 PC EQU 0FF22H ;键入口 ORG 1850h

START: JMP START0 BUF DB ?,?,?,?,?,? data1: db0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8h,80h,90h,88h,83h,0 c6h,0a1h db 86h,8eh,0ffh,0ch,89h,0deh,0c7h,8ch,0f3h,0bfh,8FH START0: MOV AX,0H MOV DS,AX ;写数据段地址 MOV BX,4000H ;内存首址 MOV AX,55AAH ;要写入的字 MOV CX,0200H ;数据长度 RAMW1: MOV DS:[BX],AX ;写数据 ADD BX,0002H ;下一个单元 LOOP RAMW1 ;循环写 MOV AX,4000H ;首址 MOV SI,AX ;SI置源首址 MOV AX,5000H MOV DI,AX ;DI置目首址 MOV CX,0400H ;数据长度 CLD ;增址 REP MOVSB ;串传送 call buf1 ;写”62256-” mov cx,0ffh con1: push cx call disp ;显示 pop cx loop con1 call buf2 ;写”--good” con2: call disp ;显示 jmp con2 DISP: MOV AL,0FFH ;显示子程序 ,5ms MOV DX,PA OUT DX,AL MOV CL,0DFH ;20H ;显示子程序 ,5ms MOV BX,OFFSET BUF DIS1: MOV AL,[BX] MOV AH,00H PUSH BX MOV BX,OFFSET DATA1 ADD BX,AX MOV AL,[BX] POP BX MOV DX,PB OUT DX,AL

PIC单片机片内EEPROM的读写程序

PIC单片机片内EEPROM的读写程序 因为也是摸索着学习PIC单片机,当要用到EEPROM存储部分系统参数,看单片机手册上的资料,觉得还是比较麻烦,然后还是不太会,然后就想找找看网上有没有现成的PIC单片机的片内EEPROM的读写程序,然后都没有找到想要的,而且对汇编语言的也不知道,所以搜索了下最后终于发现PICC编译器里面其实对内部的EEPROM的读写有头文件,可以直接来用,方法如下: PICC的安装目录下C:\Program Files\HI-TECH Software\PICC\9.81\include(这是我的电脑里目录)里面有一个eeprom_routines.h的文件这个就是关于EEPROM 中的读写程序,具体程序如下: // This header file should not be included directly // Inclusion of this file is provided indirectly by including htc.h /******************************************************************** ***/ /****** EEPROM memory read/write macros and function definitions *******/ /******************************************************************** ***/ /* NOTE WELL: The macro EEPROM_READ() is NOT safe to use immediately after any write to EEPROM, as it does NOT wait for WR to clear. This is by design, to allow minimal code size if a sequence of reads is desired. To guarantee uncorrupted writes, use the function eeprom_read() or insert while(WR)continue; before calling EEPROM_READ(). */ #if EEPROM_SIZE > 0 #ifdef __FLASHTYPE // macro versions of EEPROM write and read #define EEPROM_WRITE(addr, value) \ do{ \ while(WR)continue;EEADRL=(addr);EEDATA=(value); \ EECON1&=0x3F;CARRY=0;if(GIE)CARRY=1;GIE=0; \ WREN=1;EECON2=0x55;EECON2=0xAA;WR=1;WREN=0; \ if(CARRY)GIE=1; \ }while(0) #define EEPROM_READ(addr) ((EEADRL=(addr)),(EECON1&=0x3F),(RD=1),EEDATA)

存储器实验报告

计组实验三实验报告 实验日期:2015 年4 月14 日学号:201308010227 姓名:吴晗 实验名称:存储器实验总分: 一.实验内容 1.随机存储器RAM的工作特性及使用方法 2.RAM数据存储和读取的工作原理 3.LPM类存储元件的定制 二.实验原理 原理图:

三.实验电路图: RAM电路图: addr[7..0]:地址输入 clk:时钟信号 we,rd;mem:控制信号,高电平有效 Initial_file.mif文件: 存储器电路图: i[7..0]:数据输入l[7..0]:总线数据 sw_bus:pc_bus:三态门控制信号 ld161,clr161,pc161:74161控制信号,控制置数,读取,清零,计数 ldar:74273控制信号 w,r,m:RAM控制信号

仿真图: 仿真说明: 时间参数:End Time:2.0us Grid Size:100ns 端口说明: clk:时钟信号 i[7..0]:数据输入l[7..0]:总线数据 sw_bus:pc_bus:三态门控制信号,控制数据输出到总线 ld161,clr161,pc161:74161控制信号,控制置数,读取,清零,计数 ldar:74273控制数据从总线读入 w,r,m:RAM控制信号 仿真说明: 0-100ns:无操作 100-200ns:sw_bus为0有效,从i读入01,74161置数状态,RAM默认状态,总线

数据01 200-300ns:sw_bus为0有效,pc_bus无效,从i读入01,74161保持状态,RAM默认状态,总线数据01 300-400ns:pc_bus为0有效,sw_bus无效,74161保持状态,RAM默认状态,总线数据01,ldar为1,跳入下一个地址 400-500ns:sw,pc_bus无效,74161保持状态,RAM读取状态,读取E1,总线E1 500-600ns:sw,pc_bus无效,74161保持状态,RAM读取状态,读取D2,总线D2 600-700ns:sw,pc_bus无效,74161保持状态,RAM写入状态,总线输入EE,写入RAM 700-800ns:sw,pc_bus无效,74161保持状态,RAM读取状态,读取EE,总线EE 800-900ns:pc_bus为0有效,sw_bus无效,74161计数加1状态,RAM默认状态,总线数据01在上升沿时变为02 900-1000ns:pc_bus为0有效,sw_bus无效,74161计数加1状态,RAM默认状态,总线数据02在上升沿时变为03,ldar为1,跳入下一个地址1000-1100ns:sw,pc_bus无效,74161保持状态,RAM读取状态,读取F3,总线EE在上升沿变为F3 1100-1200ns:sw,pc_bus无效,74161保持状态,RAM读取状态,读取F3,总线F3 仿真结论:仿真结果与理论相符,仿真成功 五.硬件验证 管脚分配: 选择FLEX10K-EPF10K20TC144-4器件下载验证与仿真结果相符,实验成功。

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