当前位置:   article > 正文

【接口技术】实验四:8254定时器与计数器_将计数器0设置为方式2,计数器初值为n(n<=15),用手动逐个输入单脉冲,编程使计数值

将计数器0设置为方式2,计数器初值为n(n<=15),用手动逐个输入单脉冲,编程使计数值

一. 实验目的

  1. 掌握8253/8254计数特点和编程方法。
  2. 掌握8253/8254工作方式3的基本工作原理、计数特点和编程方法。

二. 实验内容

8253/8254的初始化命令字如下图所示:
在这里插入图片描述

实验4-1 8254计数器实验

按电路图连接电路,将计数器0设置为方式2,计数器初值为N(N<0FH),用手逐个输入单脉冲,编程使计数值在屏幕上显示,用逻辑笔观察OUTO电平变化,当输入N+1个脉冲后OUTO变为高电平,并将计数过程记录下来。

电路图:
在这里插入图片描述
接线:
在这里插入图片描述
汇编代码:

io8253a equ 283h
io8253b equ 280h

code segment
	assume cs:code

start:
	MOV AL,14H        ;设置8253通道0工作方式2,二进制计数,0001 0100
	MOV DX,io8253a    ;将io8253a对应的283H端口送入DX中
	OUT DX,AL         ;送工作方式控制字

	MOV AL,0FH        ;设置初始值0FH,0000 1111
	MOV DX,io8253b    ;将io8253b对应的280H端口送入DX中
	OUT DX,AL         ;送初始值

lll: 
	IN AL,DX          ;读计数初值
	call disp         ;调用显示子程序
	push dx           ;将dx中数据入栈
	mov ah,06h        ;调用DOS的6号功能,直接读写
	mov dl,0ffh       ;输入,dl为输入字符的ASCII码
	int 21h           ;中断,输出

	pop dx            ;将dx中数据出栈
	jz lll            ;跳转至lll
	mov ah,4ch        ;返回DOS
	int 21h           ;中断,退出

disp PROC NEAR        ;显示子程序disp开始定义

	PUSH DX           ;将dx中数据入栈
	AND AL,0FH        ;将高四位清零
	MOV DL,AL         ;将更新后的AL送入DL中
	CMP DL,9          ;将DL中值与'9'进行比较,判断是否小于'9'的ASCII码
	JLE NUM           ;如果比'9'小,则在'0'-'9',跳转到NUM
	ADD DL,7          ;否则为'A'-'F',需要加37H,A为65H

NUM: 
	ADD DL,30H        ;将DL中的ASCII码值加30H
	MOV AH,02H        ;调用DOS的2号功能,显示
	INT 21H           ;中断,输出

	mov dl,0dh        ;加回车符
	int 21h           ;中断,输出
	mov dl,0ah        ;加换行符
	int 21h           ;中断,输出
	pop dx            ;将dx中数据出栈
	ret               ;子程序返回

disp endp             ;显示子程序disp结束定义

code ends
end start
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53

运行结果:

连接好实验箱后,运行程序,屏幕上显示初值F,持续按下按钮,屏幕上的示数依次从F递减至1,效果如下所示:
在这里插入图片描述
在这里插入图片描述

实验4-2 8254定时器实验

按照电路图连接电路,将计数器0、计数器1分别设置工作方式,CLK0连接时钟1MHz,由T01000分频后变为1000Hz,再由T1进行1000分频后得到1Hz。

电路图:
在这里插入图片描述
接线:
在这里插入图片描述
汇编代码:

io8253a equ 280h
io8253b equ 281h
io8253c equ 283h

code segment
    assume cs:code

start:
     mov dx,io8253c    ;将io8253c对应的283H端口送入DX中
     mov AL,37h        ;设置通道0的工作方式30011 0111
     out dx,al         ;8253写控制字
     
     mov ax,1000h      ;写入初始值1000h(二进制计数)
     mov dx,io8253a    ;将io8253a对应的283H端口送入DX中
     out dx,al         ;写入低字节
     mov al,ah         ;
     out dx,al         ;写入高字节
     
     mov dx,io8253c    ;将io8253c对应的283H端口送入DX中
     mov al,76h        ;设置通道1为工作方式30111 0110
     out dx,al         ;8253写控制字

     mov ax,1000d      ;写入初始值1000d(BCD计数)
     mov dx,io8253b    ;将io8253b对应的283H端口送入DX中
     out dx,al         ;写入低字节
     mov al,ah         ;
     out dx,al         ;写入高字节

     mov ah,4ch        ;程序退出
     int 21h           ;中断,退出

code ends
end start 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33

运行结果:

连接好实验箱后,运行程序,屏幕上显示运行成功,观察实验箱逻辑笔的LED灯变化,发现每隔1秒黄色LED计数灯闪一次,对应着1Hz的频率。旁边的红色LED显示累积计数情况,其数值在00、01、10、11四种情况之间不断循环,效果如下所示:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/725194
推荐阅读
相关标签
  

闽ICP备14008679号