第3章 硬 件 实 验 3.1简单并行接口 1. 实验目的 掌握简单并行接口的工作原理及使用方法。 2. 基础实验 (1) 实验内容。 ① 按图3.1所示的简单并行输出接口电路连接线路,74LS273为八D触发器,8个D输入端分别接数据总线D7~D0,8个Q输出端接LED显示电路L7~L0。 编程从键盘输入一个字符或数字,将其ASCII码通过输出接口输出,根据8个发光二极管发光情况验证正确性。 图3.1简单并行输出接口电路 ② 按图3.2所示的简单并行输入接口电路连接线路,74LS244为八输入缓冲器,8个数据输入端分别接逻辑电平开关K7~K0,8个数据输出端分别接CPU数据总线D7~D0。 用逻辑电平开关预置某个字母的ASCII码,编程输入这个ASCII码,并将其对应字母在屏幕上显示出来。 (2) 编程提示。 ① 开关K7~K0向上拨到“1”位置时,开关断开,输出高电平; 向下拨到“0”位置时,开关接通,输出低电平。 ② LED显示电路L7~L0,当输入信号为“1”时发光,为“0”时熄灭。 图3.2简单并行输入接口电路 ③ 设并行输出接口的地址为2A8H,并行输入接口的地址为2A0H,键盘输入字符的ASCII码存放在AL中,通过上述并行接口电路输出数据需要两条指令: MOVDX,2A8H OUTDX,AL 通过上述并行接口输入数据需要两条指令: MOVDX,2A0H INAL,DX (3) 参考流程。 参考流程如图3.3和图3.4所示。 图3.3简单并行输出接口流程 图3.4简单并行输入接口流程 (4) 参考程序。 ① 简单并行输出接口参考程序: CODESEGMENT ASSUMECS:CODE START: MOVAH,2 MOVDL,0DH;回车符 INT21H MOV AH,1 ;等待键盘输入 INT21H CMP AL,27;判断是否为Esc键 JE EXIT ;若是则退出 MOV DX,2A8H;若不是,则从2A8H输出其ASCII码 OUT DX,AL JMP START EXIT: MOVAH,4CH;返回DOS INT 21H CODE ENDS ENDSTART ② 简单并行输入接口参考程序: CODESEGMENT ASSUMECS:CODE START: MOVDX,2A0H;从2A0H输入一数据 INAL,DX MOVDL,AL ;将所读数据保存在DL中 MOVAH,02 INT 21H MOVDL,0DH ;显示回车符 INT 21H MOVDL,0AH ;显示换行符 INT 21H MOVAH,06 ;是否有键按下 MOVDL,0FFH INT 21H JNZ EXIT JESTART;若无,则转START EXIT: MOVAH,4CH ;返回DOS INT 21H CODE ENDS ENDSTART 3. 提高实验 (1) 实验内容。 如图3.5所示,利用电平开关K7~K0预置数值,通过74LS244读入该开关值,并通过74LS273将此数值输出到发光二极管L7~L0,控制其发光。 图3.5简单并行接口提高实验电路 本实验要求开关闭合,对应的发光二极管点亮,通过发光二极管状态验证输入和输出的正确性。 (2) 编程提示。 先通过IN指令读入开关值,再通过OUT指令输出控制发光二极管。 (3) 参考流程。 参考流程如图3.6所示。 图3.6简单并行接口提高实验参考流程 4. 思考题 (1) 上述实验采用何种输入输出方式?能否用查询方式实现? (2) 如果要求实现开关断开指示灯发亮,开关闭合指示灯熄灭,该如何处理? (3) 图3.5中如果不使用74LS32芯片,能否实现输入输出功能? 3.2可编程并行接口8255A 1. 实验目的 掌握可编程并行接口8255A的工作原理及使用方法。 2. 基础实验 (1) 实验内容。 ① 基本输入输出实验。编写程序,使8255A的A端口为输出,C端口为输入,完成拨动开关到数据灯的数据传输。要求只要开关拨动,数据灯的显示就发生相应改变。 ② 流水灯显示实验。编写程序,使8255A的A端口和C端口均为输出,数据灯L7~L0由左向右,每次仅亮一个灯,循环显示; L15~L8与L7~L0方向相反,由右向左,每次仅点亮一个灯,循环显示。 (2) 编程提示。 ① 基本输入输出实验,电路示意如图3.7所示,8255A的C端口接逻辑电平开关K7~K0,A端口接发光二极管L7~L0。编程从8255A的C端口读入开关量,再从A端口输出,控制发光二极管发光。通过发光二极管和开关的状态验证输入和输出的正确性。 ② 8255A设为方式0,A端口为输出方式,C端口为输入方式; A端口地址设为288H,C端口地址设为28AH,控制口地址为28BH。 ③ 流水灯显示实验,用户自己设计实验接线图,并编写程序。8255A设为方式0,A端口、C端口均为输出方式,A端口控制L7~L0,C端口控制L15~L8。 (3) 参考流程。 基本输入输出实验参考流程如图3.8所示。 图3.7基本输入输出电路示意 图3.8基本输入输出实验参考流程 (4) 参考程序(基本输入输出实验)。 CODESEGMENT ASSUMECS:CODE START: MOVDX,28BH;设8255A的方式为C端口输入,A端口输出 MOV AL,8BH OUTDX,AL INOUT: MOVDX,28AH ;从C端口输入一数据 INAL,DX MOV DX,288H;从A端口输出刚才自C端口输入的数据 OUTDX,AL MOV DL,0FFH;判断是否有键按下 MOV AH,06H INT21H JZ INOUT ;若无,则继续自C端口输入,A端口输出 MOVAH,4CH;否则返回DOS INT 21H CODEENDS ENDSTART 3. 提高实验 (1) 实验内容。 如图3.9所示,L7、L6、L5作为南北路口的交通灯与PC7、PC6、PC5相连,L2、L1、L0作为东西路口的交通灯与PC2、PC1、PC0相连,编程实现6个指示灯按交通灯变化规律亮与灭。 (2) 编程提示。 设置8255A的C端口为输出方式,十字路口交通灯的变化规律要求如下。 ① 南北路口的绿灯、东西路口的红灯同时亮30s左右; ② 南北路口的黄灯闪烁若干次,同时东西路口的红灯继续亮; ③ 南北路口的红灯、东西路口的绿灯同时亮30s左右; ④ 南北路口的红灯继续亮,同时东西路口的黄灯亮闪烁若干次; ⑤ 转①。 (3) 参考流程。 参考流程如图3.10所示。 图3.9交通灯电路 图3.10交通灯参考流程 4. 思考题 (1) 基础实验中,把流水灯改为指示灯间隔发亮,如何编程? (2) 提高实验中,通过C端口输出和通过A端口输出有何区别?哪种方法更优? 3.3可编程计数器/定时器 1. 实验目的 掌握8253的基本工作原理和编程方法。 2. 基础实验 (1) 实验内容。 ① 实现一个计数器。按图3.11所示连接电路,将计数器0设置为方式0,计数器初值为N(N≤0FH),手动逐个输入单脉冲模拟计数。每按一次开关,从两个插座上分别输出一个正脉冲和负脉冲。编程在屏幕上显示计数值,并同时用逻辑笔观察OUT0的电平变化(当输入N+1个脉冲后OUT0变为低电平)。 图3.11计数器电路 ② 实现一个定时器。按图3.12所示连接电路,将计数器0、计数器1设置为方式3,计数初值设为1000,计数频率为1MHz,OUT1输出1s的方波。用逻辑笔观察OUT1输出电平的变化。 图3.12定时器电路 (2) 编程提示。 8253控制寄存器地址: 283H。 计数器0地址:280H。 计数器1地址:281H。 计数器实验中,通道0设为方式0,读取计数值之前需向计数器发锁存命令。定时器实验中,采用通道0和通道1相级联的方法。 (3) 参考流程。 计数器参考流程如图3.13所示,定时器参考流程如图3.14所示。 图3.13计数器参考流程 图3.14定时器参考流程 (4) 参考程序。 ① 计数器参考程序如下。 CODESEGMENT ASSUMECS: CODE START: MOVAL,14H;设置8253通道0为工作方式2,二进制计数 MOV DX,283H OUT DX,AL MOVDX,280H ;送计数初值为0FH MOV AL,0FH OUT DX,AL LLL: INAL,DX ;读计数初值 CALLDISP;调用显示子程序 PUSHDX MOVAH,06H MOVDL,0FFH INT 21H POP DX JZ LLL MOVAH,4CH ;返回DOS INT 21H DISPPROC NEAR ;显示子程序 PUSH DX ANDAL,0FH;首先取低4位 MOV DL,AL CMPDL,9;判断是否<=9 JLE NUM;若是则为'0'~'9',ASCII码加30H ADDDL,7;否则为'A'~'F',ASCII码加37H NUM: ADDDL,30H MOVAH,02H ;显示字符 INT 21H MOV DL,0DH ;回车 INT21H MOV DL,0AH ;换行 INT21H POPDX RET;子程序返回 DISPENDP CODEENDS END START ② 定时器参考程序如下。 CODESEGMENT ASSUME CS: CODE START: MOVDX,283H;向8253写控制字 MOVAL,36H;设8253计数器0为工作方式3 OUT DX,AL MOVAX,1000 ;写入计数初值1000 MOVDX,280H OUT DX,AL;先写入低字节 MOVAL,AH OUTDX,AL ;后写入高字节 MOVDX,283H MOV AL,76H;设8253计数器1为工作方式2 OUT DX,AL MOV AX,1000 ;写入计数初值1000 MOV DX,281H OUT DX,AL ;先写低字节 MOV AL,AH OUT DX,AL ;后写高字节 MOVAH,4CH;返回DOS INT 21H CODE ENDS ENDSTART 3. 提高实验 (1) 实验内容。 利用微机控制直流继电器。实验电路如图3.15所示,CLK0接1MHz,GATE0、GATE1接+5V,OUT0接CLK1,OUT1接PA0,PC0接继电器驱动电路的开关输入端IK,继电器输出插头接实验盒上的继电器插头。编程使用8253定时,让继电器周而复始地闭合5s,指示灯亮; 断开5s,指示灯灭。 图3.15定时器提高实验电路 (2) 编程提示。 将8253计数器0设置为方式3、计数器1设置为方式0,两者串联使用。CLK0接1MHz时钟,设置两个计数器的初值(乘积为5 000 000),启动计数器工作后,经过5s OUT1输出高电平。通过8255A的PA0查询OUT1的输出电平,用PC0输出控制继电器动作。继电器开关量输入“1”时,继电器常开触点闭合,电路接通,指示灯亮; 输入“0”时继电器触点断开,指示灯熄灭。 (3) 参考流程。 参考流程如图3.16所示。 图3.16计数器提高实验参考流程 4. 思考题 (1) 基础实验中的计数器实验,如何使计数器重新开始计数? (2) 基础实验中的定时器实验,计数器0、1能否设置为方式2?与方式3相比,OUT1输出电平有何变化? (3) 提高实验中采用了查询方式,能否采用中断方式实现?编写主程序和中断服务程序。