【接口技术】实验四:8254定时器与计数器

一. 实验目的

  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

运行结果:

连接好实验箱后,运行程序,屏幕上显示初值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 

运行结果:

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

  • 15
    点赞
  • 124
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Jeron Zhou

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值