微机实验8253

更新时间:2024-01-22 00:42:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

浙江工业大学计算机学院

实 验 报 告

实验名称 定时/计数器(8253)

一、实验内容与要求

1.1 实验内容

1.计数器方式0实验

将计数器0设置为方式0,计数器初值为N(N≤0FH),用手动开关逐个输入单脉冲,编程使计数值在屏幕上显示,并同时用逻辑笔观察OUT0电平变化(当输入N+1个脉冲后OUT0变高电平)。

2.计数器方式3实验

将计数器0、计数器1分别设置为方式3,计数初值设为1000,用逻辑笔观察OUT1输出电平的变化(频率1Hz)。

3. 计数器级联实验

将计数器0设置为方式3(方波),计数器1设置为方式2(分频)。实现计数器0的输出为方波,计数器1的输入是计数器0输出。人机交互界面设计:实现在显示屏幕上提示输入计数器0(方波)的参数和计数器1(分频信号)的参数。

1.2 实验要求

(1) 正确完成硬件电路连线;

(2) 使用8253定时/计数器芯片,除片选引脚,其他信号都已接好,进行有关结构设计和编程 (3) 编写正确汇编程序,完成正确的屏幕以及硬件仪器的显示。

二、实验原理与硬件连线

2.1 实验原理

8253/8254 定时/计数器总体结构如图2.1.1所示,外部引脚定义如图2.1.2所示

1

图2.1.1 定时/计数器总体结构 图2.1.2 外部引脚定义

2.2 硬件连线

1.实验1硬件连线如图2.21所示:

U5 825311CLK0911108280H21+5V1213910CSGATE0OUT0R2+5VR3

图2.2.1 TPC-USB平台计数器方式0实验连线图

2.实验2硬件连线如图2.22所示:

U5 8253OUT1GATE113141510119+5V280HCLK121CSOUT0GATE0CLK0+5V1MHz

2

图2.2.2 TPC-USB平台计数器方式3实验连线

3.实验3硬件连线如图2.23所示:

U5 8253OUT1GATE113141510119+5V280HCLK121CSOUT0GATE0CLK0+5V1MHz

图2.2.3 TPC-USB平台计数器级联实验连线

三、设计思路、步骤和程序流程图

3.1 设计思路

(1)硬件连线:在TPC-USB实验板上,进行三种方式下的8253计数器实验 (2)程序设计:通过对实验要求的理解,编写想关的汇编代码 (3)两者结合显示符合实验要求的结果

3.2 实验步骤

3.3 程序流程

(1)计数器方式0实验,流程如图3.3.1:

3

开始设计数器 0 为工作方式 0送计数器初值读计数器值显示计数值No有键按下吗 ?Yes结束

图3.3.1 TPC-USB平台计数器方式0实验流程图

(2)计数器方式3实验,流程如图3.3.2:

开始设计数器 0 为工作方式 3向计数器 0 送初值 1000(先送低字节,后送高字节)设计数器 1 为工作方式 3向计数器 1 送初值 1000(先送低字节,后送高字节)结束 图3.3.2 TPC-USB平台计数器方式3实验流程图

4

(3)计数器级联方式实验,流程如图3.3.3:

开始显示提示,输入计数器 0 的初值和计数器 1 的初值设置计数器 0 为工作方式 3设置计数器 1 为工作方式 2设置计数器 0 的初值设置计数器 1 的初值询问是否继续Yes是否是‘y’键 ?No结束

图3.3.3 TPC-USB平台计数器级联实验流程图

四、程序清单与执行结果

4.1 程序清单

1.计数器方式0实验

CODE SEGMENT

ASSUME CS:CODE START:

MOV AL,10H ;计数器0,方式0,写两个字节,二进制计数 MOV DX,283H ;把控制寄存器地址放在DX寄存器中 OUT DX,AL ;将AL的值送入DX端口

5

MOV DX,280H ;把计数器0地址放在DX寄存器中 MOV AL,0FH ;将0FH存入AL寄存器 OUT DX,AL ;将此时AL的值送入DX端口 LP1: IN AL,DX ;从DX端口读入8位,放在AL寄存器中 CALL DISP ;调用DISP

PUSH DX ;将DX内容保存到堆栈段

MOV AH,06H ;将06H存入AH,为了下句调用21中断 MOV DL,0FFH ;将0FFH存入DL INT 21H ;调用21中断

POP DX ;将DX的内容推出栈段

JZ LP1 ;如果DX的内容是0,就跳转到LP1 MOV AH,4CH ;将4CH存入AH,为了下句调用21中断 INT 21H ;调用21中断

DISP PROC NEAR ;定义一个名为DISP的子程序 PUSH DX ;把DX的内容保存到堆栈段中

AND AL,0FH ;将AL寄存器的内容与0FH进行“与”运算,再把结果存入AL中 MOV DL,AL ;将AL的值送入DL寄存器 CMP DL,9 ;比较DL中的值与9的大小

JLE NUM ;如果DL的值小于或等于9时,则跳转到NUM ADD DL,7 ;将DL的值与7进行相加后,再送入DL中 NUM: ADD DL,30H ;将DL的值与30H进行相加后,再送入DL中 MOV AH,02H ;将02H存入AH

6

INT 21H ;调用DOS21中断

MOV DL,0DH ;结合“MOV AH,02H”,输出0DH INT 21H ;调用中断指令

MOV DL,0AH ;结合“MOV AH,02H”,输出0AH INT 21H ;调用DOS21中断

POP DX ;将DX的内容推出栈段

RET ;子程序在功能完成后返回调用程序继续执行 DISP ENDP ;子程序结束 CODE ENDS ;代码段结束 END START 2.计数器方式3实验 CODE SEGMENT

ASSUME CS:CODE START:

MOV DX,283H ;把控制寄存器地址放在DX寄存器中

MOV AL,36H ;设置控制字00110110(计数器0,方式3,写两个字节,二进制计数) OUT DX,AL ;将AL的值送入DX端口 MOV AX,1000H ;把1000H这个数赋给AX

MOV DX,280H ;把计数器0地址放在DX寄存器中 OUT DX,AL ;将AL的值送入DX端口 MOV AL,AH ;将AX的高8位存入AL寄存器中

7

OUT DX,AL ;将此时AL的值送入DX端口 MOV DX,283H ;把端口地址放在DX寄存器中

MOV AL,76H ;设置控制字01110110(计数器1,方式3,写两个字节,二进制计数) OUT DX,AL ;将AL的值送入DX端口 MOV AX,1000H ;把1000H赋给AX

MOV DX,281H ;把端口地址放在DX寄存器中 OUT DX,AL ;将AX的低8位送入DX端口 MOV AL,AH ;将AX的高8位存入AL寄存器中 OUT DX,AL ;将AL的值送入DX端口 MOV AH,4CH ;将4CH存入AH INT 21H ;调用DOS21中断 CODE ENDS ;代码段结束 END START ;程序结束

3. 计数器级联实验 data segment

mesg1 db 13,10,'counter0:','$' mesg2 db 13,10,'counter1:','$' mesg3 db 13,10,'continue?(y/n)','$' mesg4 db 13,10,13,10,'thank you!',13,10,'$' errorm db 13,10,'input error!','$' counter0 dw 0 counter1 dw 0

8

data ends code segment assume cs:code,ds:data main proc far start: mov dx,data mov ds,dx do: sub bx,bx sub ax,ax mov counter0,0 mov counter1,0 ;init l1:

mov dx,offset mesg1 mov ah,09h int 21h

rd1 : ;read counter0 mov al,0 ;判断有无输入mov ah,01 ;read a char int 21h cmp al,0 jz rd1

9

cmp al,13 ;if enter je fdone1 jmp tdone1 fdone1: jmp done1 tdone1: cmp al,10 je fdone1

cmp al,'0' ;if input<0 or input>9 error jb error cmp al,'9' ja error push ax mov ax,10 mul counter0

mov counter0,ax ;counter0=counter*10 pop ax sub bx,bx mov bl,al sub bl,30h

add counter0,bx ;counter=counter+input jmp rd1 error:

mov dx,offset errorm

10

mov ah,09h int 21h mov dl,7 mov ah,2 int 21h jmp done3

tr: ;for jmp do mov dl,al mov ah,02h int 21h mov dl,10 int 21h mov dl,13 int 21h jmp do l2:

mov dx,offset mesg2 mov ah,09h int 21h rd2:

11

mov al,0 ;判断有无输入 mov ah,01 ;read counter1 int 21h cmp al,0 jz rd2

cmp al,13 ;if enter je fdone2 cmp al,10 je fdone2 jmp tdone2 fdone2: jmp done2 tdone2: cmp al,10 je fdone2 cmp al,'0' jb error cmp al,'9' ja error push ax mov ax,10 mul counter1

mov counter1,ax ;counter1=counter1*10

12

pop ax sub bx,bx mov bl,al sub bl,30h ;bh=0

add counter1,bx ;counter1=counter1+input jmp rd2 done1: jmp l2 done2:

jmp out8253 ;after enter two counters ; set 8253 and do it done3:

mov dx,offset mesg3 mov ah,09h int 21h

l3: mov ah,07h int 21h cmp al,'y' je tr cmp al,'y'

13

je tr cmp al,'n' je quit cmp al,'n' je quit mov dl,7 mov ah,02h int 21h jmp l3

out8253: ;work code mov al,00110110b mov dx,283h out dx,al mov ax, counter0 mov dx,280h out dx,al mov al,ah out dx,al mov al,01110110b mov dx,283h out dx,al

14

mov ax,counter1 mov dx,281h out dx,al mov al,ah out dx,al mov cx,2801

delay: loop delay jmp done3

quit: ;return to dos mov dx,offset mesg4 mov ah,9 int 21h mov ax,4c00h int 21h main endp code ends end start

4.2 执行结果

(1)计数器方式0实验,执行结果如图4.2.1所示

15

图4.2.1实验1执行结果

(2)计数器方式3实验,执行结果如图4.2.2所示

图4.2.2实验2执行结果

(3)计数器级联实验,执行结果如图4.2.3所示

16

图4.2.3实验3执行结果

五、程序调试说明和实验感想

5.1 调试说明 5.2 实验感想与收获 5.3 实验特色 5.4 展望

17

本文来源:https://www.bwwdw.com/article/99po.html

Top