第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)  提高实验中采用了查询方式,能否采用中断方式实现?编写主程序和中断服务程序。