各模块说明文档.docx

上传人:b****3 文档编号:4694073 上传时间:2022-12-07 格式:DOCX 页数:18 大小:762.37KB
下载 相关 举报
各模块说明文档.docx_第1页
第1页 / 共18页
各模块说明文档.docx_第2页
第2页 / 共18页
各模块说明文档.docx_第3页
第3页 / 共18页
各模块说明文档.docx_第4页
第4页 / 共18页
各模块说明文档.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

各模块说明文档.docx

《各模块说明文档.docx》由会员分享,可在线阅读,更多相关《各模块说明文档.docx(18页珍藏版)》请在冰豆网上搜索。

各模块说明文档.docx

各模块说明文档

此文档为模型计算机的电路说明文档。

共分为四个部分。

具体如下:

第一部分:

ALU,PC及I/O部分

1.PC(74LS161)

图X-1

图X-2

2.存储器(6116)

3.寄存器(74LS374)

4.ALU(74LS181)

5.I/O部分

第二部分:

微控制部分

1.控制台转移

2.地址转移

3.微地址输入

4.微命令输入

5.微控制输出

U38,U39,U40为3个3-8译码器,E1,E2,E3为1,0,0。

输入端为A,B,C字段,译码的情况如下:

第三部分:

自动输入

本系统若使用开关拨代码及微程序,则由于数据量较多且容易拨错,致使调试效率低下。

因此用一个AT89C51来自动写入代码及微程序,省却拨动开关的时间。

下面是具体电路及写入51的代码,经验证可正确写入及读出。

1.AT89C51部分

2.微程序存储写入部分

3.存储器写入部分

4.代码部分

具体代码如下:

#include"reg51.h"

sbitOE=P2^7;//控制微控器里三个6116(RAM)的输出

sbitWE=P2^6;//控制微控器里三个6116(RAM)的写入

sbitCS2=P2^5;//控制微控器里三个6116(RAM)的片选

sbitCS1=P2^4;

sbitCS0=P2^3;

sbitt=P2^2;//给微地址寄存器写入地址提供时序信号

sbitWE_RAM=P2^1;//为主存储器提供写允许信号

sbitLDRAM=P2^0;//给主存储器写入地址或数据的74LS245的允许信号

sbittr=P1^7;//为主存储器提供地址的74LS273的时序信号

#definen100//用于提供延时的变量

voiddelay(void)//延时功能函数

{

chari,j;

for(i=0;i

for(j=0;j

{}

}

voidinit(void)//初始化函数

{

OE=1;

WE=1;

CS2=1;

CS1=1;

CS0=1;

WE_RAM=1;

LDRAM=1;

t=0;

}

voidmain(void)

{

charc2[25]={0x01,0x01,0x00,0x00,0x00,0x01,0x95,0x00,0x00,0x01,0x01,

0x01,0x01,0x02,0x00,0x00,0x01,0x01,0x00,0x01,0x00,0x07,0x00,0x07,0x06};

//微程序的高八位数据

charc1[25]={0x81,0xed,0xc0,0xe0,0xb0,0xa2,0x9a,0xe0,0x10,0xed,0xed,

0xed,0xed,0x82,0xe0,0xa0,0xed,0xed,0xa0,0x80,0x20,0x0a,0xd1,0x0a,0x8a};

//微程序的中八位数据

charc0[25]={0x10,0x82,0x48,0x04,0x05,0x06,0x01,0x0d,0x01,0x83,0x87,

0x8e,0x96,0x01,0x0f,0x15,0x92,0x94,0x17,0x01,0x18,0x01,0x81,0x10,0x11};

//微程序的低八位数据

charram[11]={0x00,0x10,0x0a,0x20,0x0b,0x30,0x0b,0x40,0x00,0x00,0x01};

//主存储器里的数据及指令

chari;

init();

WE=0;

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

{

P1=i;//P1口用来提供微程序地址

t=!

t;//微地址寄存器的时序信号

P0=c2[i];//P0口用来提供微程序,先提供高八位程序

CS2=0;//选中高八位的存储器

delay();//延时

CS2=1;//片选无效

P0=c1[i];

CS1=0;//选中中八位存储器

delay();

CS1=1;//片选无效

P0=c0[i];

CS0=0;//选中低八位存储器

delay();

CS0=1;//片选无效

t=!

t;

}

WE=1;

CS2=0;

CS1=0;

CS0=0;

OE=0;

P0=0x00;//置微地址为0x00

for(i=0;i<25;i++)//显示微程序数据,用来检查是否输入有误

{

P1=i;

t=!

t;

t=!

t;

delay();

}

P1=0x01;

t=!

t;

t=!

t;

delay();

LDRAM=0;

tr=0;

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

{

P3=i;//提供主存储器地址

tr=!

tr;

tr=!

tr;//将地址写入地址寄存器

P3=ram[i];//提供主存储器数据或指令

WE_RAM=0;//主存储器写有效

delay();

WE_RAM=1;

}

P3=0x00;

tr=!

tr;

tr=!

tr;

LDRAM=1;

while

(1){}

}

此代码在KeilμVersion2中编译为*.hex文件,然后加载到Proteus中的AT89C51,便可运行。

第四部分:

时序及控制

下图为时序的部分控制电路:

单步执行与连续执行的开关定义,如图

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 初中教育 > 理化生

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1