2009级微机原理与接口技术实验

更新时间:2024-05-13 13:19:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

微机原理及接口技术实验

2009级计算机专业

上课地点: 勤学楼2507

能电学院电工电子实验中心

2011年8月

目 录

软件试验部分 ................................................... 2 实验一 初级程序的编写与调试实验 ............................... 2 实验二

加法程序的编写与调试实验 ............................... 7

硬件接口试验部分 .............................................. 11 使用微机实验装置须知 .......................................... 11 DVCC─8086H实验系统性能特点简介................................ 12 DVCC─8086H实验装置软件使用说明................................ 14 实验一 8279A可编程键盘显示接口实验 ........................... 21 实验二 A/D转换实验 .......................................... 27 实验三 8255A可编程并行口实验 ................................ 30 实验四 D/A转换实验 .......................................... 32 实验五 微机硬件实验 ......................................... 34 实验六 简易电子琴实验 ....................................... 37 实验七 简易时钟电路实验 ...................................... 39

1

软件试验部分

实验一 初级程序的编写与调试实验

一、实验目的

熟练掌握DEBUG的常用命令,学会用DEBUG调试程序。

深入了解数据在存储器中的存取方法,及堆栈中数据的压入与弹出。 掌握各种寻址方法以及简单指令的的执行过程。

二、实验内容 1、设堆栈指针SP=2000H,AX=3000H,BX=5000H,请编一程序段将AX的内容和BX的内容进行交换。请用堆栈作为两寄存器交换内容的中间存储单元,用DEBUG调试程序进行编写、汇编和调试。 2a、设DS=当前段地址,BX=0300H,SI=0002H,请用DEBUG的命令将0AH、0BH、0CH、0DH、0EH等数据顺序装入存储器偏移地址300H~304H单元。 2b、在DEBUG状态下送入下面程序,并用单步执行的方法,分析每条指令源地址的形成过程?当数据传送完毕时,AX中的内容是什么?

程序清单如下: MOV AX,BX MOV MOV MOV MOV MOV MOV

AX,0304 AX,[0304] AX,[BX]

AX,0001[BX] AX,[BX][SI]

AX,0001[BX][SI]

3、设AX=0002H,编一个程序段将AX的内容乘以10,要求用移位的方法完成。

三、实验要求 1、实验前要作好充分准备,包括汇编程序清单、调试步骤、调试方法以及对程序结果的分析等。

2、本实验要求在PC机上进行。

3、本实验要求只能在DEBUG调试状态下进行,包括汇编程序、调试程序、执行程序。

4、三个实验做完后,有时间将实验二所附程序看一看,不懂得语句用DEBUG运行一下,以便下次弄懂程序。

四、编程提示 实验内容1 将两个寄存器的内容进行交换时,必须有一个中间寄存器才行。如果用堆栈作为中间存储单元,必须遵循先进后出的原则。同学们也可以试试不用堆栈而用一般寄存器,结果又如何?

实验内容2

2

(1)其中数据段寄存器中的段地址为进入DEBUG状态后系统自动分配的段地址。

(2)SI和BX的初值可在DEBUG状态下,用R命令装入,也可以在程序中用指令来完成。 (3)用T或P命令执行程序,可进行单步跟踪执行,每执行一条指令就可以看到各寄存器的状态变化。也可用R命令直接调出寄存器,来检验各寄存器内容是否正确。 (4)在执行程序前,可用E命令将0AH~0EH送入偏移地址300H~304H。

实验内容3

(1)用移位的方法完成某些乘法运算,是较为常见的方法,操作数左移一位为操作数乘2运算。 (2)算式2×10的程序流程图如下:

开始 ↓ ↓

AX、BX装入操作数2 AX左移两位→AX ↓ AX+BX→AX ↓ AX左移一位→AX ↓ 结束

(3)程序的的执行可用DEBUG的G命令,也可用T或P命令单步跟踪执行。

在程序送入后,最好将它存入磁盘,以免程序丢失时又需重新输入。

附:DEBUG的主要命令

1、DEBUG命令的有关规定

(1)DEBUG命令都是一个英文字母,后面跟着一个或多个有关参数。多个操作参数之间用“,”或

空格隔开。

(2)DEBUG命令必须接着按ENTER键,命令才有效。

(3)参数中不论是地址还是数据,均用十六进制数表示,但十六进制数后面不要用“H”。 (4)可以用Ctrl和Break键来停止一个命令的执行,返回到DEBUG的提示符“-”下。 (5)Ctrl-Num Look用来中止正在上卷的输出行,再通过按任意键继续输出信息。 2、DEBUG命令集 A 汇编命令 D E

显示内存命令 修改内存命令 填充命令

移动内存命令 比较命令

查找命令

显示和修改寄存器内容命令 跟踪命令 反汇编命令 命名命令 读盘命令 写盘命令

3

F M C S R T U

N L W

I O G H Q

输入命令

输出命令 运行命令

十六进制运算命令 退出命令

P 进程命令

现在开始将各个命令格式说明一下。

A汇编命令,A汇编命令有三种格式: A

A偏移地址——A与偏移地址之间可以不空格 A段地址:偏移地址

如果是第一次输入A后,将出现 xxxx:0100提示符。

如果是输入A偏移地址后,将出现 xxxx:偏移地址提示符。

如果是输入A段地址:偏移地址后,将出现 段地址:偏移地址提示符。

在xxxx:xxxx提示符后就可以输入汇编程序,每输完一句按回车键又出现xxxx:xxxx提示符。这样一句一句输完,就可运行该程序。

注意:在DEBUG中出现和使用的数字只有一种形式——十六进制,而且不用跟后缀H。如果数字是十进制或二进制的请全部转换成十六进制。否则易出错。

U反汇编命令,U反汇编命令有五种格式: U

U偏移地址

U偏移地址1 偏移地址2 U段地址:偏移地址

U段地址:偏移地址1 段地址:偏移地址2 U反汇编命令执行后,显示器将出现: xxxx:xxxx 二进制机器码 汇编语句 ┇ xxxx:xxxx 二进制机器码 汇编语句 的形式。U反汇编命令只是用来察看汇编程序的。

D显示内存命令,D显示内存命令有四种格式:

D——从偏移地址0100单元开始一次显示128个单元内容;

D偏移地址——从偏移地址开始一次显示128个单元内容;

D偏移地址 L范围——从偏移地址开始一次显示范围内个单元内容;

D段地址:偏移地址 L范围——从段地址:偏移地址开始一次显示范围内个单元内容;

E修改内存命令,E修改内存命令有两种格式: E偏移地址

E段地址:偏移地址

输入E修改内存命令后,显示相应单元的内容,等待用户修改其值,此时可用下述两种方法操作。 按空格键

4

按空格键完成一个字节的显示与修改(不修改可不输入数据),且显示下一个字节的地址和内容的等待修改。若多个单元不修改,则可连续按空格键。 按“-”键

按“-”键完成一个字节的显示与修改(不修改可不输入数据),且显示前一个字节的地址和内容的等待修改。若多个单元不修改,则可连续按“-”键。 若要结束修改,可按回车键终止E命令。

R显示和修改寄存器命令,其格式有两种: R——显示寄存器命令;

R待修改的器存器,如RAX;RBX等; N命名文件,其格式只有两种:

N文件名.后缀——无盘符默认为当前盘符; N盘符:文件名.后缀;

N命令需要和L读文件命令或W写文件命令在一起使用。 L读文件命

当N命名的文件后缀是COM时,只能用L或L100。文件只能从偏移地址100H处开始存放。 当N命名的文件后缀是EXE时,只能用L。文件只能从偏移地址0000H处开始存放。 当N命名的文件是其他方式时,可用L或L偏移地址(任意)。文件可以从任意偏移地址处开始存放。 读文件,其方式有两种,我们只用一种: N盘符:文件名.后缀; L或L偏移地址。 W写文件命令

当N命名的文件后缀是COM时,只能用W或W100。从偏移地址100H处开始的内容写入文件,文件长度由寄存器CX值决定。

当N命名的文件后缀是EXE时,用W则出错。

当N命名的文件是其他方式时,可用W偏移地址(任意)。 写文件,其方式有两种,我们只用一种: N盘符:文件名.后缀;

RCX——将文件长度值送入CX 。 W或W偏移地址; F 填充命令,其方式有两种: F起始地址 终止地址 值表; F起始地址 L字节数 值表。

例如:FD68:100 120 1,2,3,’ABCD’,’C’

FD33:20 L10 1,2,3,’A’,’V’

M移动内存命令,其方式有两种: M起始地址 终止地址 目的地址; M起始地址 L字节数 目的地址。 具有移动数据块的功能。

C比较命令,其方式有两种:

5

C起始地址 终止地址 目的地址; C起始地址 L字节数 目的地址。 具有比较数据块的功能。 S检索或查找命令,其方式有两种:

S起始地址 终止地址 值表(为单个字符或数字,与 F填充值表不同); S起始地址 L字节数 值表。 在数据块中查找值表所在单元。 I输入命令,其方式为: I外部端口地址 O输出命令,其方式为: O外部端口地址 字节数据 H十六进制数加减命令,其方式为: H数1 数2 G连续运行命令,其方式为两种: G=起始地址; G=起始地址 断点地址

通常不用第二种方式,因为用T单步跟踪命令也有同样功能。 T单步跟踪命令,其方式为两种: T=起始地址; T=起始地址 指令条数 P进程命令,与T单步跟踪命令用法一样。其区别在于它遇子程序不追踪。

注意:在DEBUG命令中,逗号可以用空格来代替。但在A命令中写汇编程序时不行。

6

实验二 加法程序的编写与调试实验

实验目的

熟练掌握编写汇编语言程序的基本方法和基本框架。

学会编写顺序结构、分支结构和循环结构的汇编程序,掌握宏定义与宏调用的方法。 掌握程序中数据的产生与输入输出的方法。 掌握源程序的汇编和连接方法。

实验要求

实验前准备

要弄懂所提供的源程序中的每一指令,不懂的可查各种汇编语言书籍。

对程序中结果进行分析,并准备好上机调试与用汇编程序及汇编调试的过程。

本实验要求在PC机上用EDIT平台编写源程序,用MASM和LINK对其进行汇编和连接,然后在DOS下执行所生成的.exe文件,如果源程序不错,应能显示正确结果。

用DEBUG对已生成的可执行文件进行调试,分单步和连续两种方式,并查看各寄存器的变化和数据在内存中的情况。 修改源程序,将其变成一个可以进行5位数加法的程序。编写一个1234+5678的固定4位数加法程序。 (注意:编缉程序时,不能在中文模式下进行。除非注释。当程序编辑完保存时,文件名中不能有中文,而且文件名字符数不能超过8个。) 编程提示

两个数据可用相反的顺序以ASCII码的形式存放在数据段的DATA1和DATA2中,相加时可从DATA1和DATA2的起始字节开始相加,即从数的个位数开始相加。相加结果可存放在DATA2开始的存储单元中。

程序中的加法运算是ASCII码运算,采用带进位的加法运算指令ADC,后面应加一条ASCII码加法调整指令AAA,经AAA调整的加法指令,将ASCII码的数据高4位清“0”,然后将结果每位数高4位拼成3,变成ASCII码存放到DATA2中,则可方便地取出输出。

程序中应有输出程序段,采用MOV AH,02H ,INT 21H,将要输出字符的ASCII码送入 AL中。 思考题

程序中的原始数据是以怎样的形式存放的数据区中?请用DEBUG调试程序进行观察、分析。

实验报告

写出1234+5678的固定4位数加法程序,并注释。画出程序流程框图。

附录1. 汇编程序MASM和连接程序LINK简介:

当在EDIT平台上写好源程序,并以.asm的扩展名存盘后(注意存盘路径),用两个可执行文件masm.exe和link.exe,对源程序进行汇编和连接,生成.exe文件后执行该文件,如程序正确,必能显示正确结果;如不能显示,则要查找出原因改正,直到能正确显示为止。

在汇编过程中,如出现错误,要根据提示返回EDIT查找源程序中的相应行,找出错误并修改好,再进行汇编,直到没有错误为止。

附录2. DOS中断功能调用简介: 本实验两个题目的程序中,都要用到DOS软中断系统功能调用。DOS中断功能有很多,这儿用到的只是其中一种,即“INT 21H”,这是最常用的中断功能,包含了几十种子功能。调用这个中断功能,必须预先输入中断功能调用号,即子功能号,调用号都送进AH中。在提供的三段程序中,共用到三种:

1.01H号功能(输入一个字符) 该功能将等待用户从标准输入设备(如键盘)上输入一个字符,把它传送到AL中并在标推输出设备(如屏幕)上输出。同时检查输入的字符是否为“Ctrl+Break”,若是,则终止程序运行。入口参数:AH=01H;

7

出口参数:AL中存放的从键盘输入的ASCII码。

如键盘输入字母A,该字母除了存入AL外,还将它显示在屏幕上。

2.02H号功能(输出一个字符)

该功能将寄存器DL中一个字符的ASCII码输出到标准输出设备(如屏幕)上。同时,系统将检查输出的字符是否为“Ctrl+Break”,若是,则终止程序运行。入口参数:AH=02H;出口参数:无。

3.09H号功能(字符串显示)

这一功能可以在标准输出设备上显示某个字符串。调用前应当先将待显示的字符串首地址送到DS:DX中,即把字符串所在段的段地址送DS,位移量送DX,系统将按地址的先后顺序将待显示字符串依次输出。入口参数:AH=09H,DS:DX指向存放字符串的地址;出口参数:无。

有一点需要注意,用于显示的字符串都是ASCII码,以美元符号“$”为结尾,“$”也称为界定符,在半角输入(英文)状态下为“$”,在全角输入(中文)状态下为“¥”。如果希望在输完一组数后自动换行,要在界定符前加上回车符(0DH)和换行符(0AH)。

附录3:

下面的程序就是可以通过键盘输入任意4位数据的加数和被加数,进行加法运算。

程序中SAV过程为接收键盘键入的数据,并保存到SI所指的数据区的偏移地址的单元中。 宏定义CFD为在通过键盘键入4位数据后回车换行,使执行结果比较清晰。 (2)程序清单如下: DATA SEGMENT DATAl DB 4 DUP(?) DATA2 DB 5 DUP(?) DATA3 DB 0DH,0AH,'$' DATA ENDS STACK SEGMENT PARA STACK 'STACK' DB 64 DUP(?) STACK ENDS CFD MACRO MOV DX,OFFSET DATA3 MOV AH,09H ;显示字符串 INT 21H ENDM ;回车换行宏定义 CODE SEGMENT PARA 'CODE' ASSUME CS:CODE,DS:DATA,SS:STACK,ES:DATA START PROC FAR PUSH DS MOV AX,00H PUSH AX MOV AX,DATA MOV DS,AX MOV ES,AX ;程序初始化 MOV SI,OFFSET DATA1 ;将DATAl的偏移地址送SI CALL SAV ;调用将键盘键入数据保存过程 CFD ;调用回车换行宏定义 MOV SI,OFFSET DATA2 ;将DATA2的偏移地址送SI CALL SAV ;调用将键盘键入数据保存过程 CFD ;调用回车换行宏定义 STD ;方向标志DF为“1”,为反向串 MOV SI,OFFSET DATA1+3 ;将加数最末位地址送SI

8

LOPl:

MOV DI,OFFSET DATA2+3 ;将被加数最末位地址送DI MOV CX,04H ;共4位数相加 MOV AH,00H ;清AH LODS DATA1+3 ;取串:([SI])→AL,(SI一1)→SI SAHF ;将AH中进位标志送标志寄存器 ADC AL,[DI] ;带进位加,结果送AL AAA ;ASCII码十进制加法调整 LAHF ;将标志寄存器内容暂存在AH中 OR AL,30H ;将计算值拼成ASCII码

INC DI ;将计算值的ASCII码存入DATA2中

STOSB ;存串, AL→[DI],(DI-1)→DI DEC DI ;调整被加数地址指针,指向下一位数 LOOP LOP1 ;取下一位数转到LOP1 INC DI ;4位加完,调整结果地址指针 AND AH,01H ;将最高位进位取出送AH OR AH,30H ;拼成ASCII码 MOV [Dl],AH ;存到DATA2的最高位 MOV AH,02H ;调用DOS的显示功能 MOV CX,05H ;共显示5位数

LOP2: MOV DL,[DI] ;将显示结果从最高位开始送入DL中 INT 2lH ;调用21H号中断 INC DI ;使结果地址指针指向下一位 LOOP LOP2 ;显示下一位转LOP2 RET ;5位显示完毕 START ENDP SAV PROC NEAR ;取键盘键入的数据,并存入数据段过程 MOV CX,04 ;取4位数

LEP: MOV AH,0lH ;调用DOS读取键入数据功能 INT 21H ;调用21H中断 MOV [Sl],AL ;将键入数据存入数据段 INC SI ;移动地址指针 LOOP LEP ;共键入4位并存入数据段 RET ;4位键入完毕 SAV ENDP

CODE ENDS END START 执行结果:

c:>DATADD2↓ 1234 5678

6912

可以通过DEBUG调试程序,观察数据段在程序执行前后,DATA1和DATA2中数据存放的情况。 1. 进入DEBUG状态 C:>DEBUG DATADD.EXE↓(如果程序是DATADD.EXE的话) 2. 用U命令得到源程序 注:(1)执行第一次U命令显示17行程序,再执行U命令显示后面余下的程序。 (2)从U命令显示的内容,找到代码段地址(CS),代码段偏移地址(IP),数据段地址(DS,ES),数据段偏移地址(SI) 以及DATA1、DATA2的偏移地址。 (3)执行程序

9

-G=起始地址)(结束地址) 6912

Program terminated normally

即6912为1334+568 和。

(4)在执行程序后,用D命令再观察DATA1和DATA2中数据的存放情况: -D (DS):(IP) ????

从中可以看到,程序执行后,相加结果是以ASCII码按相反的顺序存放在DATA2中,因此显示时,是从高位到低位。

(6)用P命令跟踪执行(单步执行)

①先用R命令检查IP寄存器是否为0,不是0要改过来(程序的开始偏移地址为0000)。 ②用P命令逐行执行命令,注意观察各寄存器状态的变化。 ***注意:使用T命令在遇到有中断(如INT 21H)时,则要谨慎,千万不要执行这一条,否则程序会跑飞。如果要单步执行此句,可用P命令代替。

10

硬件接口试验部分

使用微机实验装置须知

在计算机与实验装置都通电的情况下,不得插拔计算机与实验装置之间的连接线。因为这样做容易烧坏计算机主板和实验装置。不要带电在实验装置上连接。

编写程序时,由于实验装置的原因,不要像常规方法那样,分数据段、堆栈段、代码段。直接用一个代码段就可以。数据段可以写在代码段中,对其中数据的读写,与读写数据段一样。具体编程结构方法如下:

CODE SEGMENT ASSUME CS:CODE ORG 1000H START:JMP L DATA DB 1,2,3 L:汇编指令1 汇编指令2 · 汇编指令n K:JMP K CODE ENDS END START

文件名不能用中文名,文件名长度不能超过8个字符。

文件夹也不能用中文名,其长度也不能超过8个字符。 不要在中文格式下编写程序。

11

DVCC─8086H实验系统性能特点简介

DVCC─8086H实验系统性能特点

用主频为4.77MHZ的8088CPU为主CPU,并以最小工作方式构成系统。

系统以二片62256静态RAM构成系统的64K基本内存,地址范围为00000H-0FFFFH。其中00000H-004FFH为系统数据区,00500-00FFFH为用户数据区,01000H-0FFFFH为用户程序区,另配一片32K EPROM用于存放系统程序和实验程序,地址范围为F8000H-FFFFFH。 自带键盘数码管显示,能单机独立运行。

备有通用外围电路,包括逻辑电平开关电路、发光二极管电路、时钟电路、单脉冲发生电路、继电器及驱动电路、直流电机及驱动电路、步进电机及驱动电路、电子音响及驱动电路、模拟电压产生电路。

DVCC─8086H系统资源分配 中断矢量区 系统数据区系统栈区 用户数据区 用户数据区用户栈区 00000H-000FFH 00100H-004FFH 00500H-00FFFH 01000H-0FFFFH 中断矢量区00000H-00013H作为单步(T)、断点INT3、无条件暂停(NMI)中断矢量区,用户也可以更改这些矢量,指向用户的处理,但失去了相应的单步、断点、暂停等系统功能。

DVCC─8086H输入/输出接口地址分配 电路名称 口地址 000H-01FH 提供给用户的扩展口 060H-06FH 070H-07FH 通道0计数器048H 8253A定时/计数器接口 通道1计数器049H 通道2计数器04AH 控制寄字存器04BH 8259A中断控制器接口 命令寄存器020H 状态寄存器021H 数据口0DEH 8279A键盘显示口 命令状态口0DFH 数据口050H 8251A串行接口 状态口051H 12

8259A中断源、中断类型号、中断向量表地址

8259A中断源 中断类型号

IR0 8 IR1 9 IR2 A IR3 B IR4 C IR5 D IR6 E IR7 F

中断向量表地址

20H~23H 24H~27H 28H~2BH 2CH~2FH 30H~33H 34H~37H 38H~3BH 3CH~3FH

13

DVCC─8086H实验装置软件使用说明

由于实验时,除连线外,基本上不需要在装置上操作,程序的编写、调试、运行都在计首先打开实验装置电源开关,数码管显示DVCC-86H。

然后打开计算机,计算机进入WINDOWS系统界面,如果显示桌面上有“DV86H调试软件”就直接运行它,否则,就从开始——程序——DVCC8086H实验系统——“DV86H调试软件”运行它。程序运行后将出现图0—1窗体。注意:不要和52196单片机系统“DVCC实验系统”混淆。

算机上进行。因此,掌握了实验装置软件使用方法,也就能知道如何进行实验了。

图0—1

第一步、检查计算机与实验装置连接是否正常。在图0—1窗体上,选择“联接”工具。若出现图0—2窗体,即为连接正常。否则,为不正常。如果出现连接不上情况,请报告老师。

图0—2

14

第二步、编写程序。检查计算机与实验装置连接正常、并且实验连线正确后,在图0—2窗体上,选择“新建”工具,将出现图0—3窗体。现在在这个名为“新文件0”窗体内,我们开始编写一个在数码管上显示“12”的程序。

图0—3

第三步、保存程序。程序编写完成后,按图0—4将文件另存,将中文文件名“新文件0”进行修改,要求文件名长度不能超过“8”个字符,其中保存文件的文件夹名也不能用中文名,文件夹名长度也不能超过“8”个字符。

图0—4

15

现在我们将图0—5中的“新文件0”改为图0—6中的“1”,然后按“保存(S)”按钮,得到一个文件名为“1.asm”合乎要求的文件。

图0—5

图0—6

第四步、编译、连接、传送文件。文件保存好后,不能立即用来运行,必须将其编译、连接生成机器码文件。并且生成的机器码文件此时还在计算机上,还是不能运行。因为软件最终还是要在装置上运行,因此要将机器码文件传送到装置内存中才能运行。

如何才能完成上述任务,先选择图0—7 中的“调试”工具,出现图0—8窗体,在此窗体中选择“Yes”按钮,出现图0—9窗体,默认地址1000选择“OK”按钮即可。如果程序中有ORG 1000H 语句,将不会出现0—8、0—9窗体。

其实第四步也是检查编写程序语法是否正确的一步。在图0—10窗体中打开信息窗口,如果出现图0—11中的信息窗口的内容,表示程序语法没错。如果与图0—11中的信息窗口的内容不同,则程序都是错误的。

如图0—12中的信息窗口的内容,表示程序语法有错。而且指出错误所在行是第5行。 如果信息窗口中无错,也并不表示程序逻辑上没错。逻辑上的错误检查,需单步运行程序。单步执行时,需观察相应的寄存器、存储单元,并根据试验现象来判断。所以比较复杂。

16

如果要观察寄存器、存储单元,请参考图0—10,可根据需要按窗体所列打开相应窗口。

图0—7

图0—8

图0—9 第五步、程序正确无误,“调试”完成后,便可在图0—13中,选择“运行”工具运行程序。如果要停止运行,根据图0—13中弹出窗口提示操作。

如何单步运行程序。程序“调试”完成后,选择“单步”工具运行程序。注意工具栏中有两个“单步”工具,他们是有区别的。一个是“遇子程序追踪”,当遇见CALL、JAMP等语句时,要到子程序中单步执行;一个是“遇子程序不追踪”,当遇见CALL、JAMP

17

等语句时,不到子程序中单步执行,而是连续执行完子程序,IP指向主程序中CALL或JAMP语句

图0—10

18

图0—11

图0—12

图0—13

的下一句,也就是说:程序只在主程序中单步执行。

19

图0—14

图0—15

20

实验一 8279A可编程键盘显示接口实验

因为对8259A只须简单了解,知道如何使用它。如果对8259A不需要详细了解的同学可直接从预备知识第四项相关表格开始。 一、预备知识

8279A是一种通用的可编程键盘/显示器接口电路,可对64个开关矩阵组成的键盘进行自动扫描,接受键盘上的输入信息,存入内部的FIFO寄存器,并在有键输入时,CPU请求中断。8279A内部还有一个16×8的显示缓冲器,能对8位或16位LED进行扫描,使显示缓冲器的内容在LED上显示出来。

(1)、引脚功能

DB0—DB7:双向数据总线。

CLK:时钟输入线,以产生内部时钟。

RESET:复位线,高电平有效。复位后,8279A置为16位显示左边输入。 /CS:片选,低电平有效。

A0:地址输入线,用于区分数据线传送的是数据还是命令。A0=0传送数据,A0=1传送命令。

/RD:读信号线,低电平有效。内部缓冲器信息送DB0-DB7。

/WR:写信号线,低电平有效。数据总线上的信息写入内部缓冲器。

IRQ:中断请求输出线,高电平有效。当FIFORAM中有键输入数据时,IRQ升为高电平,向CPU 请求中断。CPU读出FIFORAM时,IRQ变为低电平,若RAM中还有数据,IRQ又为高电平,直至RAM中为空,IRQ才保持低电平。 SL0-SL3:输出扫描线

RL0-RL7:键盘矩阵的行(列)数据输入线。其内部有拉高电阻,使之保持高电平。 SHIFT:换挡输入线。其内部有拉高电阻,使之保持高电平。

CNTL/STB:控制/选通输入线。其内部有拉高电阻,使之保持高电平。 OUTA0-OUTA3:四位输出口。 OUTB0-OUTB3:四位输出口。

这两个口是16×4显示器更新寄存器的输出端,输出的数据和SL0-SL3信号同步,用于多位显示器显示。

/BD:显示消隐输出线。低电平有效。

(2)、8279A内部结构

8279A内部具有时序控制逻辑,通过控制和时序寄存器存放键盘和显示器的工作方式和其它 状态信息。内部还包含有N分频器,分频系数为N,由2—31之间任意一数可编程确定,对CLK上时钟进行N分频以产生基本的100KHZ的内部计数信号。 8279A内部的扫描计数器有两种工作方式:一是编码方式,计数器以二进制方式计数,4位计数器的状态直接从SL0—SL3上输出,由外部译码器对SL0—SL3译码产生键盘和显示的扫描信号,高电平有效;二是译码方式,对计数器的低二位译码后从SL0—SL3上输出,做为4×8键盘和4位显示器的扫描信号,低电平有效。

8279A在键盘工作时,由输入缓冲区锁存RL0—RL7上的信息,以确定键入情况。 FIFP/传感器RAM:它是一个双功能的8×8RAM,在键盘和选通方式中,它是一个先进

21

先出的数据缓冲器。当/CS=0,A0=1,/RD=0时,读出FIFO的内容,FIFO中有数据时,由控制电路发IRQ信号。在传感方式中,8×8RAM 用作传感器RAM,当检测到某个传感器发生变化时,IRQ变高。

显示器地址寄存器和显示RAM:用以存放CPU当前正在读写的显示RAM单元地址,以及正在显示的两个4位半字节地址。在选定了工作方式和地址后,CPU可直接读出显示RAM中的内容。

(3)、8279A的控制命令

① 键盘显示方式设置命令

D7 D6 D5 D4 D3 D2 D1 D0

0 0 0 D D K K K

显示方式 数据输入及扫描方式

0 0—8字符显示,左端输入* 0 0 0—编码扫描,键盘输入,2键互锁* 0 1—16字符显示,左端输入 0 0 1—译码扫描,键盘输入,2键互锁 1 0—8字符显示,右端输入 0 1 0—编码扫描,键盘输入,多键有效 1 1—16字符显示,右端输入 0 1 1—译码扫描,键盘输入,多键有效 1 0 0—编码扫描,传感器陈列检测 * RESET后,设定为该种方式 1 0 1—译码扫描,传感器陈列检测 D7、D6、D5=000,键盘显示命令 1 1 0—编码扫描,选通输入 特征字 1 1 1—译码扫描,选通输入

扫描频率控制命令

D7 D6 D5 D4 D3 D2 D1 D0

0 0 1 P4 P3 P2 P1 P0

D7、D6、D5=001,扫描频率控制命令特征字。

P4,P3、P2、P1、P0,对外部时钟CLK的分频系数,使CLK÷分频系数=100KHZ

* RESET后P4—P0=31。

读FIFO/传感器RAM命令

D7 D6 D5 D4 D3 D2 D1 D0

0 1 0 AI X A A A

D7、D6、D5=010,读FIFO/传感器RAM命令特征字。 AI=1,自动增1。AI=0,不自动增1。

D2、D1、D0=AAA,8×8 bit FIFO的地址000—111

该命令字只在传感器方式使用。在键盘工作方式时,由于读出操作严格按照先入先出的顺序,因此,不必使用此条命令。

读显示RAM命令

D7 D6 D5 D4 D3 D2 D1 D0

0 1 1 AI A A A A

D7、D6、D5=011,读显示RAM命令特征字。

22

D3、D2、D1、D0=AAAA,16×8 bit FIFO的地址0000—1111 AI=1,自动增1。AI=0,不自动增1。

写显示RAM命令

D7 D6 D5 D4 D3 D2 D1 D0

1 0 0 AI A A A A

D7、D6、D5=100,写显示RAM命令特征字。

D3、D2、D1、D0=AAAA,16×8 bit FIFO的地址0000—1111 AI=1,自动增1。AI=0,不自动增1。

显示禁止写入/消隐命令

D7 D6 D5 D4 D3 D2 D1 D0

1 0 1 X IWA IWB BLA BLB

D7、D6、D5=101,显示禁止写入/消隐命令特征字。

D3、D2=IWA,IWB,此二位分别用来屏蔽A、B两组显示。例如,当A组的屏蔽位D3=1时,A组显示RAM禁止写入。当B组的屏蔽位D2=1时,B组显示RAM禁止写入。

D1、D0=BLA,BLB是二个消隐特征位。当D1=1时,A组被屏蔽。当D0=1时,B组被屏蔽。

清除命令

D7 D6 D5 D4 D3 D2 D1 D0

1 1 0 CD2 CD1 CD0 CF CA

D7、D6、D5=110,清除命令特征字,此命令用来清除FIFO RAM和显示RAM。

D4、D3、D2=CD2,CD1,CD0用来设定清除显示RAM的方式。共有四种清除方式。 A、 D4、D3、D2=10X—将显示RAM全部清

B、 D4、D3、D2=110—将显示RAM全部清成20H,A组=0010,B组=0000 C、 D4、D3、D2=111—将显示RAM全部置1

D4、D3、D2=0XX—不清除,但CA=1时,则D3、D2仍有效

D1=CF用来置空FIFO存贮器、当CF=1时、FIFO RAM被置空,使中断输出线TRQ复位。同时,传感器RAM的读出地址也被置0。

D0=CA为总清的特征位。当CA=0时,清除显示RAM。当CA=1时,对显示的清除方式由D3、D2的位编码决定。

中断结束/出错方式没置命令

D7 D6 D5 D4 D3 D2 D1 D0

1 1 1 E X X X X

D7、D6、D5=111,该命令特征字。 E=1为设置中断结束/出错方式

RESET后E=0

上述8279的8种命令字皆由D7、D6、D5特征位确定。

8279A的FIFO状态字

D7 D6 D5 D4 D3 D2 D1 D0

Du S/E O U F N N N

Du=1,显示无效

23

S/E=1,传感器信号进入RAM/多键同时按下错误 O=1,FIFO溢出出错 U=1,FIFO取空出错 F=1,FIFO满

NNN,FIFO中的字符数(000—111) FIFO状态字由控制字口读入

(4)、相关表格

键值和键名的对照表2—1 键名 0 1 2 3 4 5 6 7 8 9 A 键值 00H 01H 02H 03H 04H 05H 06H 07H 08H 09H 0AH 键名 B C D E F EXEC MON MOV NEXT STEP LAST 键值 0BH 0CH 0DH 0EH 0FH 10H 10H 10H 显示值和显示代码对照表2—2

显示值 显示代码 11H 11H 14H 0 3FH 8 7FH 1 06H 9 6FH 2 5BH A 77H 3 4FH B 7CH

4 66H C 39H 5 6DH D 5EH 6 7DH E 79H 7 07H F 71H 显示值 显示代码 (5)、显示值和显示代码的关系 (6)、编程提示: 通常只要是可编程接口,便一定要在程序前先写控制字。在预备知识中,我们时常看到

24

有标注“*”号的控制字,标注“*”号的控制字就是说:当实验装置开机或复位时,标注“*”号的控制字已由监控程序写入。因此程序中我们就不用再写了。其实我们对8279内容只是部分掌握,因为好多事生产厂家已为我们做好。 当我们需要在数码管上显示数字时,可直接用下面语句:

MOV MOV

OUT MOV MOV OUT L:MOV

DX,00DFH AL,90H DX,AL DX,00DEH AL,显示代码 DX,AL

DX,0DFH ;0DFH 8279控制端(或状态)口

当我们需要从键盘获取键值时,可直接用下面语句:

IN AL,DX AND AL,01H JZ L

MOV CX,0FFFH

LOOP $ MOV DX,0DEH ;0DEH 8279数据口 IN

AL,DX

;AL寄存器里的内容即键值

二.实验内容:

写一程序,要求按什么键就将其键值在数码管最右边2位上显示出来。

三.实验器材:

DVCC—8086实验装置一台; 微机一台;

电源线一根及通讯电缆各1根;

四.实验要求:

先编写一简单的程序,在数码管上任意显示8个数字。然后再将8279的“写显示控制(或命令)字”从90H-97H进行改动,看看程序运行后的状态。通过实验将有关“写显示控制字”弄懂。

记住从键盘获取键值的程序,获取键值的过程。

学会从数据段中查寻数据的编程方法(变址寻址或用XLAT指令)。

弄清显示值和显示代码的区别。写一程序,要求按什么键就将其键值在数码管最右边2位上显示出来。

五.实验步骤(对实验内容而言):

本实验不需连线。

打开实验装置电源,进入DVCC实验系统窗口。

点“新建程序”键,出现“新文件0”编辑窗口。在此窗口中将你所写程序按规定写入。保存时不要用“新文件0”或其他中文名作为文件名,而只能用字符或数字作为文件名保存。文件名不要超过8个字符。文名夹也不能用中文,其长度也不要超过8个字符。 程序编好后,点击 “调试”键,在点“调试”键时,会出现传送起始地址错误信息,只

25

要选“YES”后选默认值“1000”,就可以了。如果程序前有ORG 1000H,点击 “调试”键后,就不会出现传送起始地址错误信息,可直接进行下面操作。

在动态调试菜单中点“连续执行”键后,屏幕上显示“程序正在运行中”。当从装置小键盘键入任意键时(除Reset、Intr键外),装置上的八位LED数码管最右二位将显示出其相应的键值。

当你要停止执行这个程序时,可按屏幕上提示按Reset、Intr键作相应操作。

六.实验报告:(只写一个最右边2位上显示的试验) 实验内容。

程序流程框图。

源程序(加注释。注释时不要每句注释,只需对程序段进行功能注释)。

附原理图:

图3-1 8279A可编程键盘显示接口实验原理图

26

实验二 A/D转换实验

一.实验内容:

1 、实验原理

本实验采用 ADC0809 做 A/D 转换实验。ADC0809 是一种8路模拟输入、8位数字输出的逐次逼近法A/D器件,转换时间约100us以上,转换精度为±1/512,适用于多路数据采集系统。ADC0809片内有三态输出的数据锁存器,故可以与8088微机总线直接接口。

图5-1 A/D 转换实验原理图

图中ADC0809的CLK信号接CLK=2.385MHZ,基准电压Vref(+)接Vcc。一般在实际应用系统中应该接精确+5V,以提高转换精度,ADC0809片选信号0809CS和/IOW、/IOR经逻辑组合后,去控制ADC0809的ALE、START、ENABLE信号。ADC0809的转换结束信号EOC未接, 如果以中断方式实现数据采集,需将EOC信号线接至中断控制器8259A的中断源输入通道。本实验以延时方式等待A/D转换结束,ADC0809的通道号选择线ADD-A、ADD-B、ADD-C 接系统数据线的低3位,因此ADC0809的8个通道值分别为00H、01H、02H、03H、04H、05H 、06H、07H。 启动本A/D转换只需如下三条命令:

MOV DX,ADPORT ;ADPORT为ADC0809端口地址。 MOV AL,DATA ;DATA为通道值。

OUT DX, AL ; 通道值送端口。 MOV CX, 200

LOOP $ ;延时100us以上

读取A/D转换结果用下面二条指令: MOV DX,ADPORT IN AL,DX

2 、实验线路的连接

在原理图中,粗实线是学生需要连接的线, 粗实线两端是需连接的信号名称。

27

①、IN0插孔连W1的输出V1插孔。

②、0809CS连译码输出000H~01FH、060H~06FH或070H~07FH任意一插孔。

③、调节电位器W1,以改变模拟电压值,显示器上会不断显示新的A/D转换结果。用ADC0809做A/D转换,其模拟量与数字量对应关系的典型值为+5V-FFH,2.5V-80H,0V-00H。(注意:由于所接基准电压不等于5V,是5V左右。所以,实际情况是5V左右-FFH,2.5V左右-80H,0V-00H)

二.实验器材:

DVCC—8086实验装置一台; 微机一台;

电源线一根及通讯电缆各1根; 专用实验细导线2根。

三.实验要求:

在做实验前,首先要熟悉DVCC—8086实验装置的结构、各单元电路的位置以及实验中要用到的各个插孔、插座的位置,并注意其用途。

根据原理图及接线,编写一程序,要求调节电位器W1时,这时装置上的八位LED数码管最右二位不断显示A/D转换结果。

四.实验步骤:

按原理图粗实线,将实验细导线插到相应插孔中(注意在插、拔线时一定要关掉装置电源开关,插、拔COM1、COM2插头前,一定要关掉微机电源,切记! 另外,插、拔细接线时一定要用手捏住手枪式插头,千万不要直接拉细线,要轻轻插入,避免插得太紧拔不出)。

打开实验装置电源,进入DVCC实验系统窗口。

程序编好后,点击 “调试”键,在点“调试”键时,会出现传送起始地址错误信息,只要选“YES”后选默认值“1000”,就可以了。如果程序中开始写入ORG 1000H,点击 “调试”键后,就不会出现传送起始地址错误信息,可直接进行下面操作。 在动态调试菜单中点“连续执行”键,屏幕上显示“程序正在运行中”,同时装置的八位LED数码管最右二位显示出A/D转换结果(两位16进制数,最大为FF,对应电压5V;最小为00,对应电压0V)。调节W1,改变输入电压大小,显示数据也跟着改变。

当你要停止执行这个程序时,可按屏幕上提示按Reset、intr键即可。

五.思考题

如接IN0的电压从0—5V变化时,数码管显示从00—99,如何修改程序?

28

六.实验报告:

实验题目。 原理简图。

程序流程框图。 源程序(加注释)。

七.编程提示:

A/D转换程序编写较简单,转换结果显示编程稍微复杂些。因为,转换结果显示要用到8279A可编程键盘显示接口电路。所以,编写程序时,请参阅8279实验程序。

29

本文来源:https://www.bwwdw.com/article/hwy7.html

Top