实验 定时器实验
一.实验目的
1.学习8051内部定时器/计数器的使用和编程方法
2.进一步掌握中断处理程序的编写方法
二.实验说明
对内部定时/计数器的编程主要是定时常数的设置和有关控制寄存器的设置。本实验使用定时器功能产生1秒钟定时,程序运用定时中断方式,实现每一秒钟输出状态发生一次反转,即发光二极管每隔一秒钟点亮一次。
与定时器有关的寄存器有TMOD(工作方式寄存器)和控制寄存器(TCON)。TMOD用于设置定时器/计数器的工作方式0-3,并确定用于定时还是用于计数。TCON控制定时器的运行或停止,并在定时器溢出时设置相应的标志位,产生定时器中断。
单片机的定时器作定时功能时,是对机器周期计数。每个机器周期的长度是12个振荡周期。因为实验系统采用6MHz的晶振,如采用工作方式2(即8位自动重装载方式),定时器每隔100uS中断一次,定时常数可按以下方法计算:
机器周期=12/6MHz=2uS
因为(256-定时常数)×2uS=100uS,因此定时常数=206。
使用软件对100uS定时中断进行计数,每计数10000次,就是1秒钟。
若采用方式1(即16位定时器模式),定时时间与装载的定时常数有如下公式:
定时时间=(65536-定时常数)×机器周期
比如当定时常数设置为55536时,可得到20ms的定时中断,再用软件计数50次,同样可实现1秒定时。
在中断处理程序中,因为定时常数的设置对中断程序的运行起到关键作用,所以在设置前要先关闭对应的中断,置数完之后再打开相应的中断。
三.实验内容和步骤
1. 使用89C51单片机最小应用系统模块,P1.0接发光二极管。
2. 安装好仿真器,用串行数据通信线连接计算机与仿真器,把仿真头插到模块的单片机插座中,打开模块电源,插上仿真器电源插头。
3. 启动计算机,打开仿真软件,进入仿真环境。选择仿真器型号、仿真头型号、CPU类型;选择通信端口,测试串行口功能。
4. 对编写的源程序进行编译,下载到单片机中,全速运行程序,若程序无误,发光二极管隔一秒钟点亮一次。
四.程序流程图
五.思考题
影响定时准确度的因素有哪些?如何用单片机实现一个电子时钟,画出程序流出图说明,或给出C51源程序。
关键字:定时器 内部定时器 计数器
引用地址:
定时器实验
推荐阅读最新更新时间:2024-11-05 13:21
转两个stm32定时器的使用代码
具体没有测试,先收藏,以后去尝试一下 TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; TIM_OCInitStructure.TIM_OutputNState = TIM_OutputNState_Enable; TIM_OCInitStructure.TIM_Pulse = Pluse; TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; TIM_OCInitStruct
[单片机]
STM32普通定时器实现延时函数
/* SystemFrequency / 1000 1ms中断一次 * SystemFrequency / 100000 10us中断一次 * SystemFrequency / 1000000 1us中断一次 */ #define SYSTICKPERIOD 0.000001 #define SYSTICKFREQUENCY (1/SYSTICKPERIOD) /** * @brief 定时器2的初始化,,定时周期1ms * @param 无 * @retval 无 */ void TIM2_Init(void) { TIM_TimeBaseInitTypeDef TI
[单片机]
中断定时器与流水灯
此程序为设置Led流水灯与数码管第0一位的0-16数字循环亮。不能将数码管程序放进主函数里,因为延迟函数delay,可能会在add自加到40时刚好在dalay里面,这时不会有数码管的闪烁。 #include reg51.h #include intrins.h #define uchar unsigned char #define uint unsigned int sbit wela=P2^7; //位选 sbit dula=P2^6; //段选 int num,add,temp=0xfe; uchar code table ={0x3f,0x06,0x5b,0x4f, 0x66,
[单片机]
PIC16F15323单片机 (中断与定时器Timer0)
开发环境选择的是 MPLAB X IDE v5.50和 xc8-v2.32-full-install-windows-x64-installer。 1 基本原理 2 实现代码 主要根据FIGURE 25-1 和中断的逻辑框图来编写代码,这样代码的可读性强,也便于理解。但有些寄存器在框图中可能没有说明,所以也需要仔细阅读定时器0的官方文档,即基本原理部分。 /* * File: timer0.c * Author: Sure *---------------系统功能: 中断 定时器0 * Created on October 21, 2021, 7:48 PM */ // PIC16F
[单片机]
基于C8051F020的车辆散热系统参数测试电路
1 引言 车辆的系统散热性是衡量其先进性的一个重要标志,因为车辆的各个部件和系统都存在一个最佳的工作温度区间,在此温度范围内零部件的各项性能指标才能得以保证。目前,我国车辆系统的研制已进入自行研制、自主创新的发展阶段,由于缺乏实车试验测试条件,加上车辆工作环境的复杂性,导致有效的实车试验数据严重缺乏,试验周期长,数据可复现性差,无法向工程设计部门提供准确有效的实车试验数据,严重影响车辆总体技术的进一步发展。因此,本文着重于在不改变车辆现有结构和性能的前提下,采用单片机控制系统、传感器技术、数据存储技术、实时时钟技术,研制一套能实时检测和记录车辆散热系统动态参数的电子电路。 2 系统总体构架设计 该散热系统参数测试电路由上位微型计算
[嵌入式]
C8051f系列开发之keil c单步调试
C8051f系列单片机是一种高速,集成度很高的单片机,功能还是蛮强大的。我在用此款单片机读取ST 公司的三轴加速度计的时候发现输出总是全1。于是,我用keil c的单步调试功能。一步一步调试,于是我发现执行到一条把某一管脚置1的语句之后,watch窗口显示的相应管教状态仍是0. 于是我觉得可能是硬件的问题,引脚一直接地被拉低。果然,我在查看电路板的线路时发现sdi和sdo两根线与另外两个引脚相连,而这个连接是我修改版图时无意连接上的。而且一个引脚被配置成高电平,另外一个被配置成低电平。所以sdi和sdo都一直保持低电平和高电平。所以不能对传感器进行正常的配置和读取数据。 另附lis3lv02dq读取程序,采用的是虚拟
[单片机]
STM32F407ZGT6学习之定时器PWM波输出
工程代码:https://pan.baidu.com/s/1Qlfg1_br0tN6yy0fcDwCjg,密码:fhh2 (一)概述 STM32F407有三种类型的定时器,分别是基本定时器、通用定时器、高级定时器。定时器的PWM波输出是通用定时器、高级定时器才有的功能,PWM波的输出驱动,是在基本定时器的基础功能上,把定时器的计数器与一个比较值进行比较,输出高电平或者低电平的过程。 (二)通用定时器框架 通过图中可以看出,图中上半部分是基本计数器的功能(通用定时器与基本定时器的计数器功能差别在于多了几种时钟输入的方式),图中下半部分是通过定时器的”捕获输入/比较输出通道“(TIMx_CH1或TIMx_CH2),通过
[单片机]
基于单片机C8051F410的精确信号模拟电路设计
引言 在对某型发射装置进行检测时.需要提供三组以11.50伏为基准的精确直流电压信号。为配合测试流程,这三组信号需要在不同的时段取18个不同的直流电压值,幅度分布在9.33-12.13伏范围之内。原有的测试仪采用22个精密电阻组成的分压器,配合波段开关选择来产生这18种不同的精确直流电压信号。这种设计方法价格昂贵,并且不能实现自动化检测,需要通过手工拨动波段开关来实现测试步骤的转换。为了实现对发射装置的自动测试。采用微机技术设计了新型的检测仪。新的检查仪以CPU模块为核心,通过程序控制D/A转换器来产生这三组精确直流电压信号,简化了设计,降低了成本,实现了测试步骤的自动切换。但是在检测仪的使用过程中发现经常出现重测合格
[单片机]