zl程序教程

您现在的位置是:首页 >  其他

当前栏目

汇编与接口课程实验4——8253A不同工作方式

接口 方式 工作 不同 实验 课程 汇编
2023-09-11 14:22:52 时间

实验目的

学生在课堂上仅仅通过了理论的学习,还需要对所学知识有个直观而生动的了解,这个实验可以使学生更深刻的理解8253A定时/计数器的各种工作方式的特点;通过观察实验波形,可直观地了解这几种工作方式的异同。

实验内容

编写程序分别显示2、3工作方式下的波形。要求2方式的输出频率为1000Hz,3方式的输出频率为2000Hz。本实验使用8253A的定时/计数器0,GATE0通过K1接到+5V或地,CLK0接1MHZ的时钟脉冲,OUT2接示波器观测输出波形(连接线见图1-1示)。
采用定时器0和定时器1的级联方式,要求定时器0采用2方式,定时器1采用3方式,观测定时器0和定时器1输出波形(时间常数自定,连接线见图1-2示)。

实验线路连接

在这里插入图片描述

图1-1 实验连线图
在这里插入图片描述

图1-2 实验连线图

接线图如下:
2,3方式线路图:
在这里插入图片描述

2,3级联线路图:
在这里插入图片描述

实验编程提示

编写3个实验程序(分别是2,3方式,级联方式)并分别执行。作为第1个接口技术的实验,要注意在实验平台上程序的编写格式,程序的编译、下载和调试过程。
注意:首先调试2、3方式,最后调试级联方式。
实验代码如下:

2方式:

code segment
  start:mov dx,283h
      mov al,00110100b	;0号计数器,读写两个字节,2号方式,二进制计数
      out dx,al		    ;写入控制命令字寄存器
      mov dx,280h		;0号计数器数据口
      mov al,e8h		    ;设置计数初值的低字节
      out dx,al		    ;先送低字节到0号计数器
      mov al,03h		    ;设置计数初值的高字节
      out dx,al		    ;再送高字节到0号计数器
      mov ah,4ch		    ;程序结束
      int 21h
code ends
     end start

3方式:

code segment
  start:mov dx,283h
      mov al,00110110b	;0号计数器,读写两个字节,3号方式,二进制计数
      out dx,al		    ;写入控制命令字寄存器
      mov dx,280h		;0号计数器数据口
      mov al,f4h		    ;设置计数初值的低字节
      out dx,al		    ;先送低字节到0号计数器
      mov al,01h		    ;设置计数初值的高字节
      out dx,al		    ;再送高字节到0号计数器
      mov ah,4ch		    ;程序结束
      int 21h
code ends
     end start

2,3级联:

;2,3方式级联
data segment
data ends
code segment
assume cs:code,ds:data
start: mov ax,data
mov ds,ax		;开始程序,没啥实际意义
mov dx,283H	;命令口
mov al,00110100B	;0计数器,读写两个字节,使用方式2,时间常数使用二进制计数
out dx,al		;写入控制命令字寄存器
mov ax,0100H	;设置计数初值,因为是两个字节,所以分两次输入,中间需要将AH赋值给到AL
mov dx,280H	;0号计数器数据口
out dx,al		;先送低字节到0号计数器
mov al,ah		;取高字节送AL
out dx,al		;再送高字节到0号计数器
mov dx,283h	;命令口
mov al,76H	;01110110,即使用1号计数器,同样读写两个字节,使用方式3,二进制计数
out dx,al		;写入新的控制命令字寄存器
mov ax,0010H	;设置计数初值
mov dx,281h	;1号计数器数据口
out dx,al		;先送低字节到1号计数器
mov al,ah		;取高字节送AL
out dx,al		;再送高字节到1号计数器
code ends		;程序结束
end start

实验步骤

根据原理图正确连接实验线路(需要连接红线)。
正确理解实验原理。
方式2:当写入计数初值后,启动计数器开始减1计数,直到减到1时,OUT输出一个宽度为时钟CLK周期的低电平,接着又变回高电平,且计数初值自动重装,开始下一轮计数,如此往复,不停地输出连续的负脉冲。
方式3:该方式产生占空比为1:1(N为偶数)或接近1:1(N为奇数)的连续方波。方波的周期=计数初值×时钟脉冲的周期。改变计数初值就可以改变输出方波的频率。
方式2,3级联:以方式2所产生的脉冲作为方式3的CLK时钟,最后的表现形式为方式3的表现形式,频率为方式2,3设定的频率相乘。
编写实验程序,并上机调试,观察实验结果。

方式2:由于实验要求2方式输出频率为1000Hz,因此根据公式1MHz/1000= N,得到计数器的初值为1000,转化为16进制也就是3e8H。那么示波器的显示应该是周期为1000us,并且低电平的时间为1/N-1也就是1/999,如图所示结果正确。
下图为方式2的波形:
在这里插入图片描述

将波形放大之后:
在这里插入图片描述

方式3:由于实验要求3方式的输出频率为2000Hz,因此根据公式1MHz/2000=N,得到计数器初值为500,转化为16进制也就是1f4H。那么示波器的显示应该是周期为500us的方波,高电平与低电平比为1:1。波形如下图所示,结果正确。
在这里插入图片描述

方式2,3级联:这里给2方式的计数器初值0100H,给3方式的计数器初值0010H,这样给3方式计数器的输入频率就为2方式计数器的输出频率,然后3方式计数器的输出周期为:
在这里插入图片描述

如下图所示,结果正确。
在这里插入图片描述

思考题

用示波器观测方式0-5,它们所展示的波形如何。

在进行这四种方式观察的时候,代码和之前使用的方式2,3的代码类似,只对初始化命令中有关方式的命令字进行修改。

方式0:当写入计数初值后,启动计数器开始计数,OUT信号变为低电平,并维持低电平至减法计数器的内容减到0时,停止工作,OUT信号变为高电平,并维持高电平到再次写入新的计数值
在这里插入图片描述

方式1:方式1是需要硬启动,需要给GATE的上升沿,所以先输入CLK信号,然后给GATE一个上升沿,使其开始计时,低电平的时间为1000us,因为初值为1000,所以输出正确。
在这里插入图片描述

方式4:也是同样通过计数的方式,是软启动,GATE接高电平,然后送初值1000,它低电平的时间应该为时钟的倒数,所以应该为1/1Mhz,为1us,如下图所示,输出正确。
在这里插入图片描述

方式5:需要一个GATE的上升沿将其启动触发,是硬启动,其低电平的周期仍然为1/1MHz,所以为1us。
在这里插入图片描述