【微机原理与接口技术】定时控制接口

文章目录

  • 8253的引脚和工作方式
    • 内部结构和引脚
    • 工作方式
      • 方式0:计数结束中断
      • 方式1:可编程单稳脉冲
      • 方式2:周期性负脉冲输出
      • 方式3:方波发生器
      • 方式4:软件触发的单次负脉冲输出
      • 方式5:硬件触发的单次负脉冲输出
      • 各种工作方式的输出波形
  • 8253的编程
    • 8253的方式控制字
    • 写入计数值
    • 读取计数值
  • 8253的应用
    • 8253作为系统时钟
    • 8253作分频器
    • 8253实现定时中断
    • 8253的综合应用

8253的引脚和工作方式

定时功能的实现方法

  • 软件延时——利用微处理器执行一个延时程序段实现
  • 不可编程的硬件定时——采用分频器、单稳电路或简易定时电路控制定时时间
  • 可编程的硬件定时——软件硬件相结合、用可编程定时器芯片构成一个方便灵活的定时电路

内部结构和引脚

在这里插入图片描述

8253 有 3个相互独立的16位计数器通道,称为计数器0、计数器1和计数器2,每个计数器通道的结构完全相同
每个计数器有6种工作方式
按二进制(最大计数值可达65535)或十进制(BCD码)计数(最大计数值可达9999)

(8254是8253的改进型,主要区别在于接入的最高频率,8254最高为10MHz,而8253为2M)

计数器结构

在这里插入图片描述

计数初值存于预置寄存器
在计数过程中,减法计数器的值不断递减(因此,当初值为0时,则计数值最大),而预置寄存器中的预置不变。
**输出锁存器(当前计数输出寄存器)**用于写入锁存命令时,锁定当前计数值

计数器的三个引脚

  • CLK时钟输入信号

    在计数过程中,此引脚上每输入一个时钟信号(下降沿),计数器的计数值减1

  • GATE门控输入信号

    控制计数器的启动或停止,可分成电平控制和上升沿控制两种类型。一般而言,当其为高电平时计数器开始工作;为低电平时计数器暂停计数

  • OUT计数器输出信号

    当一次计数过程结束(计数值减为0),OUT引脚上将产生一个输出信号

8253/8254与处理器的接口

  • D0 ~ D7数据线
  • A0 ~ A1地址线
  • R D ‾ \overline{RD} RD 读信号
  • W R ‾ \overline{WR} WR 写信号
  • C S ‾ \overline{CS} CS 片选信号

在这里插入图片描述

工作方式

8253有6种工作方式,由方式控制字确定

每种工作方式的过程类似:

  1. 设定工作方式

  2. 设定计数初值

  3. 硬件启动(方式1和方式5需要)

    【启动方式由GATE端信号的形式决定】

    • 软件启动 ➡️ GATE端为高电平
    • 硬件启动 ➡️ GATE端有一个上升沿
  4. 计数初值进入减1计数器

  5. 每输入一个时钟计数器减1的计数过程

  6. 计数过程结束

六种工作方式:

  1. 方式0:计数结束中断

    工作过程:在这种方式下,当CPU写入控制字CW后,OUT立即变低电平(即使没写入初值),当写入初值后计数器开始计数,计数结束后OUT变为高电平

    在这里插入图片描述

    ① 设定工作方式
    ② 设定计数初值
    ③ 方式0 无需硬件启动,不需要这个过程
    ④ 计数值送入计数器
    ⑤ 每输入一个时钟计数器减1的计数过程
    ⑥ 计数过程结束

    方式0的特点:

    • 计数器只计一遍数;
    • 计数是在写入计数值后的CLK的下降沿开始的;
    • 计数过程中,当GATE=0时,计数暂停;GATE=1时,接着计数
    • 在计数过程中,若改变初值,计数器将重新开始计数;

    在这里插入图片描述

  2. 方式1:可编程单稳脉冲

    工作过程:当CPU写入控制字后(WR上升沿),OUT保持高电平,写入初值后并不开始计数,直到门控脉冲GATE启动后的下一个CLK的下降沿才开始计数

    在这里插入图片描述

    ① 设定工作方式
    ② 设定计数初值
    ③ 硬件启动(GATE端有一个上升沿)
    ④ 计数值送入计数器
    ⑤ 每输入一个时钟计数器减1的计数过程
    ⑥ 计数过程结束

    方式1的特点:

    • 若计数初值为N,则单拍脉冲宽度为N个输入脉冲间隔
    • 当计数到0后,可再次由GATE触发启动下一次计数
    • 在计数过程中,可通过GATE脉冲再触发。在再触发脉冲上升沿后的CLK的下降沿,计数器重新开始计数
    • 在计数过程中,若改变初值,计数器不受影响。若再次由GATE触发,则以新的计数值开始计数(即计数值是下次有效)
  3. 方式2:周期性负脉冲输出

    工作过程:当CPU写入控制字后(WR上升沿),OUT变为高电平,写入初值后立即自动开始计数,在计数过程中OUT一直保持高电平,直到计数器减到 1 时OUT变为低,经过一个CLK后,OUT又变为高,且计数器重新开始工作

    在这里插入图片描述

    方式2的特点:

    • 不用重新设置计数初值,就能够连续计数,输出固定频率的脉冲
    • 在计数过程中,若GATE=0计数暂停,当GATE恢复为高后的下一个CLK脉冲,计数器恢复初值重新计数
    • 在计数过程中,若改变初值,计数器不受影响。在下次计数时,则以新的计数值开始计数(即计数值是下次有效)
  4. 方式3:方波发生器

    工作过程:当CPU写入控制字后,OUT变为高电平,写入初值后立即自动开始计数,在计数过程中OUT保持高;当计数到一半值时OUT变低,直至计数器到0时OUT又变高,重新开始下次计数

    在这里插入图片描述

    方式3的特点:

    • 当N为偶数时占空比=1/2,N为奇数时输出的高电平比低电平多一个CLK周期
    • 不用重新设置计数初值,就能够连续计数,输出固定频率的方波脉冲
    • 在计数过程中,若GATE=0计数暂停,当GATE恢复为高后的下—个CLK脉冲,计数器恢复初值重新计数
    • 在计数过程中,若改变初值,计数器不受影响。在下次计数时,则以新的计数值开始计数(即计数值是下次有效)
  5. 方式4:软件触发的单次负脉冲输出

    工作过程:当CPU写入控制字后,OUT变为高电平,写入初值后立即开始计数(相当于软件启动),当计数到 0 时OUT变低,经过一个CLK后OUT又变高,停止计数,在下—次写入初值后才重新计数

    在这里插入图片描述

    方式4的特点:

    • 若设置初值为N,在门控脉冲触发经过N个CLK才输出一个负脉冲
    • 在计数过程中,若GATE=0禁止计数,当GATE恢复为高后的下—个CLK脉冲,计数器重新开始计数
    • 在计数过程中,若改变初值则按新值重新开始计数
  6. 方式5:硬件触发的单次负脉冲输出

    工作过程:当CPU写入控制字后,OUT变为高电平,写入初值后计数器并不开始计数,当GATE门控信号的上升沿后才开始计数(硬件启动),计数到 0 时OUT变低,经过一个CLK后OUT又变高,停止计数

    在这里插入图片描述

    方式5的特点:

    • 若设置初值为N,在门控脉冲触发经过N个CLK才输出一个负脉冲
    • 在计数过程中使用GATE脉冲,使计数器重新开始计数,但对输出状态没有影响
    • 在计数过程中,若改变初值,只要没有GATE脉冲触发不影响计数过程。写入新的初值后,若有GATE脉冲触发,则立即按新值开始计数

各种工作方式的输出波形

在这里插入图片描述

8253的编程

8253加电后的工作方式不确定,必须经过初始化编程,才能正常工作

8253的编程基本顺序为:

  1. 写入控制字
  2. 写入计数初值
  3. 计数器开始工作
  4. (读取计数值)

在这里插入图片描述

8253的方式控制字

在对8253的初始化编程中,先向其控制字寄存器写入一个控制字,以规定8253的工作方式

控制字格式如下:

在这里插入图片描述

【例】某个8253的计数器0、1、2端口和控制端口地址依次是40H~43H,设置其中计数器0为方式0,采用二进制计数,先低后高写入计数值

MOV AL,30H
;方式控制字:30H=00 11 000 0B
OUT 43H,AL
;写入控制端口:43H

写入计数值

8253确定工作方式后,接着应向所选择的计数器中写入相应的计数值,则8253开始在输入频率 CLK 的作用下,自动进行减1计数。一般减至0时计数停止,此时在out 引脚输出一个变化的电平

计数初值 N 的计算公式为: N = f i n ÷ f o u t N=f_{in}÷f_{out} N=fin÷fout 即 N=输入频率÷输出频率

【例】某个8253的计数器0、1、2端口和控制端口地址依次是40H~43H;设置计数器0为方式1,采用二进制计数,写入计数初值:1024(=400H)

MOV  AL,00110010B
OUT  43H,AL		;写入方式控制字
MOV  AX,1024	;计数初值:1024(=400H)
;写入计数器0地址:40H,如下
OUT 40h,AL		;写入低字节计数初值
MOV AL,AH
OUT 40h,AL		;写入高字节计数初值

【例】设8253的通道1工作于方式5,按二进制计数,计数初值为4000H,则它的初始化程序段为?

MOV  AL,01101010B 	;通道1,只读写高字节,方式5,二进制计数
OUT  43H,AL			;写入方式控制字
MOV  AL,40H
OUT  41H,AL 		;送计数初值

读取计数值

8253任一通道的计数值,CPU可用输入指令读取
CPU读到的是执行输入指令瞬间计数器的当前值
但8253的计数器是16位的,所以要分两次读至CPU
因此,若不锁存的话,则在前后两次执行输入指令的过程中,计数值可能已经变化了

要锁存当前计数值有两种方法:

  • 利用GATE信号使计数过程暂停
  • 向8253写入一个方式控制字,令8253通道的锁存器锁存。之后,再从计数器I/O地址中读取锁存的计数值

读取计数值,要注意读写格式和计数数制

【例】对计数器1初始化,使其工作于方式3,采用二进制格式计数,计数初值为2000H。设8253的端口地址为 80H~83H
(1)编写初始化程序
(2)若要在计数过程中读出当前计数值,又如何编写程序?

【解(1)】

MOV AL,76H	;01110110B
OUT 83H,AL
MOV AX,2000H
OUT 81H,AL
MOV AL,AH
OUT 81H,AL

【解(2)】

MOV AL,40H(01000000B)	;向通道1写锁存命令
OUT 83H,AL
IN AL,81H	;先读低8位
XCHG AL,AH	;暂存AL
IN AL,81H	;再读高8位
XCHG AL,AH	;利用交换指令使计数值的低字节到AL,高字节到AH

8253的应用

8253作为系统时钟

【例】设某工业控制系统中通过8253的2#通道输出500Hz的连续方波作为系统时钟信号,已知8253的输入 CLK= 1MHz ,CS=320~323H,设计8253的控制程序

【分析】

  • 因为要产生连续的方波信号,因此选择8253的工作方式3;

  • 因为输出的方波频率为500Hz,所以写入的初值为:1000000/500=2000(7D0);

    这里之所以这样除,是因为:在方式3中,我们输入的初值 N,相当于是对输入频率的N分频

  • 2000>256,因此必须写入16位计数值,写入顺序为先写低8位,后写高8位

【解】

MOV   DX,323H
MOV   AL,0B6H   
OUT   DX,AL   
MOV   DX,322H
MOV   AX,7D0H
OUT   DX,AL   
MOV   AL,AH
OUT   DX,AL   

8253作分频器

【例】设8253的输入CLK1=1000Hz,CS=10~13H,要求OUT1输出为高电平和低电平均为20ms方波。设计8253的控制程序

【分析】

  • 因为要产生连续的方波信号,因此选择8253的工作方式3;
  • 因为输出的方波频率为1000/(20+20)=25Hz,所以写入的初值为 1000/25 = 40
  • 40<256,因此写入时选择一个字节写入
MOV   AL,56h  ;0101 0110
OUT   13H,AL
MOV   AL,40
OUT   11H,AL

8253实现定时中断

【例】设某应用系统中,系统提供一个10KHz的时钟信号接入8253的CLK0,即输入CLK0=10KHz, 8253的OUT0接入8259的IR1,要求每隔10ms完成一次扫描键盘的工作,已知CS=10~13H

【分析】

  • 因为每隔10ms 8253要产生一个中断脉冲,所以选择8253的工作方式2
  • 因为要每10ms完成一次动作,即动作频率为 1000/10=100Hz,所以写入的初值为10K/100=100
  • 100<256,因此写入时选择一个字节写入
MOV   AL,15h  ;0001 0100
OUT   13H,AL
MOV   AL,100
OUT   10H,AL 

8253的综合应用

试按如下要求将8253的初始化程序补充完整,已知8253的计数器0~2和控制字I/O地址依次为204H~207H
① 使计数器1工作在方式0,仅用8位二进制计数,计数初值为128
② 使计数器0工作在方式1,按BCD码(十进制)计数,计数值为3000
③ 使计数器2工作在方式2,计数值为02F0H

在这里插入图片描述

【解】⬇️

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/957327.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

场馆预定平台高并发时间段预定实现V2

&#x1f3af; 本文档介绍了场馆预订系统接口V2的设计与实现&#xff0c;旨在解决V1版本中库存数据不一致及性能瓶颈的问题。通过引入令牌机制确保缓存和数据库库存的最终一致性&#xff0c;避免因服务器故障导致的库存错误占用问题。同时&#xff0c;采用消息队列异步处理库存…

从零到上线:Node.js 项目的完整部署流程(包含 Docker 和 CICD)

从零到上线&#xff1a;Node.js 项目的完整部署流程&#xff08;包含 Docker 和 CI/CD&#xff09; 目录 项目初始化&#xff1a;构建一个简单的 Node.js 应用设置 Docker 环境&#xff1a;容器化你的应用配置 CI/CD&#xff1a;自动化构建与部署上线前的最后检查&#xff1a;…

stm32 L051 adc配置及代码实例解析

一 cude的设置&#xff1a; 1. 接口的基本设置&#xff1a; 2. 参数的设置&#xff1a; 二 代码的逻辑&#xff1a; 1. 上面的直接生成代码&#xff0c;然后使用下面源码即可读到adc的数据&#xff1a; void adc_battery_start(void) {uint32_t ADC_value 0;HAL_ADC_Start(&…

【2024 博客之星评选】请继续保持Passion

我尝试复盘自己2024年走的路&#xff0c;希望能给诸君一些借鉴。 文章目录 回头望感想与收获成长与教训今年计划感恩一些体己话 回头望 回望我的2024年&#xff0c;年初拿高绩效&#xff0c;但感觉逐渐被公司一点点剥离出中心&#xff1b;年中一直在学习防患于未然&#xff1b…

【第二十周】U-Net:用于生物图像分割的卷积神经网络

文章目录 摘要Abstract文章信息研究动机U-Net网络结构U-Net网络搭建数据增强损失函数转置卷积创新性与不足创新性&#xff1a;不足&#xff1a; 总结 摘要 U-Net&#xff08;Convolutional Networks for Biomedical Image Segmentation&#xff09;是一种用于图像分割的深度学…

GD32F303 GCC 环境搭建

一、引言 在嵌入式开发领域&#xff0c;GD32F303 微控制器以其出色的性能和丰富的功能被广泛应用。为了充分发挥其潜力&#xff0c;搭建一个高效的开发环境并深入理解项目构建过程至关重要。本文将详细介绍如何基于 GCC 工具链搭建 GD32F303 的开发环境&#xff0c;重点聚焦于…

【语言处理和机器学习】概述篇(基础小白入门篇)

前言 自学笔记&#xff0c;分享给语言学/语言教育学方向的&#xff0c;但对语言数据处理感兴趣但是尚未入门&#xff0c;却需要在论文中用到的小伙伴&#xff0c;欢迎大佬们补充或绕道。ps&#xff1a;本文不涉及公式讲解&#xff08;文科生小白友好体质&#xff09;&#xff…

智能系统的感知和决策

智能系统在感知和决策过程中具备的关键能力表现在智能感知/自主判定上&#xff0c;下面可以从感知的本质、自主判断的含义及其在智能系统中的作用进行深入分析。 1、智能感知&#xff1a;信息获取与理解 智能感知是指智能系统通过传感器或其他数据采集手段获取环境中的信息&…

AD7606, 逐次逼近型ADC以及一次被GPT坑了的过程.

首先, 我的项目中, 已有的一个ADC芯片, 8通道, 并行, Analog家的ad7606, 在采集高速的正弦信号的时候, 我发现采集到的值怎么都不太对. 但是宏观来看, 并没有太大问题, 首先我怀疑的是量程问题, 接入一个5伏直流, 得到的读数确实是接近16bit的正半量程的读数, 32xxx. 接着我用信…

16.5万煤气柜柜位计故障分析

一、事故经过&#xff1a; 2015年8月1&#xff14;日20点45分&#xff0c;16.5万立煤气柜柜顶油封溢流口有大量油液溢出&#xff0c;此时雷达柜位计在计算机上示值为63.79米&#xff0c;由于接近傍晚天色较暗&#xff0c;岗位操作员并未及时发现这一异常状况。22点45分左右&…

成就与远见:2024年技术与思维的升华

个人主页&#xff1a;chian-ocean 前言: 2025年1月17日&#xff0c;2024年博客之星年度评选——创作影响力评审的入围名单公布。我很荣幸能够跻身Top 300&#xff0c;虽然与顶尖博主仍有一定差距&#xff0c;但这也为我提供了更加明确的发展方向与指引。展望崭新的2025年&…

Android 天气APP(二十七)增加地图天气的逐小时天气、太阳和月亮数据

imageId R.mipmap.icon_213d; break; case “300”: imageId R.mipmap.icon_300d; break; case “301”: imageId R.mipmap.icon_301d; break; case “302”: imageId R.mipmap.icon_302d; break; case “303”: imageId R.mipmap.icon_303d; break; case “…

vue2使用flv.js在浏览器打开flv格式视频

组件地址&#xff1a;GitHub - bilibili/flv.js: HTML5 FLV Player flv.js 仅支持 H.264 和 AAC/MP3 编码的 FLV 文件。如果视频文件使用了其他编码格式就打不开。 flv.vue <template><div><el-dialog :visible.sync"innerVisibleFlv" :close-on-pre…

Restormer模型代码解析

上一篇我们对Restormer的论文进行了解析。这篇对Restormer的代码进行解析。 论文地址&#xff1a;Restormer: Efficient Transformer for High-Resolution Image Restoration。代码地址&#xff1a;Restormer 以Deraining项目中的test.py文件为切入点&#xff0c;来分析其mod…

微信小程序怎么制作自己的小程序?手把手带你入门(适合新手小白观看)

对于初学者来说&#xff0c;制作一款微信小程序总感觉高大上&#xff0c;又害怕学不会。不过&#xff0c;今天我就用最简单、最有耐心的方式&#xff0c;一步一步给大家讲清楚!让你知道微信小程序的制作&#xff0c;居然可以这么轻松(希望你别吓跑啊!)。文中还加了实战经验&…

MPLS VPN 部署与应用

一.简介 MPLS&#xff0c;称之为多协议标签交换&#xff0c;在九十年代中期被提出来&#xff0c;用于解决传统IP报文依赖查表转发而产生的瓶颈&#xff0c;现多用于VPN技术&#xff0c;MPLS报头封装在数据链路层之上&#xff0c;网络层之下。本文为结合了华为技术和新华三技术…

定时器setTimeout和setInterval

setTimeOut()异步 setInterval()异步

PCL 部分点云视点问题【2025最新版】

目录 一、问题概述二、解决方案1、软件实现2、代码实现三、调整之后博客长期更新,本文最近更新时间为:2025年1月18日。 一、问题概述 针对CloudCompare软件处理过的pcd格式点云,在使用PCL进行特征点提取、配准等实验中最终显示结果出现点云位置偏差较大的问题,本博客给出解…

SpringCloud+Vue+Python人工智能(fastAPI,机器学习,深度学习)前后端架构各功能实现思路——主目录(持续更新)

随着公司业务的增加&#xff0c;公司需要一个javapython人工智能相互配合架构&#xff0c;正常网站业务用java来做&#xff0c;而ai&#xff0c;例如电价预测等回归任务&#xff0c;以及大模型预测全网负荷&#xff0c;新能源出力等任务&#xff0c;使用python通过fastapi暴露接…

Python数据可视化(够用版):懂基础 + 专业的图表抛给Tableau等专业绘图工具

我先说说文章标题中的“够用版”啥意思&#xff0c;为什么这么写。 按照我个人观点&#xff0c;在使用Python进行数据分析时&#xff0c;我们有时候肯定要结合到图表去进行分析&#xff0c;去直观展现数据的规律和特定&#xff0c;那么我们肯定要做一些简单的可视化&#xff0…