一实验目的:1熟悉单片机地址线与EPROM引脚的连线方式。2学会用altium绘制电路原理图。3掌握c8051,32k寄存器拓展简单并行的输入输出的方法。二实验内容:1设同学的点名序号为 XX,参考教材的图5.12的与非门译码电路,将一片32K的EPROM译码到首地址为 YY000H的地址空间。2其中 YYH=XXH+40H。如某同学的点名序号为 38,则 'YY'='38'+'40'='78'。三实验原理:通过c8051单片机地址线中低15位与32k62256EPROM地址连接起来,高八位地址控制ROM的片使能,达到单片机拓展EPROM的目的。四实验步骤:1通过查表可知本人班级点名序号为45,’yy’=’85 ’;首地址为’85000h’.2电路分析:1据5-12例可以得到,单片机A0-A14地址线与62256的A0-14相连,单片机A12-A19为控制信号,如果采用书中电路,就会发现保存的地址不是连续空间,需要用锁存器来进行首地址选择后,再进行余下地址的译码。2经过仔细分析,发现高8位地址线可以用4-16译码器,逻辑电路,锁存器三种控制方法实现。本文主要介绍译码器方案。电路图如下所示: 1 该电路图主要由EPROM储存电路和逻辑器件控制电路两部分组成,其中由于首地址是85000h,末地址为8c000h,高4位可以直接用1000一直表示,但第12-15位4位二进制一直在变化,不能借用书中用一个15输入与非门解决地址连续的问题。需要用数电中逻辑电路知识,图中电路不是最简电路,但为了便于看图,用了5个非门,2个四输入或非门,2个四输入与非门,3个二输入与非门,一个四输入与门,逻辑电路如下所示:
将A19-A12用A19--A12表示,上图中的逻辑关系可以用如下公式表示:
2计算:如图,控制电路部分由高八位代码0x85-0x8c决定,即高四位一定是8,A15-A12位为0101-1011 bit | 0101 | 0110 | 0111 | 1000 | 1001 | 1010 | 1011 | 1100 | 数值 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 由表得A15-A12可以分为01xx,10xx,1100,合并并除去0100,就可以得到。使地址储存在0x85000h-0x8cfffh;
实验二emulator8086对外设控制的仿真一实验目的:⑴了解并掌握如何用汇编语言对外设进行控制; ⑵学习构建应用案例;二实验内容:根据emu8086的应用例程,构建一个控制交通灯、温度计、机器人或者步进电机的应用案例。如,可以通过simpleio输入步进电机要转的角度,然后控制stepper motor旋转,等等。三实验原理:通过emulator8086的例程学习用汇编语言对外设的控制,掌握程序的调试,修改,注释。四实验过程:1选用例程温度计案例;源代码如下#start=thermometer.exe##make_bin#
; set data segment to code segment: mov ax, cs mov ds, ax ;首先设置数据段代码段: start:
in al, 125 ;启动温度计,设定加热温器温度125度
cmp al, 90 ;设定最小温度90度
jl low ;如果烧杯温度小于90度,指向low
cmp al, 91 ;如果烧杯温度大于91度,指向high jle ok ;如果小于等于90度,指向OK jg high ;如果大于90度,指向high
low: mov al, 1 ;打开加热器 out 127, al ; turn heater "on". jmp ok ;跳转OK
high: mov al, 0 ;关闭加热器,直接进入OK out 127, al ; turn heater "off".
ok: ;重新进入下个循环
jmp start ; endless loop. 2流程图:
C伪代码: First:初始化,设置数据段代码段 Then:进入start,设定加热温度125度 next:设定最小温度90度,比较当前温度计温度与90度差距 If:温度小于90度,指向low If:温度大于等于91度,指向high else:指向ok Low:打开加热器,程序跳转ok High:关闭加热器,程序跳转ok Last Ok:返回first,重新进入下一个循环。 3 题目分析:首先初始化程序,设定加热器温度125度,比较加热器温度是否在90-91度之间,通过关闭打开加热器使烧杯中温度维持在90-91度间,一直循环下去。目的是想把烧杯温度维持在90度左右,实际也可以达到目的。
4实验结果:通过观察,发现温度计温度维持在90度至91度间,达到预期设想,调节速度快且稳定。
|