《微机原理》实验教案
《微机原理》实验教案
王 位 喜 2010.9
目 录
第二章 32位微机原理软件实验 .............................................................. 3
实验一、四则运算 .......................................................................................................................................... 3 实验二、均值滤波 ........................................................................................................................................ 18 实验三、代码转换 ........................................................................................................................................ 21 实验四、字符串冒泡排序 ............................................................................................................................ 24 实验五、描述符和描述符表实验 ................................................................................................................ 25 实验六、局部描述符表实验 ........................................................................................................................ 27
第三章 32位微机接口硬件实验 ............................................................ 30
实验箱简介 .................................................................................................................................................... 30 概述 ................................................................................................................................................................ 30 实验一 地址译码电路与I/O接口 ............................................................................................................. 32 实验二 8254定时/计数器 ............................................................................................................................ 36 实验三 8259中断控制器 ............................................................................................................................. 41 实验四 8255并口控制器 ........................................................................................................................... 47 实验五 A/D与D/A转换实验.................................................................................................................... 53
第二章 32位微机原理软件实验
实验一、四则运算
一.实验目的
1.熟悉汇编语言上机操作过程。
2.熟悉Tddebug调试环境和Turbo Debugger的使用。 3.熟悉汇编语言程序的框架结构,掌握顺序结构的编程方法。 二.实验内容
无符号数的32位加法,32位减法,16位乘以16位,32位除以16位除法四则运算练习。 三.实验源程序 (略) DATA SEGMENT DATA ENDS
STACK1 SEGMENT STACK STACK1 ENDS CODE SEGMENT
ASSUME CS:CODE,DS:DATA,CS:STACK1 标准序/非标准序 MOV AX,DATA MOV DS, AX
RET(标准序) MOV AX,4C00H INT 21H(非标准序) CODE ENDS END START 四. 实验歩骤 (一). 编辑源程序
1. 双击桌面TdPit快捷方式,在”文件”下拉菜单中选择”新建(N)”,如图1-1所示,在空白处编辑源程序。在输入源程序中, 大写字母与小写字母相同,空一格与空多格相同。
图1-1 文件下拉菜单中选择新建(N)
2.在源程序编辑结束后, 点击”文件”的下拉菜单中选择另存为, 如图1-2所示。
图1-2文件下拉菜单中选择另存为(A)文件窗口
3. 在图1-3所示的对话框选择保存路径后,输入文件名和扩展名(ASM)。
图1-3 源程序存盘
(二).编译源文件
1. 点击编译的下拉菜单,选中编译, 如图1-4所示,或单击工具栏
图1-4 编译窗口
2.经编译后岀现的信息如图1-5所示,在该窗口信息中显示编译的文件名, 源文件岀错的行,
岀错的类型及内容,错误和警告的数量等信息。
图1-5 编译信息窗口
3. 如有错误和警告,双击信息的错误或警告项,红色标志自动定位在错误或警告行, 如图1-6所示,逐项修改后存盘、编译直到错误等于0为止。注意:有的警告不影响生成目标文件
图1-6 自动定位在错误行
(三).连接目标文件
1. 点击编译的下拉菜单,选中链接(L). 如图1-7所示,或单击工具栏
图1-7 连接目标文件窗口
3.连接成功窗口如图1-8所示
图1-8 连接成功
(四).调试程序
点击编译的下拉菜单,选中调试,如图1-9所示,或单击工具栏
,就可以调试程序。
图1-9 进入实模式调试窗口
在进入调试窗口后,显示为Turbo C的调试界面,如图1-10所示。该界面分成的三窗口, 窗口1是蓝底黄字源程序,窗口2是灰白底观察窗口,窗口3是绿底黑字的存储器窗口。
图1-10 调试窗口选中CPU
由于指令是在CPU内执行,因此点击View,选中Cpu,如图1-11所示。
图1-11 点击View,选中Cpu
此时调试窗口的代码段的指令仍与源程序相同, 而指令是在CPU内执行,因此在主窗口点击右键,选择快捷方式的Mixed No, 如图1-12所示
图1-12 选择Mixed No
(1) 窗口划分
窗口划分坷图1-13所示,实模式下的实验和大部分接口实验在这个环境下完成, 在图中代码显示区的左边两大列是物理地址;第三大列是机器码,它包含操作码和操作数两部分,其中前两位是操作码,后几位是操作数, 操作数可能为0位,1位, 2位或3位; 第四大列是指令,祥见窗口中的注释。
图1-13 实模式调试窗口
下面将简要介绍调试程序的方法。其详细说明请查看帮助文档。
主菜单中包含了File、Edit、View、Run、Breakpoints、Data、Options、Windows和Help 共9个菜单项,如图1-14所示。其中代码段的高亮条为当前要执行的指令,存储器中的高亮条为执行此指令前的状态。
图1-14 主菜单窗口
(2) 快捷键
环境中可以使用热键选择相应的菜单项。在调试过程中也可以使用一些快捷键来实现一些功能,下面列出常用功能的快捷键及实现功能。 主界面功能键 F1 在任何下拉菜单中,按F1都显示该功能的帮助信息窗口
F2 设置/清除断点 :移光标到所需处,按F2即设置/清除断点, 设置/清除断点如图1-15所示
图1-15 设置/清除断点
F3 查看源代码模式(不常用)
F4 执行到光标处: 移光标到所需处,按F4,程序即从当前指针地址CS:0011执行到CS:0032光标处,如图1-16所示。
图1-16 执行到光标处
F5 放大/缩小窗口 F6 窗口切换 F7 单步执行
F8 单句执行 :与单步执行的区别是如果是调用过程也一次执行完毕 F9 运行程序 :连续运行程序 F10 Menu激活主菜单 Ctrl+Break 终止程序执行 Alt+X 退出 TAB 切换激活窗口,高亮条为当前激活的口 A. 窗口在寄存器显示区中时
Ctrl+R 切换16位/32位通用寄存器显示 Ctrl+I 使光条指示寄存器的内容+1 Ctrl+D 使光条指示寄存器的内容- 1 Ctrl+Z 使光条指示寄存器的内容清零 Ctrl+C 手动修改光条指示寄存器的内容 B. 窗口在标志寄存器显示区中时
Ctrl+T 翻转光条指示标志的状态 C. 窗口在数据显示区中时
Ctrl+D 修改数据显示格式
Ctrl+G 指定需要显示的内存区域首地址 Ctrl+S 查找指定的字节值表
Ctrl+C 修改光标当前指示存储单元的内容 D. 窗口在代码显示区中时
Ctrl+G 指定需要显示的代码区域首地址 Ctrl+S 查找指定指令 E. 字符 修改光标当前指示指令 (3). 实模式下査数据段的数值
点击菜单View,如图1-17所示,在下拉菜单中选中CPU,就可在数据显示区显示数据段或附
加段的数值。
图1-17 View的下拉菜单窗口
若在图1-13所示的下拉菜单中选中CPU,则在数据显示区显示原ES段的数值转变为DS段的数值。
(4) 重新运行程序
程序运行结束后,要重新运行选中如下图所示菜单
五.调试步骤:
实验中寻址方式有:寄存器寻址,立即数寻址,直接地址寻址。
在代码显示区中,原程序中的变量(如A、B、C、D„等),在此已均转变成实地址,伪指令部分不岀现在代码显示区中,这就说明伪指令是不允许执行的指令。 本程序从结构上是属于顺序结构
1. 单步调试: 按F7或F8 物理地址 机器码 CS:0 CS:1 CS:4 CS:5 CS:8 CS:0A CS:0D CS:11 1E B8 0000 50 B8 XXXX 8E D8 A1 0000 03060400 A3 0800 指 令 PUSH DS MOV AX,0000 PUSH AX MOV AX, XXXX MOV DS,AX MOV AX,[0000] ADD AX,[0004] MOV [0008],AX 观察对象(cpu内reg,flage高亮) IP SP+2→SP SS IP AX SP+2→SP SS XXXX→AX DS AX AX flage的C,A标志 AX→[0008] 每按一下F7或F8,IP总是改变,它总是指向代码段的下一条指令,每执行完一条指令,与本指令有关的单元或标志位会发生变化。
执行PUSH指行时,注意观察SP的变化和堆栈内容的变化,它说明压栈、退栈是以字为单位操作,且SP增减量为2。
当指令执行到CS:000A时,点击Viwe\\Cpu,查看数据显示区内容,这就体现伪指令的功能,它说眀数据段是根据伪指令来组织存放数据,高位放在高字节, 低位放在低字节,伪指令中预留的空间为0。
当执行到ADD ADC SUB SBB指令时,注意观察标志寄存器显示区标志位的变化。 当执行存放计算结果时, 注意观察数据显示区相应单元数据的变化。
当执行到MUL DIV指令时,应知悉目标操作数在那个寄存器,执行执指令后其结果放在那些寄存器中。
记录数据显示区相关的数据。
2. 用执行到光标处调试:(点击Run\\Program reset)
将光标移到CS:000A处,按F4, 查看数据显示区内容。
将光标移到CS:001E处,按F4, 查看数据显示区两32位相加之和。 将光标移到CS:0032处,按F4, 查看数据显示区两32位相减加差。 将光标移到CS:0040处,按F4, 查看数据显示区16位乘16位之积。 将光标移到CS:0052处,按F4, 查看数据显示区16位乘16位之积。 查看数据显示区相关的数据。 3. 连续执行: (点击Run\\Program reset)
按压F9, 查看数据显示区相关的数据。 六.实验报告内容
1.记录数据段存放的原始数据,和程序执行结束后的数据。
DS:0000 DS:0008 DS:0010
DS:0018 DS:0020 DS:0028
2. 写岀和、差、积、商、余数。如:56781234H+123AFEDCH=68B31110H„. 3. 心得体会和建议。
实验二、均值滤波
一.实验目的
1.掌握在数据表中找最大最小数的方法。
2.学会子程序的使用方法,参数传递的方法, 掌握分支程序,循环程序的设计方法。 3.熟悉Tddebug调试环境和Turbo Debugger的使用。 二.实验内容
均值滤波算法:对N(2 开始 初始化 否 AL ≥ [SI ]? 找最大值,找最小值 CALL SMAX,SMIN 是 求N个数之和 SI=SI+1 减去最大值,最小值 否CX-1=0? 除以(N-2),求平均值 是 保存最大值 结束 AL=[SI] 返回 图2-2-2 SMAX子程序流程图 图2-2-1主程序流程图 四. 参考源程序 (略) 五.实验歩骤 1 输入源程序:单击文件\\新建,在光标处输入源程序,输完源程序后,单击工具栏件\\另存为, 选择存放路径,输入文件名.ASM。 2 编译程序:单击工具栏再编译,直到错误为零。 3 连接程序: 单击工具栏 ,在屏幕下方的信息栏窗口显示连接信息。 ,链接程序,在屏幕下方的信息栏窗口显示编译信息, 若有语 法错误,逐一双击该行,系统将自动定位错误行,並用红箭头指向错误行, 逐一修改后存盘, 或文 4 调试程序: 单击工具栏显示区为DS的内容: ,单击View\\Cpu, 在代码显示区单击右键\\点击Mixed Both, 为Mixed No,按F7单歩执行,当执行完 MOV DS, AX后, 单击View\\Cpu,使屏幕下方的数据5 修改源程序,用同一个子程序求出最大值、最小值。 六.调试步骤: 1. 单步调试: 按F7或F8。 物理地址 : CS:09 CS:12 CS:15 : CS:1E CS:21 : CS:49 CS:4A CS:4C CS:4E CS:50 CS:52 CS:53 CS:55 CS:57 机器码 : BE 0100 E8 3500 BE 0100 : E8 3700 B9 0A00 : CB B0 00 3A 04 73 02 8A 04 46 E2 F7 88 05 C3 指 令 : MOV CX,000A CALL #XX#SMAX MOV SI,0001 : CALL 0058 MOV CX,000A : RETF MOV AL,00 CMP AL,[SI] JNB 0052 MOV AL,[SI] INC SI LOOP 004C MOV [DI],AL RET 观察对象(cpu内reg,flage高亮) 数据段存放的原始数据 IP SP内容 原始数据中的最大值 IP SP内容 原始数据中的最小值 原始数据中的平均值,最大值,最小值 IP SP内容(它是返回的主程序地址) AL DS:[SI] IP C,Z标志 AL SI CX [DI]中的值 IP SP #XX #SMAX 当指令执行完 MOV DS,AX后时,点击Viwe\\Cpu,查看数据显示区内容,这就体现伪指令的功能,它说眀数据段是根据伪指令来组织存放数据,预留的平均值,最大值和最小值空间为0。 在执行CALL SMAX前、后,注意观察IP、SP的内容,执行后IP指向入口地址,原IP内容压入堆栈,故SP变化, 这是子程序调用的关键之处。 在执行 CMP AL,[SI]后, 注意观察标志寄存器C、Z标志位的变化。 在执行JNB 0052后, 注意观察程序运行转向,这是分支结构的关键之处。 在执行LOOP 004C后, 注意观察CX的变化及和程序运行转向, 这是循环结构的关键之处。 当执行到MOV [DI],AL后,数据显示区相应单元数据的变化。 在执行 求最大值的RET后, 注意观察SP,IP的变化,这是子程序返回的关键之处。 2. 用执行到光标处调试:(点击Run\\Program reset) 将光标移到CS:0009处,按F4, 查看数据显示区内容。 将光标移到CS:0015处,按F4, 查看数据显示区和最大值。 将光标移到CS:0021处,按F4, 查看数据显示区最小值。 将光标移到CS:0049处,按F4, 查看数据显示区平均值。 3 .连续执行: (点击Run\\Program reset) 按压F9, 查看数据显示区相关的数据。 七、实验报告 1、记录主程序、子程序SMAX、子程序SMIN 的起始地址和结束地址。 起始地址 结束地址 2、记录数据段中存放的的10个数据、最大数、最小数及平均数。 DS:0000 DS:0008 3、记录执行CALL SMAX前、后,的IP、 SP值;执行CALL SMAX 的RET前、后IP、,SP值。。 执行CALL SMAX前 执行RET前 4、最大值=? 最大值=? 平均值=? 5、心得体会和建议。 IP= IP= SP SP 执行CALL SMAX后 执行RET后 IP= IP= SP SP 主程序 子程序SMAX 子程序SMIN 实验三、代码转换 一.实验目的 1.掌握代码转换的基本方法。 2.学会INT21功能调用, 掌握人机对话的设计方法。 3.进一歩熟悉Tddebug调试环境和Turbo Debugger的使用。 二.实验内容 从键盘输入小写字母(最多20个),以 “.”号作为结束标志,在屏幕上输岀相应的大写字母。用INT21中的09H号功能实现输出对话,0AH号功能实现输入对话。输入小写字母后,用INT21的0AH号功能,将读入的数据存放在缓冲区SMALL中,其中SMALL的笫一个字节指岀缓冲区能容纳的字符数,不能为0(程序暂定为50),第二个字节保留,以用作存放实际键入的输入字符的个数;从笫三个字节开始存放从键盘上接受的字符,所以转换时要从SMALL的笫三个字节,即SMALL+2开始。SMALL中存放的是小写字母的ASSII码,将此值减去20H,即为大写字母的ASSII码,将其依次存放在名为CAPITAL的数据段中,然后用INT21中的09H功能输出。 三.程序流程图 主程序流程图如图1-3-1所示。 输岀提示信息 从键盘输入小写字母 回车换行 CX=20 是 字符= “· ” ? 否 变换成大写字母 存入输岀缓冲区 否 CX-1=0 ? 输岀缓冲区以“$”结尾 是 显示大写字母 返回DOS 图1-3-1主程序流程图 四.源程序 (略) 五.实验步骤 1 输入源程序:单击文件\\新建,在光标处输入源程序,输完源程序后,单击工具栏件\\另存为, 选择存放路径,输入文件名.ASM。 2 编译程序:单击工具栏再编译,直到错误为零。 3 连接程序: 单击工具栏4 调试程序: 单击工具栏显示区为DS的内容: 5 修改源程序,对输入的非法字符进行处理 六.调试步骤: 1、注意:源程序中的结构不完善,需要自我完善,才能生成执行文件;主要是程序的框架结构不完整,可参考实验一找出存在的问题。 ,在屏幕下方的信息栏窗口显示连接信息。 ,单击View\\Cpu, 在代码显示区单击右键\\点击Mixed Both,,链接程序,在屏幕下方的信息栏窗口显示编译信息, 若有语 法错误,逐一双击该行,系统将自动定位错误行,並用红箭头指向错误行, 逐一修改后存盘, 或文 为Mixed No,按F7单歩执行,当执行完 MOV DS, AX后, 单击View\\Cpu,使屏幕下方的数据 2、程序正常运行应按流程图执行,但生成的执行文件无法实现,故需调整DOS功能调用,才能实现流程图的功能,DOS功能调用,是根据 INT 21H之前的AH的值来决定. 在本程序中,键盘输入字符串是10号调用,显示字符串是9号调用 3、执行到笫二个宏调用时,鼠标移到数据区后点击(激活数据区),査看由INT21的0AH号功能,将读入的数据存放在缓冲区SMALL中予留缓冲区长度,键入的字符个数;键盘上接受的字符及输入的小写字母的ASCII码。 4、执行到笫三个宏调用时,鼠标移到数据区后点击(激活数据区),根据di査转换成大写字母的ASCII码。 七.实验报告 1、显示MES1的信息修改后的部分源程序。 2、数据段存放的键盘输入的小写字母的ASCII码和转换成大写字母的ASCII码。 DS:040 DS:048 DS:050 DS:058 DS:078 DS:080 DS:088 DS:090 4、在屏幕显示相应的大写字母。 5、心得体会和建议。 实验四、字符串冒泡排序 一.实验目的 1.进一歩掌握主子程序设计方法。 2.掌握人机对话的设计方法。 3.进一歩熟悉Tddebug调试环境和Turbo Debugger的使用。 4. 掌握冒泡排序的一种方法 二.实验内容 试设计名为“TITLE BOBBLE SORT”冒泡程序,当屏幕上显示一行“PLESAE ENTRY STR1NG”提示信息, 屏幕上立即在下一行输入字符串; 程序用冒泡法对字符串以ASCII码的值按升序来排序, 屏幕在下一行显示这个排序好的字符串。 三.程序思路 冒泡法排序有多种算法,𠬬程序采用的是循环次数固定法,设有N个元素串,首先把笫一个元素送入AL,並设定其为“当前最小值”单元,然后和剩下的(N-1)个元素值比较,若有一个元素比它小,则两个元素互换, 经(N-1)次比较,“当前最小值”单元是N个元素的最小值,之后再把它写回到笫一个元素的位置,即冒出了一个最轻的泡, 如此下去,顺序冒出(N-1)个泡后, N个元素就排序好了 四.程序清单 五.实验步骤: 1 输入源程序:单击文件\\新建,在光标处输入源程序,输完源程序后,单击工具栏件\\另存为, 选择存放路径,输入文件名.ASM。 2 编译程序:单击工具栏再编译,直到错误为零。 3 连接程序: 单击工具栏4 调试程序: 单击工具栏显示区为DS的内容: 六.实验报告 1、数据段存放的键盘输入的ASCII码和屏幕显示的字符串。 2、在屏幕显示排好序的字符串。 3、心得体会和建议。 ,在屏幕下方的信息栏窗口显示连接信息。 ,单击View\\Cpu, 在代码显示区单击右键\\点击Mixed Both,,链接程序,在屏幕下方的信息栏窗口显示编译信息, 若有语 法错误,逐一双击该行,系统将自动定位错误行,並用红箭头指向错误行, 逐一修改后存盘, 或文 为Mixed No,按F7单歩执行,当执行完 MOV DS, AX后, 单击View\\Cpu,使屏幕下方的数据 实验五、描述符和描述符表实验 一.实验目的 (1) 熟悉保护模式的编程格式。 (2) 掌握描述符的声明方法。 (3) 掌握使用选择符访问段的寻址方法。 二.实验内容 实现在一个0级代码段中将源数据段中的一段数据复制到目标数据段中。其中所有段的段描述符均放置在GDT中。 1.实验分析 为了实现在0级代码段中完成数据传输,实验程序中需要安排一个0级代码段和两个0级数据段(可以是0~3级任一级别的数据段)。 在程序开始声明一个数据段‘DSEG’,来描述这三个段的描述符,其中有代码段描述符Scode,源数据段描述符DataS和目标数据段描述符DataD,将它们相应的选择子分别定义为Scode_Sel,DataS_Sel,DataD_Sel。按照实验程序编写格式的约定及描述符的格式定义(参看附录),为这三个段分别定义描述符: (1) 代码段描述符:Scode Desc G : 0 ; 以字节为段界限粒度 D : 0 ;是16位的段 P : 1 ;描述符对地址转换有效/该描述符对应的段存在 DPL : 0 ;0级段 DT : 1 ;描述符描述的是存储段 TYPE: 0x8 ;只执行段 段基地址说明:定义代码段的标号为CSEG,则在段基地址处填写CSEG,为调试器提供重定位信息。 段界限说明:段界限定义为Clen。 (2) 源数据段描述符:DataS Desc G : D : 0 ;以字节为段界限粒度 0 ;是16位的段 P : 1 ;描述符对地址转换有效/该描述符对应的段存在 DPL : 0 ;0级段 DT : 1 ;描述符描述的是存储段 TYPE: 0x2 ;可读写段 段基地址说明:定义源数据段标号为DSEG1,则在段基地址处填写CSEG,为调试器提供重定位信息。 段界限说明:定义段界限为DLEN。 (3) 目标数据段描述符:Datad Desc 目标数据段描述符的内容基本与源数据段的内容相同,只要修改段基地址和段界限的定义即可。 为了给装入程序提供重定位信息,三个存储段描述符中地址的低16位用每个描述符对应段的标号来填写。在程序装入内存时,调试系统会根据地址的低16位重定位该段对应的真实物理地址,并将该地址写入描述符中(系统没有使用分页机制,线性地址等价于物理地址)。在实验中可查询GDT表来确定每个段的真实物理地址。 在程序定义过程中,首先使用一个全“F”的描述符作为定义的开始,然后定义代码段描述符Scode、源数据段的描述符DSEG1和目标数据段描述符DSEG2。为了区分LDT表和GDT表的定义,再使用一个全“F”的描述符作为界限。由于本实验中不使用LDT表,则再使用一个全“F”的描述符结束描述符的声明。 本程序可实现将一个数据段中数据搬移到另一个数据段的过程。传输过程中可使用DS,ES两个段寄存器,其中DS装入源数据段的选择符DataS_Sel ,ES装入目标数据段的选择符DataD_Sel。在实验程序的最后使用“INT 0FFH”指令,正常结束程序运行。 三.实验步骤 (1) 进入纯DOS环境,运行Tddebug集成操作软件。 (2) 运行Tddebug软件,使用Alt+E选择Edit菜单项进入程序编辑环境。按实验要求编写程序。实验参考流程图如图1-5-1. (3) 程序编写完后保存退出,使用Alt+C选择Compile菜单中的Compile和Link命令对实验程序进行编译、连接。 (4) 编译输出信息表示无误后,使用Alt+P选择Pmrun命令装入实验程序,如果装入成功,屏幕上会显示“Load OK!”,否则,会给出相应的错误提示信息。 (5) 若程序装入成功,则进入保护模式调试环境。在命令输入行使用GDT命令查询系统的GDT表,并且查看实验程序中声明的代码段、数据段描述符在GDT表中的位置以及对应段的物理地址、段属性、段界限等。 (6) 使用F7单步执行程序,执行LLDT AX语句后,使用LDT命令查看LDT局部描述符表的内容。 (7) 根据LDT内容使用D命令查看源数据区的数据和目的数据区数据内容。 (8) 按F9运行程序,如果程序正常运行结束,命令显示区中将显示“Correct Running”。 (9) 运行结束后,再次查看目的数据区内容,观察数据传输是否正确。 四. 程序流程图 全局描述符表实验参考流程图见图1-5-1 描述GDT表项 声明各数据段描述符 输在0级代码段中实现数据传输 调用INT0FFH返回调试系统 结束 图1-5-1 全局描述符表实验参考流程图 五.参考实验程序 (略) 实验六、局部描述符表实验 本实验与上一实验所完成的功能相同,但要求将代码段安排在全局描述符表中,而将数据段安排在局部描述符表中。 一.实验分析 本实验需要为代码段和数据段分别声明描述符,由于要求将数据段的描述符放入LDT表中,所以实验程序需要建立一张局部描述符表,并在GDT表中声明LDT表对应的描述符。描述符声明完成,还需要为它们定义相应的选择子。 实验程序在DSEG 段中描述GDT表中的描述符。先用一个全“F”的描述符作为定义的开始,然后定义主程序段和LDT表描述符,然后使用一个全“F”的描述符作为区分于LDT表的界限。在DSEG段后,用DSEG1 段来描述LDT表中的描述符,其中包括源数据段描述符目标数据段描述符。在DSEG1段的末尾再使用一个全“F”描述符作为描述符声明的结尾。 由于主代码段需要访问的段是在LDT表中声明的,所以在程序的初始需要执行装载LDTR的指令。装载LDT表使用的指令如下: MOV AX,LDT_Sel LLDT AX (1) LDT表对应段描述符:LDTable Desc G :0 ;以字节为段界限粒度 D :0 ;是16位的段 P :1 ;描述符对地址转换有效/该描述符对应的段存在 DPL :0 ;0级段 DT :0 ;描述符描述的是系统段或门描述符 TYPE:0x8 ;LDT表 段基地址说明:需要在重定位后确定,但可以知道,该描述符对应的数据段是DSEG1 段界限说明: 段界限为LDTLen-1 ATLDT EQU 82h ;局部描述符表段类型值 (2) 数据段选择子 实验中的两个数据段均在LDT表中声明,则描述符对应的段选择符应该标记出来 TIL EQU 04h DataS_Sel = DataS-LDT+TIL DataD_Sel = DataD-LDT+TIL 二.实验步骤 (1) 进入纯DOS环境,运行Tddebug集成操作软件。 (2) 运行Tddebug软件,使用Alt+E选择Edit菜单项进入程序编辑环境。按实验要求编写程序。实验参考流程图如图1-6-1所示。 (3) 程序编写完后保存退出,使用Alt+C选择Compile菜单中的Compile和Link命令对实验程序进行编译、连接。 (4) 编译输出信息表示无误后,使用Alt+P选择Pmrun命令装入实验程序,如果装入成功,屏幕上会显示“Load OK!”,否则,会给出相应的错误提示信息。 (5) 若程序装入成功,则进入保护模式调试环境。在命令输入行使用GDT命令查询系统的GDT表,并且查看实验程序中声明的代码段、数据段描述符在GDT表中的位置以及对应段的物理地址、段属性、段界限等。 (6) 使用F7单步执行程序,执行LLDT AX语句后,使用LDT命令查看LDT局部描述符表的内容。 (7) 根据LDT内容使用D命令查看源数据区的数据和目的数据区数据内容。 (8) 按F9运行程序,如果程序正常运行结束,命令显示区中将显示“Correct Running”。 (9) 运行结束后,再次查看目的数据区内容,观察数据传输是否正确。 三.程序流程图 描述符GDT表项 描述符LDT表项 声明各数据段描述符 在0级主代码段中装载LDT 在0级代码段中实现数据传输 调用INT0FFH返回调试系统 结束 图1-6-1 局部描述符表实验参考流程图 五.参考实验程序(略) 第三章 32位微机接口硬件实验 实验箱简介 概述 TD-PIT++实验系统硬件主要由 PCI 总线扩展卡和TD-PIT++实验平台构成,其 硬件系统的连接接如图1-1a所示。 C P U AGP总线 内存总线 显卡 北桥芯片 内存 显示器 PCI总线 硬盘 IED接口 南桥芯片 PCI槽 USB总线 PCI槽 PCI卡 USB设备 键盘 鼠标 有Flash BIOS 微机实验箱 图1-1a 硬件系统的连接 PCI 总线扩展卡包括PCI 总线接口电路和系统配置电路以及扩展总线插座。主要实现PCI 总线接口以及将32 位高速总线从PC 机引出。PCI 总线扩展卡结构如图1-1 所示。 图1-1 PCI 总线扩展卡结构 TD-PIT++实验平台上的电路结构主要分两部分:系统总线单元电路和实验单元电路。是32 位微机接口实验的主要操作平台。实验平台结构如图1-2 所示。 图1-2 实验平台结构 准系统总线单元实现了面向80x86 微机系统的32 位系统总线,符合80x86 总线时序标的接口电路均可以直接连接到该总线上。总线信号说明如表1-1 所示。 表1-1 总线信号 实验系统向PC 机申请了接口实验所需的配置资源。其中包括16MB 的存储地址空间、255字节的I/O 地址空间和一个中断请求线。中断请求线是映射到PC 机内15 个中断线中的一个。系统总线单元将地址空间进行了译码,各提供4 个片选信号,片选信号同偏移地址空间对应关系如表1-2 所示。 表1-2 片选信号同偏移地址空间对应关系 用PC 机分配的I/O 或存储器空间始地址加上这个偏移地址,就是实验系统中端口占用的实际地址, I/O 和或存储器地址电原理如图1-2A所示。PC 机分配的起始地址可以在Tdpit 软件中查看或由实验系统附带的配置资源检查程序CHECK.EXE 获得。 图1-2A I/O和存储器地址电原理图 XD0-XD7XD8-XD15 IOY0 (00H--3FH)IOY1 (40H--7FH)IOY2 (80H--0BFH)IOY3 (0C0H--0FFH)MY0 (00H--3FFFFFH)MY1 (400000H--7FFFFFH)MY2 (800000H-0BFFFFFH)MY3 (0C00000H-0FFFFFFH)BE0BE1BE2BE3XIORXIOWXMERXMEW74245 X 4D0--D3120V8(12)20V8(13)B/EDIRAA6A7231XD16-XD23XD24-XD3174139AAY0BY1Y2EY34567XA2-XA9XA10-XA17A22A2314131574139BAY0BY1Y2EY3121110974245 X 4A0--A31BAXA18-XA25XA26-XA31/E20V8(13)DIR可编程芯片控制总线14131211181716157424567892345 实验一 地址译码电路与I/O接口 一、实验目的 (1) 学习3-8译码器在接口电路中的应用。 (2) 掌握地址译码电路的一般设计方法。 二、实验设备 PC微机一台、TD-PIT+ 实验系统一套。 三、实验内容 1. 用74LS138译码器设计地址译码电路,Y7作为基本输入/输出单元的片选信号。1. 读入74LS245输入的八位数据,在74LS574上输出,用八位LED显示开关状态。 2. 当有键按下,且读入的数字量为1, 则八位LED从右向左依次循点亮,否则重读数字量。 3. 再有键按下,且读入的数字量为2, 则八位LED交替亮,否则重读数字量。 4. 再有键按下返回。 四、 实验原理 微机接口电路中,常采用74LS138译码器来实现I/O端口或存储器的地址译码。74LS138有3个输入引脚、3个控制引脚及8个输出引脚,其管脚信号如图2-1-1所示。当3个控制信号有效时,根据输入信号A、B、C的状态,来确定那个输出端为低电平,该信号即可作为片选信号。 图2-1-1 74LS138译码器管脚 32位扩展系统总线上有一个/IOM信号,该信号为低电平时指示当前操作为I/O操作,为高电平指示当前操作为存储器操作,它和译码器不同的连接可以用来区分是I/O端口译码还是存储器端口译码。32位总线地址是由A2开始,所以地址是以4字节边界对齐的。 实验系统的I/O地址空间共有256字节,偏移地址一般从00H~FFH。起始地址由PC机系统分配,可以用CHECK程序读出。所以设计地址译码电路,主要是针对低8位地址线译码,得到偏移在00H~FFH之间的端口。本实验要求不使用总线上的片选信号,自行设计端口偏移地址分别为C0H~DFH和E0H~FFH的译码电路,然后用译码输出作为基本输入输出单元的片选。编写程序,完成I/O数据操作。实验电原理框图如图2-1-2所示, 连线图如表2-1-1所示。 74LS138口地址的计算方法: XA7 0 0 0 0 1 1 1 1 XA6 0 0 1 1 0 0 1 1 XA5 0 1 0 1 0 1 0 1 XA4 X X X X X X X X XA3 X X X X X X X X XA2 X X X X X X X X XA1 X X X X X X X X XA0 X X X X X X X X 地址 Y0=00H Y1=20H Y2=40H Y3=60H Y4=80H Y5=0A0H Y6=0C0H Y7=0E0H XD0--XD72A19311615141312111012345678974LS245A0A1A2A3A4A5A6A7EDIRB0B1B2B3B4B5B6B7+5v18 I017I116I215I314I413I512I611I7K0K1K2K3K4K5K6K7123456784.7k*8161514131211109SW DIP-8+5vBE0BE045B23456789116174LS5741D2D3D4D5D6D7D8DCLKOC1Q2Q3Q4Q5Q6Q7Q8Q1918171615141312O0O1O2O3O4O5O6O7D0D1D2D3D4D5D6D71K123456781KXIORXA5XA6XA7GNDIOR12364574LS138ABCE3E1E2Y0Y1Y2Y3Y4Y5Y6Y7/G15141312111097910CS12DC8XIOWIOW1311 图2-1-2 地址译码设计实验电原理框图 表2-1-1 地址译码设计实验连线表 I/O单元 CS IOR IOW BE0,BE1 I0-I7 O0-O7 四、流程图及实验步骤 地址译码电路与I/O接口设计流程图如图2-1-4所示。 连接 其他端 XIOR XIOW BE0,BE1 K0-K7 D0-D7 74LS138端 /G 连接 其他端 XA5,XA6,XA7 GND Y7(74LS138) A,B,C 9 𠨝始化 读入八位开关量 输岀八位数据 N 有键按下吗? Y读入八位开关量 N YAL=1 ? 八位LED左循环点亮 Y有键按下吗? 读入八位开关量 N AL=2 ? N YY 结束 N YN 图2-1-4 地址译码电路与I/O接口设计流程图 实验步骤: 1.按图3-1-1所示连接实验线路。 2.32位I/O接囗单元自检 (1) 点击工具栏c:\\ (2) C:\\TangDu\\PitPP\\Asm1>DEBUG I 30E0 ;读入当前八位开关状态, 改变八位开关状态,开关量亦不同 O 30E0 FF ;八位LED全亮 Q ;退岀自检 (3) 返回WINDOWS C:\\TangDu\\PitPP\\Asm1>EXIT 3.编译链接。 4.运行程序,拨动开关,观看LED显示是否正确。 五、参考程序 六、实验报告 实验二 8254定时/计数器 一. 实验目的 (1) 掌握8254的工作方式及应用编程。 (2) 掌握8254的典型应用电路接法。 二. 实验设备 PC微机一台、TD-PIT+ 实验系统一套。 三. 实验内容 1. 计数器0工作在方式3, 初值为4800H, OUT0分两路输出,一路外接2位LED,使其以亮0.5秒灭0.5秒闪亮,另一路作为计数器1的计数脉冲CLK1.。 2. 计数器1工作在方式2, 初值为4, OUT1的输出外接2位LED,使其以亮3秒灭1秒闪亮。 3. 计数器2工作在方式0, 初值为0FH,按压开关产生的脉冲作为计数器2的计数脉冲,按压开关的次数将在屏幕上显示,当按压开关到17次时,观察OUT2电平的变化。 四. 实验原理 8254是Intel公司生产的可编程间隔定时器。是8253的改进型,比8253具有更优良的性能。8254具有以下基本功能: (1) 有3个独立的16位计数器; (2) 每个计数器可按二进制或十进制(BCD)计数; (3) 每个计数器可编程工作于6种不同工作方式; (4) 8254每个计数器允许的最高计数频率为10MHz(8253为2MHz); (5) 8254有读回命令(8253没有),除了可以读出当前计数单元的内容外,还可以读出状态寄存器的内容。 (6) 计数脉冲可以是有规律的时钟信号,也可以是随机信号。计数初值公式为n=fCLKi÷fOUTi、其中fCLKi是输入时钟脉冲的频率,fOUTi是输出波形的频率。 图2-2-1是8254的内部结构框图和引脚图,它是由与CPU的接口、内部控制电路和三个计数器组成。8254的工作方式如下: (1) 方式0:计数到0结束输出正跃变信号方式。 (2) 方式1:硬件可重触发单稳方式。 (3) 方式2:频率发生器方式。 (4) 方式3:方波发生器。 (5) 方式4:软件触发选通方式。 (6) 方式5:硬件触发选通方式。 图2-2-1 8254的内部接口和引脚 8254的控制字有两个:一个用来设置计数器的工作方式,称为方式控制字;另一个用来设置读回命令,称为读回控制字。这两个控制字共用一个地址,由标识位来区分。控制字格式如表2-2-1所示。读回控制字格式如表2-2-2所示。当读回控制字的D4位为0时,由该读回控制字D1~D2位指定的计数器的状态寄存器内容将被锁存到状态寄存器中。状态字格式如表2-2-3所示。 表2-2-1 8254的方式控制字格式 表2-2-2 8254读出控制字格式 表2-2-3 8254状态字格式 五. 实验说明及流程图 根据计数初值公式n = fCLKi÷fOUTi,可计算计数器0,1,2,的初值如下: 计数器2的CLK2=18.432KHZ,OUT2=2,所以N2=18432 / 2 =9216=576H 计数器0的CLK0=184.32KHZ,OUT0=5KHZ,所以N0=184.32 / 5 =36.8=37 计数器1的CLK1=5KHZ,OUT1=1KHZ,所以N1=5 / 1 =5 8254定时/计数器一电原理框图如图2-2-2所示,连线图如表2-2-1所示,流程图如图2-2-4所示。 876543212122231920D0D1D2D3D4D5D6D7CSRDWRA0A112AGATE0CLK0OUT0CLK1GATE1OUT1OUT2GATE2CLK211910151413171618+5VXD0--XD71K+5V1K1K+5V8254IOY0XIORXIOWXA2XA3+5V4.7k74LS003KK1+4.7k+5V45B74LS006KK1-18.432KHZ1.8432MHZ18.432MHZ12CLKAMRQ0Q1Q2Q33456184.32KHZ3.6K121023.6K3410274LS393131274LS393CLKBAB74LS0474LS04MRQ0Q1Q2Q3111098 图2-2-2 8254定时/计数器电原理框图 表2-2-1 8254定时/计数器连线表 8254端 CS D0-D7 RD WR A0,A1 CLK0 OUT0 初始化 计数器0方式3, 初值=4800H 计数器1方式2, 初值=`4 计数器2方式0, 初值=0FH 连接 其他端 IOY0 XD0-XD7 XIOR XIOW XA2,XA3 18.432KHZ D0,D1 8254端 OUT0 GATE1 OUT1 GATE2 CLK2 OUT2 连接 其他端 CLK1(8254) +5V D7,D8 +5V KK1+ D8,D9 读计数器2当前值 N 有键按下吗? Y 结束 图2-2-4 8254定时/计数器一参考程序流程图 8254口地址的计算方法: XA7 0 0 0 0 XA6 0 0 0 0 XA5 0 0 0 0 XA4 0 0 0 0 XA3 0 0 1 1 XA2 0 1 0 1 XA1 x x x x XA0 x x x x 地址 计数器0=00H 计数器1=4H 计数器2=8H 计数器控制口=0cH 实验步骤如下。 1.首先运行CHECK程序,查看I/O空间始地址。 2.编译链接。 3.参考图3-2-3所示连接实验线路。 4.8254单元自检 (1) 点击工具栏c:\\ (2) C:\\TangDu\\PitPP\\Asm1>DEBUG O 300C 36 ; 计数器0 CW O 3000 00 ; 计数器0低八位初值 O 3000 90 ; 计数器2高八位初值,执行后LED一灭一亮 计数器1,2自检类似 Q ;退岀自检 (3) 返回WINDOWS C:\\TangDu\\PitPP\\Asm1>EXIT (4) 可以改变计数初值,从而实现不同要求的计数。 六.参考程序 七、实验报告 1. 实验目的 2. 电原理框图 3. 流程图 4. 实验结果 5.心得体会和建议 实验三 8259中断控制器 一.实验目的 (1) 学习中断控制器8259的工作原理。 (2) 掌握可编程控制器8259的应用编程方法。 二. 实验设备 PC微机一台、TD-PIT+ 实验系统一套。 三.实验内容 利用实验平台上的8259控制器,可以对总线上的INTR进行扩展。将8259的INT连接到INTR,8259的8路中断请求线IR0~IR7就成了单一INTR中断请求线的扩充。这8路中断源共用INTR的中断矢量,共用INTR的中断服务线程。在INTR的中断服务线程中通过对8259 OCW3的查询,以确定是IR0~IR7中哪个产生中断,然后转到相应的服务线程进行处理。将8259的OCW3中P位置1即可执行查询,查询字格式如图2-3-3所示。 四. 实验原理 1.8259控制器的介绍 中断控制器8259A是Intel公司专为控制优先级中断而设计开发的芯片。它将中断源优先级排队、辨别中断源以及提供中断矢量的电路集于一片中,因此无需附加任何电路,只需对8259A进行编程,就可以管理8级中断,并选择优先模式和中断请求方式,即中断结构可以由用户编程来设定。同时,在不需增加其他电路的情况下,通过多片8259A的级连,能构成多达64级的矢量中断系统。它的管理功能包括:1)记录各级中断源请求,2)判别优先级,确定是否响应和响应哪一级中断,3)响应中断时,向CPU传送中断类型号。8259A的内部结构和引脚如图2-3-1所示。 8259A的命令共有7个,一类是初始化命令字,另一类是操作命令。8259A的编程就是根据应用需要将初始化命令字ICW1-ICW4和操作命令字OCW1- OCW3分别写入初始化命令寄存器组和操作命令寄存器组。ICW1-ICW4各命令字格式如图2-3-2所示,OCW1-OCW3各命令字格式如图2-3-3所示,其中OCW1用于设置中断屏蔽操作字,OCW2用于设置优先级循环方式和中断结束方式的操作命令字,OCW3用于设置和撤销特殊屏蔽方式、设置中断查询方式以及设置对8259内部寄存器的读出命令。 图2-3-1 8259内部结构和引脚图 图2-3-2(a) ICW1格式 图2-3-2(b) ICW2格式 图2-3-2(c) ICW3格式 图2-3-2 (d)ICW4格式 图2-3-3 OCW命令字格式 2.8259寄存器及命令的控制访问 在硬件系统中,8259仅占用两个外设接口地址,在片选有效的情况下,利用A0来寻址不同的寄存器和命令字。对寄存器和命令的访问控制如表2-3-1所示。 表2-3-1 8259寄存器及命令的控制访问 2.PC微机系统中的8259 3. 在80x86系列PC微机系统中,系统中包含了两片8259A中断控制器,经级连可以管理 15级硬件中断,但其中部分中断号已经被系统硬件占用,具体使用情况如表2-3-2示。两片8259A的端口地址为:主片8259使用020H和021H两个端口;从片使用0A0H和0A1H两个端口。系统初始化两片8259的中断请求信号均采用上升沿触发,采用全嵌套方式,优先级的排列次序为0级最高,依次为1级、8级~15级,然后是3级~7级。 在扩展系统总线上的INTR对应的中断线就是PC机保留中断其中的一个。对INTR中断的初始化PC机已经完成,在使用时主要是将其中断屏蔽打开,修改中断向量。 表2-3-2 PC微机系统中的硬件中断 四. 实验说明及流程图 本实验要求实现8259控制器IR0、IR1两路中断。用KK1+和KK2+模拟两个中断源,在IR0对应的服务程序中显示字符“0”,在IR1对应的服务程序中显示字符“1”。 电原理框图如图2-3-4所示。连线图如表2-3-1所示,实验程序参考流程如图2-3-5所示。 +5V124.7k13+5V4.7kINTR+5VIOY0XIORXIOWXA24.7KXD0--XD71110987654172613227D0D1D2D3D4D5D6D7INTINTACSRDWRA0+5V44.7k5B+5V4.7k12A3KK1-74LS006KK1+74LS00IR0IR1IR2IR3IR4IR5IR6IR7SP/ENCAS0CAS1CAS21819202122232425161213154.7K+5V4.7K825991074LS00C8KK2-74LS00D11KK2+ 图2-3-4 8259中断控制器电原理框图 表2-3-1 8259中断控制器连线表 8259端 CS RD WR INT 连接 其他端 IOY0 XIOR XIOW INTR 8259端 A0 IR0 IR1 连接 其他端 XA2 KK1+ KK2+ 图2-3-5 8259中断控制器二参考流程图 五. 参考程序 七、实验报告 1. 实验目的 2.电原理图 3.流程图 4.实验结果 5.心得体会和建议 实验四 8255并口控制器 一. 实验目的 (1) 掌握8255的工作方式及应用编程。 (2) 学习键盘扫描的原理及电路接法。 (3) 掌握利用8255完成按键扫描及显示方法。 二.实验设备 PC微机一台、TD-PIT+ 实验系统一套。 三.实验内容 用8255实现键盘扫描与显示功能,当键盘有键按下时,键值依次显示在六位数码管上。 四. 实验原理 并行接口是以数据的字节为单位与I/O设备或被控制对象之间传递信息。CPU和接口之间的数据传送总是并行的,即可以同时传递8位、16位、32位等。8255可编程外围接口芯片是Intel公司生产的通用并行I/O接口芯片,它具有A、B、C三个并行接口,用+5V单电源供电,能在以下三种方式下工作:方式0--基本输入/出方式、方式1--选通输入/出方式、方式2--双向选通工作方式。8255的内部结构及引脚如图2-4-1所示,8255工作方式控制字和C口按位置位/复位控制字格式如图2-4-2所示。 图2-4-1 8255的内部结构及引脚 (a)工作方式控制字 (b)C口按位置位/复位控制字 图2-4-2 8255控制字格式 四. 实验说明及步骤 实验系统的键盘及数码管显示单元, 键盘是由4行×4列共16个按键组成, X1~X4是行选择信号,Y1~Y4是列扫描信号。6位共阴的7段数码管也接成扫描电路方式,它们共用段位控制信号A~D、Dp,各自独立的公共端是X1~X6,其中X1~X4又是列扫描信号。键盘及数码管显示单元电路结构图如图2-4-3所示。 键盘扫描常用的方法有逐行扫描和行翻转法两种,本实验采用逐行扫描法, 当Y1~Y4有一列为低电平时,若有键按下,则读入的X1~X4应有一位是0,结合行选和列选即可得出是哪一个按键按下。在软件设计上要注意消除按键抖动的处理以及数码管显示的刷新。 6位共阴的7段数码共用段位控制信号A~D、Dp,当X1~X6某位0为时,则该位数码管就根据段位控制信号而点亮,显示相应的字符, 键盘扫描及显示电原理框图如图2-4-4所示, , 键盘扫描及显示连线图如2-4-1所示,参考程序流程如图2-4-5所示 12345678abacdfgbeecfdgdpdpGND12345678abacdfgbeecfdgdpdpGND12345678abacdfgbeecfdgdpdpGND12345678abacdfgbeecfdgdpdpGND12345678abacdfgbeecfdgdpdpGND12345678abacdfgbeecfdgdpdpGND99999XD0--XD7D0D1D2D3D4D5D6D7PB0PB1PB2PB3PB4PB5PB6PB7PA0PA1PA2PA3PA4PA5ABCDEFGDPL1L2L3L4L5L674LS071234567874LS064.7k*8+5V161514131211109XIORXIOWRDWR8255XA2XA3A0A1PC0Y1Y204159D26AE37B123456784.7k*89161514131211109+5VPC18PC2IOY0CSY3CPC3PC4PC5PC6PC7Y4FX1X3X2X4 图2-4-4 键盘扫描及显示实验电原理框图 表2-4-1 键盘扫描及显示连线表 8255端 CS D0-D7 RD WR A0,A1 连接 其他端 IOY0 XD0-XD7 XIOR XIOW XA2,XA3 825端 PA0-PA5 PB0-PB7 PC0-PC3 PC4=PC7 连接 其他端 L1-L6 A-D Y1-Y4 X1-X4 8255口地址的计算方法: XA7 0 0 0 0 初始化 显示MES1, 显示MES0 XA6 0 0 0 0 XA5 0 0 0 0 XA4 0 0 0 0 XA3 0 0 1 1 XA2 0 1 0 1 XA1 x x x x XA0 x x x x 地址 A口地址=00H B口地址=4H C口地址=8H 控制口地址=0cH 调用键盘扫描子程序 调用显示子程序 N 有键按下吗? Y 返回系统 图3-4-5 键盘扫描及显示参考主程序流程图 列值为0,读行值,屏蔽高四位后保存 行值为0,读列值,屏蔽低四位后保存 AL=合并行、列值后取反 Y AL=0? N SI= 键盘扫描码首址, CX=16, DL=0 N DL+1, SI+1 CX-1 N CX=0 ? 返回 图3-4-6 键盘扫描子程序流程图 AL = [SI] ? Y 键值=DL 键值缓冲区移位 Y 保护现场 显存移位,KEY存最后位显存 输出段码 输出位码 延时 N 最后位显示完了吗? Y 恢复现场 返回主程序 图3-4-7 显示子程序流程图 实验步骤如下: 1.首先运行CHECK程序,查看I/O空间始地址。 2.编译链接。 3.参考图3-4-4所示连接实验线路。 4.8255单元自检: (1) 点击工具栏c:\\ (2) C:\\TangDu\\PitPP\\Asm1>DEBUG O 300C 81 ;8255写CW,A口、B口方式0输出;C下口输入, C上口输出 O 3004 3F ; B口输岀“0”的段码 O 3000 1 ; A口输岀1,数码管左第1位显示0 O I O O I Q 3000 0F ; C口列输岀为0 3008 ;当按压“0”键: 读入的值为0E 300C 88 ;8255写CW, A口、B口方式0输出;C上口输入, C下口输出 3000 F0 ; C口输岀行为0 3008 ;当按压“0”键: 读入的值为E0 ;退岀自检 (3) 返回WINDOWS C:\\TangDu\\PitPP\\Asm1>EXIT 5.运行程序,观察数码管显示是否正确。 5 运行程序,观察数码管显示是否正确。 五. 参考程序 六、实验报告 1. 实验目的 2.电原理图 3.流程图 4.实验结果 5.心得体会和建议 实验五 A/D与D/A转换实验 一. 实验目的 (1) 学习掌握模/数,/数模信号转换基本原理。 (2) 掌握ADC0809,0832芯片的使用方法。 二.实验设备 PC微机一台、TD-PIT+ 实验系统一套。 三.实验内容 从键盘输入两位十六进制值,经0832转换成数字量后,送0809的通道0,再经A/D转换后在屏幕上显示此数字量。 四. 实验原理与流程图 ADC0809包括一个8位的逐次逼近型的ADC部分,并提供一个8通道的模拟多路开关和联合寻址逻辑。用它可直接输入8个单端的模拟信号,分时进行A/D转换,在多点巡回检测、过程控制等应用领域中使用非常广泛。ADC0809的主要技术指标为: · 分辨率:8位 · 单电源:+5V · 总的不可调误差:±1LSB · 转换时间:取决于时钟频率 · 模拟输入范围:单极性 0~5V · 时钟频率范围:10KHz~1280KHz ADC0809的外部管脚如图3-5-1所示,地址信号与选中通道的关系如表3-5-1所示。 图3-5-1 ADC0809管脚图 表3-5-1 地址信号与选中通道的关系 𠯥实验采用直接读取方式获得转换结果,它是在0809启动后,用定时时间大于A/D转换时间后, 直接读取转换结果,而不利用EOC信号。 D/A转换器是一种将数字量转换成模拟量的器件,其特点是:接收、保持和转换的数字信息,不存在随温度、时间漂移的问题,其电路抗干扰性较好。大多数的D/A转换器接口设计主要围绕D/A集成芯片的使用及配置响应的外围电路。DAC0832是8位芯片,采用CMOS工艺和R-2RT形电阻解码网络,转换结果为一对差动电流Iout1和Iout2输出。 DAC0832的外部管脚如图3-5-2所示,性能参数如表3-5-2所示。 图3-5-2 DAC0832的引脚图 表3-5-2 DAC0832性能参数 A/D与D/A转换实验电原理框图如图3-5-3所示, A/D与D/A转换实验连线如表3-5-1所示,程序流程图如图3-5-4所示。 XD0--XD7U?DAC0832VrefILEXfer10KA500D0D1D2D3D4D5D6D7CSWR1WR2+5VIOY1XIOWIout1Iout2231LM32410K65B4Rf7LM324OUTADC0809XD0--XD7D0D1D2D3D4D5D6D7CLOCK12IOY0XIORCS45BAIN0IN1IN7EOCADD-AADD-BADD-C+5VCLKXIOWALE3STARTREF(+)6ENABLEREF(-)图3-5-3 A/D与D/A转换实验电原理框图 表3-5-1 A/D与D/A转换实验连线表 0809端 CS D0-D7 RD WR A,B,C IN0 CLK 连接 其他端 IOY0 XD0-XD7 XIOR XIOW GND OUT(0832) CLK 0832端 CS D0-D7 连接 其他端 IOY1 XD0-XD7 11 开始 等待键盘输入 Y 是’2’键吗? 返回DOS Y 输入16进制数据 代码转换后送DAC0832 启动0809 IN0 延时 读取0809 IN0转换值 代码转换后送CRT显示 是’1’键吗? N N 图3-5-4 A/D转换实验参考程序流程图 实验步骤 1.首先运行CHECK程序,查看I/O空间始地址。 2.编译链接。 3.参考图3-5-2所示连接实验线路。 4.0809、0832单元自检: (1) 点击工具栏c:\\ (2) C:\\TangDu\\PitPP\\Asm1>DEBUG O 3040 80 ;0832输岀80H,用示波器测量应为2.5V O 3000 00 ;启动0809的IN0 I 3000 ;读入0809 IN0值 Q (3)返回WINDOWS C:\\TangDu\\PitPP\\Asm1>EXIT 5.运行程序,调节电位器,观察屏幕上显示的数字量输出。 六、实验报告 1. 实验目的和实验内容。 2. 简要的电原理框图。 3 .流程图。 4. 实验结果。 5. 心得体会和建议。 因篇幅问题不能全部显示,请点此查看更多更全内容