《2022年实验五计数器定时器借鉴 .pdf》由会员分享,可在线阅读,更多相关《2022年实验五计数器定时器借鉴 .pdf(8页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、东南大学微机实验及课程设计实验报告实验五 8253 计数器/定时器姓名:学号:专业:测控技术与仪器实 验 室:516 实验时间:2014 年 05 月 29 日报告时间:2014 年 05 月 30 日评定成绩:审阅教师:名师资料总结-精品资料欢迎下载-名师精心整理-第 1 页,共 8 页 -一、实验目的1)掌握计数器/定时器 8253 的基本工作原理和编程应用方法;2)了解掌握 8253 的计数器/定时器典型应用方法二、实验内容(必做)5-1 将计数器 0 设置为方式 0,计数初值为 N(小于等于 0FH),用手动的方式逐个输入单脉冲,编程使计数值在屏幕上显示,并同时用逻辑笔观察OUT0电平
2、变化。(参考程序 p63)5-2 将计数器 0、1 分别设置在方式 3,计数初值设为 1000,用逻辑笔观察 OUT0电平的变化。(参考程序 p64)实验内容(必做一题,选作一题)5-3 在实验 2 的基础上,利用输出的1Hz的方波接入计数器2,设置计数器 2初值为 4,根据键盘输入的数字(05)来设置计数器 2 的工作方式,并将 GATE2信号进行相应的连接(接5V 或接单脉冲)用逻辑笔观察OUT2电平的变化。要求可以响应键盘的连续变化,直到按ESC键退出。5-4 在实验 2 的基础上,将 8253 计数器 1 的工作方式改为方式0,输出 OUT1接入 8255 的 PA0,PC0连接任意一
3、个发光二级管,8255A的 CS接 288H。编程使得发光二极管亮5 秒,灭 2 秒,一直循环直到按任意键退出。(提示:PA0查询 OUT1 输出电平,PC0输出开关量控制二极管发光)三、实验原理1、实验接线图(1)8253的 CS接 280H 8253的 GATE0 接5V 8253的 CLK0接单脉冲 1 或 2 8253的 OUT0 接逻辑笔(高电平LED12亮,低电平 LED13亮)名师资料总结-精品资料欢迎下载-名师精心整理-第 2 页,共 8 页 -流程图:N Y 源代码:ioport equ ec00H-0280H io8253a equ ioport+283H io8253b
4、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,二进制计数开始设置计数器0 为工作方式0(填入控制字)送计数初值显示计数值结束读计数器值有键按下?名师资料总结-精品资料欢迎下载-名师精心整理-第 3 页,共 8 页 -mov dx,io8253a out dx,al mov dx,io8253
5、b ;送计数初值为 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:a
6、dd 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)名师资料总结-精品资料欢迎下载-名师精心整理-第 4 页,共 8 页 -8253的 CS接 280H 8253的 GATE0 和 GATE1 接5V 8253的 CLK0接 1MHz 8253的 OUT0 接 CLK1 8253的 OUT1 接逻辑笔流程图:源代码:ioport equ 0ec00h-0280h io8
7、253a 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 开始设置计数器0 为工作方式3 向计数器 0 送初值 1000 先送低字节再送高字节设置计数器1 为工作方式3 向计数器 1 送初值 1000 先送低字节再送高字节结束名师资料总结-精品资料
8、欢迎下载-名师精心整理-第 5 页,共 8 页 -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
9、out dx,al ;先写低字节 mov al,ah out dx,al ;后写高字节 mov ah,4ch ;程序退出int 21h main endp code ends end start 3、选作流程图:Y N N Y 开始提示输入设置计数器2 的工作方式根据输入数字设置控制字,设置计数器2 工作方式输入是否是esc 键?输入是否为05?结束名师资料总结-精品资料欢迎下载-名师精心整理-第 6 页,共 8 页 -源代码:ioport equ 0ec00h-280h io8253a equ ioport+280h ;0 io8253b equ ioport+281h ;1 io8253c
10、 equ ioport+282h ;2 io8253k equ ioport+283h ;control data segment string1 db 0dh,0ah,choose the io8253cworking way(05),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
11、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
12、int 21h cmp al,1bh je exit ;判断是否 ESC cmp al,30h jb loop1 名师资料总结-精品资料欢迎下载-名师精心整理-第 7 页,共 8 页 -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 赋初值;名师资料总结-精品资料欢迎下载-名师精心整理-第 8 页,共 8 页 -