博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
微机接口实验四:可编程定时器/计数器8254
阅读量:2084 次
发布时间:2019-04-29

本文共 2609 字,大约阅读时间需要 8 分钟。

一、实验目的

掌握8254的基本工作原理和编程方法,用示波器观察不同方式下的波形。(说明:没有示波器,所以用LED灯的闪烁来观察)

二、实验原理和内容

在这里插入图片描述

三、编程提示

在这里插入图片描述

四、电路接线图

实验1:

在这里插入图片描述
实验2:
在这里插入图片描述

五、程序设计流程图

实验1:

在这里插入图片描述
实验2:
在这里插入图片描述

六、一些说明

  1. 实验1中,每次读取后简单判断一下是不是跟上次一样,因为可能本次读取时计数器还没有减1。
  2. 实验2中,由于要输出两个不同的频率方波,并且要使LED灯来得及闪烁,所以需要用到三个计数器。

七、程序源代码

实验1:

stack segment stack    db 200 dup(0)stack endsdata segment      ZERO equ 280h      ONE equ 281h      CTRL equ 283hdata endscode segment      assume cs:code,ds:data,ss:stack      newline MACRO   ;回车换行        push ax        push dx        mov ah,02h        mov dl,0ah        int 21h        mov ah,02h        mov dl,0dh        int 21h        pop dx        pop ax      ENDM      dispchar MACRO x    ;输出单个字符并换行        push dx        push ax        newline        mov ah,02h        mov dl,x        int 21h        pop ax        pop dx      ENDM      put_data MACRO x, y  ;x为端口,y为数据        push ax        push dx        mov al, y        mov dx, x        out dx, al        pop dx        pop ax      ENDM   main:mov ax,data        mov ds,ax        mov ax, stack        mov ss, ax        put_data CTRL, 00010000b  ;计数器0工作在方式0下,只读写低8位,二进制计数码        put_data ZERO, 0fh   ;写入计数器初值15,开始计数  again:mov dx, ZERO        in al, dx   ;读取通道0数据        and al, 0fh;  读取低四位        mov dl, al        cmp bl, dl        jz again   ;本次读出的数值与上次一样,说明还没有手动输入脉冲,继续读取,直到本次读取 的数据与上次不一样        mov bl, dl  ;本次与上次不一样        cmp dl, 9  ;判断是否小于9        ja disp_        add dl, 30h        dispchar dl   ;显示0-9的一个数        jmp again  disp_:add dl, 37h        dispchar dl    ;显示A-F中的一个数        jmp again        mov ah,4ch        int 21hcode ends     end main

实验2:

stack segment stack    db 200 dup(0)stack endsdata segment      ZERO equ 280h      ONE equ 281h      TWO equ 282h      CTRL equ 283h      data endscode segment      assume cs:code,ds:data,ss:stack            put_data MACRO x, y  ;x为端口 y为数据        push ax        push dx        mov al, y        mov dx, x        out dx, al        pop dx        pop ax      ENDM;分析:连接时钟频率为1MHz,周期为1us,要求输出的1Hz的信号周期为1秒,分频系数为1e6,but8254最大计数为65536;又因为1e6 = 1000 * 1000,所以通道0和通道1分别把信号1000分频即可   main:mov ax,data        mov ds,ax        mov ax, stack        mov ss, ax        put_data CTRL, 00110111b  ;计数器0工作在方式3下,读写16位,BCD计数码        put_data ZERO, 00   ;写入计数器初值1000        put_data ZERO, 10h  ;先写低8位再写高8位0001 0000 0000 0000        put_data CTRL, 01110110b  ;计数器1工作在方式3下,读写16位,二进制数码        put_data ONE, 0e8h        put_data ONE, 03h   ;写入计数器初值1000,开始计数,out0端为高电平,接LED灯,LED灯亮        put_data CTRL 10110111b    ;计数器2工作在方式3下,读写16位,BCD计数码        put_data TWO 02      ;写入计数初值2,输出两个端口,out1端口输出频率是out2端口2倍        put_data TWO 00h        mov ah, 4ch        int 21hcode ends     end main

转载地址:http://imiqf.baihongyu.com/

你可能感兴趣的文章
Java 8系列之重新认识HashMap
查看>>
HashMap 、 ArrayList、String 重写了equals方法 而Object类(比如User)没有重写
查看>>
Servlet的生命周期
查看>>
Object中的getClass()返回的是当前运行的类
查看>>
加载驱动程序的方法
查看>>
深入理解java异常处理机制
查看>>
object类的基本方法
查看>>
回答阿里社招面试如何准备,顺便谈谈对于Java程序猿学习当中各个阶段的建议
查看>>
Dubbo分布式服务框架入门(附工程)
查看>>
两年Java开发工作经验面试总结
查看>>
作为Java面试官--谈谈一年来的面试总结
查看>>
两年Java程序员面试经
查看>>
面试心得与总结---BAT、网易、蘑菇街
查看>>
如何面试有2年java工作经验的应聘人员
查看>>
Java实现简单的递归操作
查看>>
Java实现简单的递归操作
查看>>
Struts2工作原理和执行流程图
查看>>
在线预览Word,Excel~
查看>>
hibernate延迟加载(get和load的区别)
查看>>
关于文件拷贝效率问题
查看>>