实验五8253 计数器定时器

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

东南大学
《微机实验及课程设计》
实验报告
实验五 8253 计数器/定时器
姓名:学号:
专业:测控技术与仪器实验室: 516
实验时间: 2014年05月29日报告时间:2014年05月30日评定成绩:审阅教师:
一、实验目的
1)掌握计数器/定时器8253的基本工作原理和编程应用方法;
2)了解掌握8253的计数器/定时器典型应用方法
二、实验内容(必做)
5-1 将计数器0设置为方式0,计数初值为N(小于等于0FH),用手动的方式逐个输入单脉冲,编程使计数值在屏幕上显示,并同时用逻辑笔观察OUT0电平变化。

(参考程序p63)
5-2 将计数器0、1分别设置在方式3,计数初值设为1000,用逻辑笔观察OUT0电平的变化。

(参考程序p64)
实验内容(必做一题,选作一题)
5-3 在实验2的基础上,利用输出的1Hz的方波接入计数器2,设置计数器2初值为4,根据键盘输入的数字(0~5)来设置计数器2的工作方式,并将GATE2信号进行相应的连接(接+5V或接单脉冲)用逻辑笔观察OUT2电平的变化。

要求可以响应键盘的连续变化,直到按ESC键退出。

5-4 在实验2的基础上,将8253计数器1的工作方式改为方式0,输出OUT1接入8255的PA0,PC0连接任意一个发光二级管,8255A的CS接288H。

编程使得发光二极管亮5秒,灭2秒,一直循环直到按任意键退出。

(提示:PA0查询OUT1输出电平,PC0输出开关量控制二极管发光)
三、实验原理
1、实验接线图(1)
8253的CS接280H
8253的GATE0接+5V
8253的CLK0接单脉冲1或2
8253的OUT0接逻辑笔(高电平LED12亮,低电平LED13亮)
流程图:
源代码:
ioport equ ec00H-0280H
io8253a equ ioport+283H
io8253b equ ioport+280H
stacks
segment stack
db 100 dup (?)
stacks ends
code segment
assume cs:code,ss:stacks
main proc far
start: mov ax,stacks
mov ss,ax
mov al,14h ;设置8253通道0为工作方式2,二进制计数
mov dx,io8253a
out dx,al
mov dx,io8253b ;送计数初值为0FH
mov al,0fh
out dx,al
ZZZ:in al,dx ; 读计数初值
call disp ; 调显示子程序
push dx
mov ah,06h
mov dl,0ffh
int 21h
pop dx
jz ZZZ
mov ah,4ch ; 退出
int 21h
main endp
disp proc near ;显示子程序
push dx
and al,0fh ; 首先取低四位???
mov dl,al
cmp dl,9 ;判断是否<=9
jle num ;若是则为'0'-'9',ASCII码加30H add dl,7 ;否则为'A'-'F',ASCII码加37H num:add dl,30h
mov ah,02h ;显示
int 21h
mov dl,0dh ;加回车符
int 21h
mov dl,0ah ;加换行符
int 21h
pop dx
ret ;子程序返回
disp endp
code ends
end start
2、实验接线图(2)
8253的CS接280H
8253的GATE0和GATE1接+5V 8253的CLK0接1MHz
8253的OUT0接CLK1
8253的OUT1接逻辑笔
流程图:
源代码:
ioport equ 0ec00h-0280h io8253a equ ioport+280h ;0地址io8253b equ ioport+281h ;1地址io8253c equ ioport+283h ;控制stacks segment stack
db 100 dup (?)
stacks ends
code segment
assume cs:code,ss:stacks main proc far
start: mov ax,stacks
mov ss,ax
mov dx,io8253c ;向8253写控制字
mov al,36h ;使0通道为工作方式3,0011 0110
out dx,al
mov ax,1000 ;写入循环计数初值1000,注意是AX
mov dx,io8253a
out dx,al ;先写入低字节
mov al,ah
out dx,al ;后写入高字节
mov dx,io8253c
mov al,76h ;设8253通道1工作方式3,0111 0110 out dx,al
mov ax,1000 ;写入循环计数初值1000
mov dx,io8253b
out dx,al ;先写低字节
mov al,ah
out dx,al ;后写高字节
mov ah,4ch ;程序退出
int 21h
main endp
3
源代码:
ioport equ 0ec00h-280h
io8253a equ ioport+280h ;0
io8253b equ ioport+281h ;1
io8253c equ ioport+282h ;2
io8253k equ ioport+283h ;control
data segment
string1 db 0dh,0ah,'choose the io8253cworking way(0~5)',0dh,0ah,'$' data ends
stacks segment stack
db 100 dup(0)
stacks ends
code segment
assume cs:code,ss:stacks,ds:data
main proc far
start:mov ax,stacks
mov ss,ax
mov ax,data
mov ds,ax
mov dx,io8253k
mov al,36h ;使0通道为工作方式3
out dx,al
mov ax,1000
mov dx,io8253a
out dx,al
mov al,ah
out dx,al
mov dx,io8253k
mov al,76h ;设通道1工作方式3
out dx,al
mov ax,1000
mov dx,io8253b
out dx,al
mov al,ah
out dx,al ;在实验2基础上
loop1:mov dx,offset string1
mov ah,09h
int 21h ;提示输入
mov ah,01 ;等待键盘输入并回显,存入AL
int 21h
cmp al,1bh
je exit ;判断是否ESC
cmp al,30h
jb loop1
cmp al,35h
ja loop1
sub al,30h
rol al,1 ;---- ***-
add al,90h
mov dx,io8253k
out dx,al
mov dx,io8253c
mov al,0004
out dx,al
jmp loop1
exit: mov ah,4ch
int 21h
main endp
code ends
end start
四、实验中遇到的问题及解决方案
1、在实验中遇到同上次一样的问题,硬件实验现象都要先经过一次演示实验才会出现正确结果;
2、在实验二中,程序退出后计数器并不会停止计数,所以在运行完演示实验后逻辑笔现象一直延续,在运行自己的代码时没有明显的停滞,所以刚开始不确定自己程序是否正确;
3、在实验初始,实验现象与理论不符,后来发现,实验代码中未给计数器2赋初值;。

相关文档
最新文档