欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

汇编语言--8254定时/计数器实验

程序员文章站 2022-03-15 15:16:07
...

实验题目

计数应用实验
编写程序,应用8254的计数功能,使用单次脉冲模拟计数,使每当按下‘KK1+’5次后,产生一次计数中断,并在屏幕上显示一个字符‘M’;

认识8254

8254是Intel公司生产的可编程间隔定时器。是8253的改进型,比8253具有更优良的性能。8254具有以下基本功能:

  • 有三个16位计数器
  • 每个计数器可按二进制或十进制(BCD)计数
  • 每个计数器可编程工作于6种不同的工作方式
  • 8254每个计数器允许的最高计数频率为10MHz(8253为2MHz)
  • 8254有读回命令(8253,没有),除了可以读出当前计数单元的内容外,还可以读出状态寄存器的内容
  • 计数脉冲可以是有规律的时钟信号,也可以是随机信号。

8254的内部结构框图和引脚图
由与CPU的接口,内部控制电路和三个计数器组成
汇编语言--8254定时/计数器实验

8254的工作方式如下

  • 方式0:计数到0结束输出正跃变信号方式
  • 方式1:硬件可重触发单稳方式
  • 方式2:频率发生器方式
  • 方式3:方波发生器
  • 方式4:软件触发选通方式
  • 方式5:硬件触发选通方式

8254的控制字

  1. 方式控制字:设置计数器的工作方式
  2. 读回控制字:设置读回命令

注意:两个控制字共用一个地址,由标示位来区分
方式控制字格式
汇编语言--8254定时/计数器实验
读回控制字格式
汇编语言--8254定时/计数器实验

实验电路连接

汇编语言--8254定时/计数器实验

实验流程图

汇编语言--8254定时/计数器实验

实验代码


;8254的编址空间起点是0600H
IOYO    EQU 0600H
A8254   EQU IOYO+00H*2
B8254   EQU IOYO+01H*2
C8254   EQU IOYO+02H*2
CON8254 EQU IOYO+03H*2

SSTACK SEGMENT STACK
	   DW 32 DUP(?)
SSTACK ENDS

CODE   SEGMENT
       ASSUME CS:CODE, SS:SSTACK
START: PUSH DS
	   
	   MOV AX,0000H
	   MOV DS,AX
	   
	   MOV AX,OFFSET IRQ7
	   MOV SI,003CH
	   MOV [SI],AX
	   MOV AX,CS
	   MOV SI,003EH
	   MOV [SI],AX
	   
	   CLI
	   POP DS
	   ;初始化主片8259
	   MOV AL,11H				;初始化ICW1
	   OUT 20H,AL
	   MOV AL,08H				;初始化ICW2
	   OUT 21H,AL
	   MOV AL,04H				;初始化ICW3
	   OUT 21H,AL
	   MOV AL,01H				;初始化ICW4
	   OUT 21H,AL
	   
	   MOV AL,6FH				;初始化OCW1
	   OUT 21H,AL
	   ;初始化8254
	   MOV DX,CON8254
	   MOV AL,10H;方式控制字 00010000
	   OUT DX,AL
	   
	   MOV DX,A8254
	   MOV AL,04H;把计数初值4送入计数器A,每5次,送4
	   OUT DX,AL
	   STI
AA1:   JMP AA1

IRQ7: 
      ;执行一次中断后,原来8254A计数器的初值为0,为了重复该中断,需要再输入一次计数初值
       MOV DX,A8254
	   MOV AL,04H
	   OUT DX,AL
	   
	   MOV AX,014DH ;字符M
	   INT 10H
	   MOV AX,0120H ; 空格
	   INT 10H
	   
	   ;中断结束命令 往地址20H送入20H
	   MOV AL,20H
	   OUT 20H,AL
	   
	   IRET   ;返回中断
CODE   ENDS
       END START

补充
汇编语言--8254定时/计数器实验