定时器计算方法

定时器计算方法
定时器计算方法

STM32定时器时间的计算方法

STM32中的定时器有很多用法:

(一)系统时钟(SysTick)

设置非常简单,以下是产生1ms中断的设置,和产生10ms延时的函数:

void RCC_Configuration(void)

{

RCC_ClocksTypeDef RCC_ClockFreq;

SystemInit();//源自system_stm32f10x.c文件,只需要调用此函数,则可完成RCC的配置. RCC_GetClocksFreq(&RCC_ClockFreq);

//SYSTICK分频--1ms的系统时钟中断

if (SysTick_Config(SystemFrequency / 1000))

{

while (1); // Capture error

}

}

void SysTick_Handler(void)//在中断处理函数中的程序

{

while(tim)

{

tim--;

}

}

//调用程序:

Delay_Ms(10);

当然,前提是要设置好,变量tim要设置成volatile类型的。

(二)第二种涉及到定时器计数时间(TIMx)

/*TIM3时钟配置*/

TIM_TimeBaseStructure.TIM_Prescaler = 2; //预分频(时钟分频)72M/(2+1)=24M TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //向上计数TIM_TimeBaseStructure.TIM_Period = 65535; //装载值18k/144=125hz

TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;

TIM_TimeBaseStructure.TIM_RepetitionCounter = 0x0;

TIM_TimeBaseInit(TIM3,&TIM_TimeBaseStructure);

定时时间计算:

TIM_TimeBaseStructure.TIM_Prescaler = 2;

//分频2 72M/(2+1)/2=24MHz

TIM_TimeBaseStructure.TIM_Period = 65535; //计数值65535

((1+TIM_Prescaler )/72M)*(1+TIM_Period )=((1+2)/72M)*(1+65535)=0.00273秒=366.2Hz */

注意两点(来自大虾网,未经检验)

(1)TIMx(1-8),在库设置默认的情况下,都是72M的时钟;

(2)TIM_TimeBaseStructure.TIM_RepetitionCounter=0;

是重复计数,就是重复溢出多少次才给你来一个溢出中断,

它对应的寄存器叫TIM1 RCR.

如果这个值不配置,上电的时候寄存器值可是随机的,本来1秒中断一次,可能变成N秒中断一次,让你超级头大!

假设系统时钟是72Mhz,TIM1是由PCLK2(72MHz)得到,TIM2-7是由PCLK1得到

关键是设定时钟预分频数,自动重装载寄存器周期的值

/*每1秒发生一次更新事件(进入中断服务程序)。RCC_Configuration()的SystemInit()的RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE1_DIV2表明TIM3CLK为72MHz。因此,每次进入中

断服务程序间隔时间为

((1+TIM_Prescaler )/72M)*(1+TIM_Period )=((1+7199)/72M)*(1+9999)=1秒*/

定时器的基本设置

1、TIM_TimeBaseStructure.TIM_Prescaler = 7199;//时钟预分频数例如:时

钟频率=72/(时钟预分频+1)

2、TIM_TimeBaseStructure.TIM_Period = 9999; //自动重装载寄存器周期的值(定时

时间) 累计0xFFFF个频率后产生个更新或者中断(也是说定时时间到)

3、TIM_TimeBaseStructure.TIM_CounterMode = TIM1_CounterMode_Up; //定时器模式向上计数

4、TIM_TimeBaseStructure.TIM_ClockDivision = 0x0; //时间分割值

5、TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);//初始化定时器2

6、TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE); //打开中断溢出中断

7、TIM_Cmd(TIM2, ENABLE);//打开定时器

或者:

TIM_TimeBaseStructure.TIM_Prescaler = 35999;//分频35999 72M/

(35999+1)/2=1Hz 1秒中断溢出一次

TIM_TimeBaseStructure.TIM_Period = 2000; //计数值2000

((1+TIM_Prescaler )/72M)*(1+TIM_Period )=((1+35999)/72M)*(1+2000)=1秒*/

STM32通用定时器的基本定时器功能实现灯闪烁

/*MAIN.C*/

/* Includes ------------------------------------------------------------------*/

#include "stm32f10x.h"

#include "misc.h"

/* Private function prototypes -----------------------------------------------*/

void RCC_Configuration(void);

void NVIC_Configuration(void);

void GPIO_Configuration(void);

void TIM3_Configuration(void);

/* Private functions ---------------------------------------------------------*/

int main(void)

{

RCC_Configuration();

NVIC_Configuration();

GPIO_Configuration();

TIM3_Configuration();

TIM_ClearFlag(TIM3, TIM_FLAG_Update);/*清除更新标志位*/

TIM_ARRPreloadConfig(TIM3, DISABLE);/*预装载寄存器的内容被立即传送到影子寄存器*/

TIM_ITConfig(TIM3, TIM_IT_Update, ENABLE);

TIM_Cmd(TIM3, ENABLE);

while (1) {

;

}

}

void TIM3_Configuration(void)

{

/*每1秒发生一次更新事件(进入中断服务程序)。RCC_Configuration()的SystemInit()的RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE1_DIV2表明TIM3CLK为72MHz。

因此,每次进入中断服务程序间隔时间为((1+TIM_Prescaler )/72M)*(1+TIM_Period )=((1+7199)/72M)*(1+9999)=1秒*/

TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;

TIM_TimeBaseStructure.TIM_Period = 9999;

TIM_TimeBaseStructure.TIM_Prescaler = 7199;

TIM_TimeBaseStructure.TIM_ClockDivision = 0;

TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;

TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);/*此函数的语句"TIMx->EGR = TIM_PSCReloadMode_Immediate;"以软件方式产生更新事件(注:当发生一个更新事件时,所有的寄存器都被更新,硬件同时(依据URS位)设置更新标志位(TIMx_SR寄存器中的UIF 位)。)。*/

}

void RCC_Configuration(void)

{

SystemInit();

/* TIM3 clock enable */

RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);

/* GPIOC clock enable */

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);

}

void NVIC_Configuration(void)

{

NVIC_InitTypeDef NVIC_InitStructure;

/* Enable the TIM3 gloabal Interrupt*/

NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn;

NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;

NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;

NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;

NVIC_Init(&NVIC_InitStructure);

}

void GPIO_Configuration(void)

{

GPIO_InitTypeDef GPIO_InitStructure;

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_Init(GPIOC, &GPIO_InitStructure);

/*注:不用为实现通用定时器的基本定时器功能配置Pin*/

}

/*stm32f10x_it.c*/

/* Includes ------------------------------------------------------------------*/

#include "stm32f10x_it.h"

void TIM3_IRQHandler(void)

{

if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET) {

/* Clear TIM3 update interrupt */

TIM_ClearITPendingBit(TIM3, TIM_IT_Update);

GPIO_WriteBit(GPIOC, GPIO_Pin_7, (BitAction)(1 - GPIO_ReadOutputDataBit(GPIOC, GPIO_Pin_7)));

51单片机定时器初值的计算

51单片机定时器初值的计算 一。10MS定时器初值的计算: 1.晶振12M 12MHz除12为1MHz,也就是说一秒=1000000次机器周期。10ms=10000次机器周期。65536-10000=55536(d8f0) TH0=0xd8,TL0=0xf0 2.晶振11.0592M 11.0592MHz除12为921600Hz,就是一秒921600次机器周期,10ms=9216次机器周期。 65536-9216=56320(dc00) TH0=0xdc,TL0=0x00 二。50MS定时器初值的计算: 1.晶振12M 12MHz除12为1MHz,也就是说一秒=1000000次机器周期。50ms=50000次机器周期。65536-50000=15536(3cb0) TH0=0x3c,TL0=0xb0 2.晶振11.0592M 11.0592MHz除12为921600Hz,就是一秒921600次机器周期,50ms=46080次机器周期。 65536-46080=19456(4c00) TH0=0x4c,TL0=0x00 三。使用说明 以12M晶振为例:每秒钟可以执行1000000次机器周期个机器周期。而T 每次溢出 最多65536 个机器周期。我们尽量应该让溢出中断的次数最少(如50ms),这样对主程序的干扰也就最小。开发的时候可能会根据需要更换不同频率的晶振(比如c51单片机,用11.0592M的晶振,很适合产生串

口时钟,而12M晶振很方便计算定时器的时间),使用插接式比较方便。 51单片机12M和11.0592M晶振定时器初值计算 2011-01-04 22:25 at89s52,晶振频率12m 其程序如下: 引用代码:#include #include void timer0_init() { TMOD=0x01;//方式1 TL0=0xb0; TH0=0x3c; TR0=1; ET0=1; } void timer0_ISR(void) interrupt 1 { TL0=0xb0; TH0=0x3c;//50ms中断一次 single++; if(single==20) { kk++; single=0; } } void main() { int kk=0;//计数器 int single=0; timer0_init(); } TL0=0xb0; TH0=0x3c; 这两个是怎么算出来得

AVR定时器中断初值计算方法

AVR定时器中断初值计算方法 使用芯片ATMega16外部晶振 定时器1(16位定时器)寄存器TCCR1B=0x04设定256预分频要利用定时器定时1秒 1,4000000/256=15625说明定时器每当1/15625秒就会触发一次中断 2,65535-15625=49910计算出要累加多少次才能在1秒后出发定时器1的溢出中断 3,49910<==>C2F6将计算后的值换算成16进制 4,TCNT1H=0xC2;对寄存器赋值 TCNT1L=0xF6; ================================================= 例如用16位定时器TIMER1,4MHZ晶振,256分频,100ms定时,如何求得初值赋给TCNT1 65536-(4M/256)*= 其中,4M是晶体频率,是定时时长单位秒。 对于8位的定时器 T=(2^8-计数初值)*晶振周期*分频数=(2^8-计数初值)/晶振频率*分频数计数初值=2^8-T/晶振周期/分频数=2^8-T*晶振频率/分频数

因为AVR一指令一周期 IARForAVR精确延时 C语言中,想使用精确的延时程序并不容易。IAR中有这样的一个函数__delay_cycles(),该函数在头文件中定义,函数的作用就是延时N个指令周期。根据这个函数就可以实现精确的延时函数了(但不能做到100%精确度)。 实现的方法: 建立一个的头文件: #ifndef__IAR_DELAY_H #define__IAR_DELAY_H #include<> #defineXTAL8//可定义为你所用的晶振频率(单位Mhz) #definedelay_us(x)__delay_cycles((unsignedlong)(x*XTAL)) #definedelay_ms(x)__delay_cycles((unsignedlong)(x*XTAL*1000)) #definedelay_s(x)__delay_cycles((unsignedlong)(x*XTAL*1000000 )) #endif

WinCC 中定时器使用方法介绍

1、定时器功能介绍 2、脚本中定时器介绍 3、使用脚本实现更多定时器功能 3.1 整点归档 3.2 WinCC 项目激活时避免脚本初次执行及延迟执行脚本1 定时器功能介绍 WinCC 中定时器的使用可以使 WinCC按照指定的周期或者时间点去执行任务,比如周期执行变量归档、在指定的时间点执行全局脚本或条件满足时打印报表。WinCC 已经提供了一些简单的定时器,可以满足大部分定时功能。但是在有些情况下,WinCC 提供的定时器不能满足我们需求,这时我们就可以通过 WinCC 提供的脚本接口通过编程的方式实现定时的功能,因为脚本本身既可以直接调用 WinCC其他功能,比如报表打印,也可以通过中间变量来控制其他功能的执行,比如通过置位/复位归档控制变量来触发变量记录的执行。WinCC 提供了 C 脚本和 VBS 脚本,本文主要以全局 C 脚本编程为例介绍定时功能的实现。 2 脚本中定时器介绍既然在全局脚本中可以编程控制其他功能的执行,那么首先看看全局脚本的触发: 图1 脚本触发器分类如图1所示:脚本触发器分为使用定

时器和使用变量,定时器又分为周期执行和非周期执行一次,比如每分钟执行一次脚本属于周期执行,指定2012年10月1日执行一次属于非周期执行。使用变量触发脚本,即在变量发生变化时,脚本就执行一次,而变量的采集可以根据指定周期循环采集,或者根据变化采集,根据变化实际是1秒钟采集变量一次。 3使用脚本实现更多定时器功能 利用脚本自身的定时器,可以通过在脚本中编程的方式实现更多其它定时功能。 3.1整点归档 WinCC提供了变量归档,变量归档分为周期归档和非周期归档,不管是周期归档或非周期的归档,都又可以通过一些变量或脚本返回值来控制归档,比如:整点归档。下面的设置结合WinCC脚本,实现了在整点开始归档,归档五分种后停止归档,即每个小时仅归档前五分钟的数据。 软件环境:Windows 7 Professional Service Pack1 , WinCC V7.0 SP3 归档名称:ProcessValueArchive 归档变量:NewTag 归档周期:1 分钟 归档控制变量 startarchive C脚本触发周期:10秒 脚本代码: #include"apdefap.h" int gscAction( void ) { #pragma option(mbcs) #pragma code ("kernel32.dll");

555定时器的基本应用及使用方法

555定时器的基本应用及使用方法 我们知道,555电路在应用和工作方式上一般可归纳为3类。每类工作方式又有很多个不同的电路。在实际应用中,除了单一品种的电路外,还可组合出很多不同电路,如:多个单稳、多个双稳、单稳和无稳,双稳和无稳的组合等。这样一来,电路变的更加复杂。为了便于我们分析和识别电路,更好的理解555电路,这里我们这里按555电路的结构特点进行分类和归纳,把555电路分为3大类、8种、共18个单元电路。每个电路除画出它的标准图型,指出他们的结构特点或识别方法外,还给出了计算公式和他们的用途。方便大家识别、分析555电路。下面将分别 介绍这3类电路。 单稳类电路 单稳工作方式,它可分为3种。见图示。 第1种(图1)是人工启动单稳,又因为定时电阻定时电容位置不同而分为2个不同的单元,并分别以1.1.1 和1.1.2为代号。他们的输入端的形式,也就是电路的结构特点是: “RT-6.2-CT”和“CT-6.2-RT”。

第2种(图2)是脉冲启动型单稳,也可以分为2个不同的单元。他们的输入特点都是“RT-7.6-CT”,都是从2端输入。1.2.1电路的2端不带任何元件,具有最简单的形式;1.2.2电路则带 有一个RC微分电路。 第3种(图3)是压控振荡器。单稳型压控振荡器电路有很多,都比较复杂。为简单起见,我们只把它分为2个不同单元。不带任何辅助器件的电路为1.3.1;使用晶体管、运放放大器等辅助器件的电路为1.3.2。图中列出了2个常用电路。

双稳类电路 这里我们将对555双稳电路工作方式进行总结、归纳。 555双稳电路可分成2种。 第一种(见图1)是触发电路,有双端输入(2.1.1)和单端输入(2.1.2)2个单元。单端比较器(2.1.2)可以是6端固定,2段输入;也可是2端固定,6端输入。 第2种(见图2)是施密特触发电路,有最简单形式的(2.2.1)和输入端电阻调整偏置或在控制端(5)加控制电压VCT以改变阀值电压的(2.2.2)共2个单元电路。

定时器定时时间的计算(SystemCoreClock与OS_TICKS_PER_SEC的关系)

定时器定时时间的计算(SystemCoreClock与OS_TICKS_PER_SEC的关系) 定时器定时时间的计算 xcj 2015/06/03 09:23 假设定时器的时钟频率为f,f已知。那么定时器每计数一次所用时间为1/f。1/f代表了定时器的定时的时间精度(或最小计时单位)。 往计数器写的初值为Ticks,就是经过Ticks个周期后,定时器值变为0,定时时间到了。 如果我们要定时的时间为T,那么计算公式为: T = ticks * (1/f) (1) 整理后可得 ticks = f * T (2) 举个例子,假如定时器的时钟为SystemCoreClock,要定时1mS。 那么 ticks = SystemCoreClock * 1mS =SystemCoreClock * 1 * 10^(-3)=SystemCoreClock/1000 换个思路,如果已知定时器的时钟频率为f,要用定时器产生一个频率为f1的定时中断(T=1/f1)。根据公式(2)有 ticks = f /f1 (3) 上面的式子中 f1

STM32定时时间的计算

STM32 定时器定时时间的计算 假设系统时钟是72Mhz,TIM1 是由PCLK2 (72MHz)得到,TIM2-7是由 PCLK1 得到关键是设定时钟预分频数,自动重装载寄存器周期的值/*每1秒发生一次更新事件(进入中断服务程序)。RCC_Configuration()的SystemInit()的 RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE1_DIV2表明TIM3CLK为72MHz。因此,每次进入中断服务程序间隔时间为: ((1+TIM_Prescaler )/72M)*(1+TIM_Period )=((1+7199)/72M)*(1+9999)=1秒。定时器的基本设置如下: 1、TIM_TimeBaseStructure.TIM_Prescaler = 7199;//时钟预分频数例如:时钟频率=72/(时钟预分频+1)。 2、TIM_TimeBaseStructure.TIM_Period = 9999; // 自动重装载寄存器周期的值(定时时间)累计 0xFFFF个频率后产生个更新或者中断(也是说定时时间到)。 3、TIM_TimeBaseStructure.TIM_CounterMode=TIM1_CounterMode_Up; //定时器模式向上计数。 4、 TIM_TimeBaseStructure.TIM_ClockDivision = 0x0; //时间分割值。 5、 TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);//初始化定时器2。 6、 TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE); //打开中断溢出中断。 7、 TIM_Cmd(TIM2, ENABLE);//打开定时器或者: TIM_TimeBaseStructure.TIM_Prescaler = 35999;//分频35999,72M/ (35999+1)/2=1Hz 1秒中断溢出一次。 8、 TIM_TimeBaseStructure.TIM_Period = 2000; //计数值2000 ((1+TIM_Prescaler )/72M)*(1+TIM_Period )=((1+35999)/72M)*(1+2000)=1秒。 9、注意使用不同定时器时,要注意对应的时钟频率。例如TIM2对应的是APB1,而TIM1对应的是APB2 通用定时器实现简单定时功能 以TIME3为例作为说明,简单定时器的配置如下: void TIM3_Config(void) { TIM_TimeBaseInitTypeDefTIM_TimeBaseStructure; TIM_DeInit(TIM3); //复位TIM2定时器 /* TIM2 clock enable [TIM2定时器允许]*/ RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); /* TIM2 configuration */ TIM_TimeBaseStructure.TIM_Period = 49; // 0.05s定时 TIM_TimeBaseStructure.TIM_Prescaler = 35999; // 分频36000 TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; // 时钟分割TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //计数方向向上计数 TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); /* Clear TIM2 update pending flag[清除TIM2溢出中断标志] */

定时器产品使用说明书

定时器产品使用说明书 定时设置: 1、先检查时钟是否与当前时间一致,如需重新校准,在按住“时钟”键的同时,分别按住“星期”、“小时”、“分钟”键,将时钟调到当前准确时间。 2、按一下“设定”键,显示屏左下方出现“1开”字样(表示第一次开启的时间)。然后按“星期”调整本次设定的星期组合模式,再按“小时”、“分钟”键,输入所需开启的时间。 3、再按一下“设定”键,显示屏左下方出现“1关”字样(表示第一次关闭时间),再按“星期”、“小时”、“分钟”键,输入所需关闭的日期和时间。 4、继续按动“设定”键,显示屏左下方将依次显示“2开、2关、3开、3关……16开、16关”,参考步骤2、3设置以后各次开关时间。设置完成后,按一下“时钟”键返回。 5、如果每天不需设置16组开关,则必须按“清除”键,将多余各组消除,使其显示屏上显示“—:—”图样(不是00:00)。 6、按“模式”键,可以变换工作模式。总共有四种工作模式:A、液晶显示开(代表进入常开模式);B、液晶显示关(代表进入常关模式);C、由开进入自动(表示目前状态为开,等到下一组时间到后开始自动运行);D、由关进入自动(表示目前状态为关,等到下一组定时时间到后开始自动运行)。 当出现以下情况时: 1、定时器没有根据设定的程序开启或关闭,请检查设置程序是否正确或重新调整。 2、定时器长时间不用,显示模糊时,请将定时器接通电源充足,10分钟后无显示,按“复位”键,2-3秒。 3、如以上步骤均不能排除问题,请与公司或经销商联系维修。 注意事项: 1、对于那些因定时开关出错而可能发生的生命相关事故或者对社会产生重大影响的设备(如医疗设备等),请不要使用定时开关。 2、对于那些因定时开关出错而发生重大财产损失的设备(大型加热器或冷库),在使用本定时开关时,请务必是特性和性能的数值有足够的余量,并采取二重电路等安全对策。 3、请勿自行修理、分解或改造。 4、接通电源后请勿接触端子部分。本开关工作在无潮湿、腐蚀及高金属含量气体环境中。请勿沾染油或水。

51单片机定时器初值的计算

51单片机定时器初值的计算一。10MS定时器初值的计算: 1.晶振12M 12MHz除12为1MHz,也就是说一秒=1000000次机器周期。10ms=10000次机器周期。 65536-10000=55536(d8f0) TH0=0xd8,TL0=0xf0 2.晶振11.0592M 11.0592MHz除12为921600Hz,就是一秒921600次机器周期,10ms=9216次机器周期。 65536-9216=56320(dc00) TH0=0xdc,TL0=0x00 二。50MS定时器初值的计算: 1.晶振12M 12MHz除12为1MHz,也就是说一秒=1000000次机器周期。50ms=50000次机器周期。 65536-50000=15536(3cb0) TH0=0x3c,TL0=0xb0 2.晶振11.0592M 11.0592MHz除12为921600Hz,就是一秒921600次机器周期,50ms=46080次机器周期。 65536-46080=19456(4c00)

TH0=0x4c,TL0=0x00 三。使用说明 以12M晶振为例:每秒钟可以执行1000000次机器周期个机器周期。而T 每次溢出 最多65536 个机器周期。我们尽量应该让溢出中断的次数最少(如50ms),这样对主程序的干扰也就最小。 开发的时候可能会根据需要更换不同频率的晶振(比如c51单片机,用11.0592M的晶振,很适合产生串口时钟,而12M晶振很方便计算定时器的时间),使用插接式比较方便。 对12MHz 1个机器周期1us 12/fosc = 1us 方式0 13位定时器最大时间间隔 = 2^13 = 8.192ms 方式1 16位定时器最大时间间隔 = 2^16 = 65.536ms 方式2 8位定时器最大时间间隔 = 2^8 = 0.256ms =256 us 定时5ms,计算计时器初值 M = 2^K-X*Fosc/12 12MHz 方式0: K=13,X=5ms,Fosc=12MHz 则M = 2^13 - 5*10^(-3)*12*10^6/12= 3192 = 0x0C78 THx = 0CH,TLx = 78H, 方式1: K=16,X=5ms,Fosc=12MHz 则M = 2^16 - 5*10^(-3)*12*10^6/12= 60536 = 0xEC78 THx = ECH,TLx = 78H,

定时器-计数器

定时器 / 计数器 一、实验目的 ⒈学会8253芯片和微机接口的原理和方法。 ⒉. 掌握8253定时器/计数器的工作方式和编程原理。 二、实验内容 利用8253进行二次分频,控制LED灯亮10秒,灭10秒。 三、实验程序清单(在H8253.ASM的基础上修改) CODE SEGMENT ;H8253.ASM ASSUME CS: CODE ORG 1290H START: JMP TCONT TCONTRO EQU 0043H TCON0 EQU 0040H TCON1 EQU 0041H TCONT: MOV DX,TCONTRO MOV AL,36H ;0号通道控制字需要修改 OUT DX,AL MOV DX,TCON0 ;计数初值要按计算出的值来写 MOV AL,00H OUT DX,AL MOV AL,04H OUT DX,AL MOV DX,TCONTRO MOV AL,36H ;1号通道控制字需要修改 OUT DX,AL MOV DX,TCON1 MOV AL,00H ;计数初值要按计算出的值来写 OUT DX,AL MOV AL,02H OUT DX,AL JMP $ CODE ENDS END START

四、实验步骤 ⒈8253的GATE0、GATE1接+5V,OUT0接CLK1,CLK1接LED灯(L1)。 8253的CLK0插孔接分频器74LS393(左下方)的T2插孔,分频器的频 率源为8.0MHZ,T→8.0MHZ。 ⒉运行实验程序 在系统提示符“P.”状态下,联机运行程序 3. 观察实验现象,修改程序中的计数初始值,观察结果。

可编程定时器使用说明

可编程定时器使用说明 每天最多设定10组开关机,最少时间段为1分钟,最大(电流10A,可正常控制2200W电器工作,是现代家庭和办公的理想产品。 二:使用说明:(如果显示屏字迹不清晰,请先充电2小时以上) 1、键盘开锁:在时钟界面下,长按[取消/恢复]键3秒中以上。键盘开锁。在非时钟界面下,若30秒内未按任何键,会自动回到时钟界面,同时启动键盘锁。上锁后显示屏会有“”符号,解开后“”符号消失。 2、当前时间设定:键盘锁解除后,按住[时钟]键不放,同时按[星期]、[小时]、[分钟]键可调整星期和时钟; 3、程序设定:键盘锁解除后,按[定时]键进入定时状态。每按两次[定时]键时会进入下一组定时界面;若连续按[定时]键;1开、1关、2开、2关、、、、、、、10开、10关、时钟界面、1开、1关、2开、2关、、、、、、反复循环在定时设定界面,按[分钟]键可调整当次定时的分钟;在定时设定界面,按[小时]键可调整当次定时的小时;在定时设定界面,按[星期]键可调整当次定时的星期;在每一“开”或“关”设定界面时都有15种星期组合模式供选择,连续按[星期]键,显示如下 一二三四五六日、一、二、三、四、五、六、日、一三五、二四六、六日、一二三、四五六、一二三四五、一二三四五六、一二三四五六日、、、、、、反复循环; 用户根据控制需要可进行星期组合的选择。 在定时设定界面,按[取消/恢复]键时会将该组定时取消或恢复出来;在定时设定界面,按[时钟]键盘、时返回时钟状态; 4、开/自动/关:若连续[开/自动/关]键:

开、自动、关、自动、开、自动、、、、、、反复循环;有输出时,显示屏有灯符号和绿灯亮,无输出时,显示屏的灯符号消失和绿灯暗。只有“自动”状态时,程序内容才有效,红灯亮表示智能保姆插脚接通电源。 5、复位键:显示有任何异常,按一下背面的复位键,即可得到解决。

关于定时器初值的设定

深入理解需要精通定时器溢出原理: 晶振时钟12分频后得到机器时钟,定时器启动后会按机器时钟进位,16bit模式,定时器溢出频率就是机器时钟除以定时器多余“空间”, 例如定时器初值是0xffff,则每1个机器时钟都会溢出,产生中断 例如定时器初值是0xfffe,则每2个机器时钟会溢出 …… 例如定时器初值是【65535(0xffff)-999】,则每1000个机器时钟会溢出,或 例如定时器初值是【65536-1000】,则每1000个机器时钟会溢出 …… 依次类推 实例 例如:设T0工作方式1定时,定时时间为2ms,在P1.0引脚上输出周期为4ms的方波,设单片机的晶振频率为12MHz。 解:要在P1.0输出周期为4ms的方波,即要使P1.0每隔2ms取反1次。 T0方式1定时,则T0的方式字为:TMOD=01H 计算2ms定时T0的初值: 12M晶振,机器周期为1M,2ms就是X个机器周期 X=T(2ms)/T0(1s/(12M/12))=0.002/1/1000000=2000 定时器初值就是65536-X=65536-2000=63536=F830H 其中将高8位F8H赋给TH0,低8位30H赋给TL0。 采用查询方法,编程如下: 1. https://www.360docs.net/doc/e74458871.html, 0000H 3.AJMP MAIN 4. https://www.360docs.net/doc/e74458871.html,O 0100H 6.MAIN: MOV TMOD,#01H 7.MOV TL0,#30H 8.MOV TH0,0F8H 9.SETB TR0 10.LOOP: JBC TF0,NEXT 11.SJMP LOOP 12.NEXT: MOV TL0,#30H 13.MOV TH0,#0F8H 14.CPL P1.0 15.SJMP LOOP 复制代码 采用中断的方法,编程如下: https://www.360docs.net/doc/e74458871.html, 0000H 2.AJMP MAIN

89C51单片机定时器所定时间的计算以及写法

89C51单片机定时器时间的计算以及写法 今晚学单片机的时候,有一点儿问题,就去网上看了看,发现了很多人不会单片机定时,也就是具体时间的设定,不知道如何设定,而且有关方面的书籍、资料讲解又太过术语化,所以就写一篇通俗些的语言讲述一下如何定时。 为了便于理解,先讲解一点儿关于单片机内部定时器和计数器的基本知识,如果学过数字电路,就不用管这些,看下边的就好了: (1)由于单片机内部定时器、计数器均为八位,所以它们从0开始到计数计满,也就是能从0000 0000计数到1111 1111,即 2^0到2^16,转换成十进制,就是0——65536。 (2)外部的晶振电路提供的频率,到单片机内部,经过硬件电路,进行了12分频,不要问为什么,就这么记着就好了。比如外 部晶振是12MHZ的,那么到了单片机内部,用的频率就是 1MHz的。 89C51单片机常使用的晶振频率为12MHz和11.0592MHz两种,主要讲述这两种频率的,如果用其他的,只需要相应改变即可,下面分别讲述如何定时: (1)使用12MHz晶振: 单片机工作的频率f:12MHz/12=1MHz, 那么时钟周期T1:T1=1/f=1μs, 比如你要定时T2=50ms=50000μs,

你需要总时间T=T1 x T2=50000,也就是说你需要50000个周期才能走完你所要定的时间,当把数全都计满,是需要65536个周期,也就是说还有65536-50000=15536个周期没有走,那么,我们可以把这个初始值放到计数器里面,让它从15536开始计数,当计够50000个周期,也就计满了,即到达了65536。 就像水往水缸里流,你需要流满半缸水的时间,但是现在水缸是空的,你可以先把水缸灌半缸水,然后让它从半缸水开始流,当流满了的时候,也就到了你需要的那个时间。 然后,15536转成十六进制为:0x3CB0,将3C放到定时器的高8位,B0放到第8位,就完成了定时。 我们在写程序赋初始值的时候一般是这么写的,可以参考一下:TH0=0x3C; TL0=0xB0; 或者 TH0=(65536-50000)/256; TL0=(65536-50000)%256; PS:如果你定时是其他的,可以把根据我上边讲解的,把T=50000换成相应的数值即可。 (2)使用11.0592MHz晶振: 单片机工作的频率f:11.0592MHz/12=0.9216MHz, 那么时钟周期T1:T1=(1/0.9216)μs,

跑步计时器使用方法

随着人们越来越重视生活品质,对健康的要求也越来越高,现在很流行通过跑步来加强身体锻炼,因此跑步计时器开始在人们的生活中发挥着不可或缺的作用,或者说是扮演着重要的角色。在学生体育跑步考试,大型比赛等也离不开计时器。目前使用的计时器种类主要有跑步手表、跑步APP及跑步计时系统系统。 一、跑步手表 适用人群:个人日常锻练 使用方法:直接戴在手腕即可 跑步手表是跑步者一个常用的辅助工具,一般专业跑步表可以显示跑步的速度,距离,消耗卡路里,秒表,配合无线心率带还可以显示心率等信息帮助跑步者在运动中掌握自己的速度和体力分配达到最佳的练习目的。 跑步手表可以按照其运动传感器的类型分为三大类:计步手表,GPS 手表,心率手表。也有多种传感器结合的比如计步心率表, GPS 心率表, GPS 计步表。 二、跑步APP

适用人群:个人日常锻练 使用方法:下载到手机安装,锻炼时带上手机即可 运动类App是靠获取手机GPS定位信息之后,在App的地图上画出轨迹并计算出相关数据,计步是用一个传感器来感受你身体重心的变化,然后把它计作一步,再根据你设计的步长来换算成距离:距离=步数X步长 通过重力加速计感应,重力变化的方向,大小。与正常走路或跑步时的重力变化比对,达到一定相似度时认为是在走路或跑步。手机抖动达到比对,也会被认为是在走路或跑步,手机的重力感应不是那么的准确,计步也有偏差,个人对自己的步长知道的也不准确,导致这种计算距离的方式不是很准,这准方法的优点是不受环境限制,随时随地都能用。 三、跑步计时系统 适用人群:学校体育考试、大型跑步比赛

使用方法:安装在跑到上即可 电子发令器运动员起跑,令声响起时同步启动计时系统计时,通过RPSS激光检测系统,采用802.11WLAN规范和RF数据传输技术,通过WIFI 传输接收各跑道信息,记录实时成绩并将信息同步到显示器上,可使用有线或无线的方式从其他设备将姓名、组别等信息拷贝到平板电脑上。全自动智能短跑计时系统迈佳步由铝合金龙门架、激光感应器、高清显示器、中央控制主机、电子发令器、信息处理平板电脑六个部分组成,采用舞台钢架结构设计,安装于在道之上。 主要作用有1.统计运动员成绩:比赛结束后,计算机即统计出各运动员的起讫时刻、名次以及成绩,并打印成绩单;2.显示比赛实况:经过计算机处理后的信息,可以通过高清显示器、实时显示比赛成绩;3.储存比赛记录:由计算机记载的全部比赛记录。

51单片机定时器使用

51单片机定时器使用——小灯闪烁一、定时器工作方式设置TMOD=0x01 GATE =0 由TR=1控制开始计时; C/ T=0 作为定时时器使用; M1=0\M0=1 用作16位定时器 二、计数寄存器TH0\TL0初始值计算如定时0.02秒 普通51单片机12T模式: (一)手工计算例如晶振为10.6850MHZ 定时20毫秒 X/10.6850*1000000*12=20毫秒 X=17808 原始值T0=Y Y+17808=65536 Y=47728 利用科学计算器进行16进制转换为0Xb800 TH0=0x80 TL0=0x00 (二)单片机公式计算 TL0=T1MS;//初始化定时的计数初值(第8位),高8位丢失 (三)启动定时器(TR0=1),判断是否溢出(If(TF0==1){//}),时间到。 (四)闪烁的小灯代码 #include //P1 0脚接LED小灯 sbit led=P1^0;

//定义延时函数,循环cs次,时间长为20*cs毫秒 void delay20(unsigned int cs) { unsigned int shuL=0; TMOD=0x01; //初始值根据单片机时钟频率计算 TH0=0xB8; TL0=0x00; //启动定时器 TR0=1; while(shuL<=cs) { if(TF0==1) //查询是否溢出,溢出后复位溢出标志,赋初始值,循环计数加。{TF0=0; TH0=0xBA; TL0=0x70; shuL=shuL+1; } } } void main()

{ delay20(500); //小灯取反,亮500*20毫秒,即10秒; led=~led; delay20(500); }

AVR定时器中断初值计算方法

AVR 定时器中断初值计算方法 使用芯片AT Mega16 外部晶振 定时器1 (16位定时器)寄存器TCCR1B = 0x04 设定256预分频 要利用定时器定时1秒 1,4000000 / 256 = 15625 说明定时器每 当1/15625 秒就会触发一次中断 2,65535 - 15625 = 49910 计算出要累加多少次才能在1秒后出发定时器1的溢出中断 3,49910 <==> C2 F6 将计算后的值换算成16进制 4,TCNT1H = 0xC2 ; 对寄存器赋值 TCNT1L = 0xF6 ; ================================================= 例如用16位定时器TIMER1,4MHZ晶振,256分频,100ms定时,如何求得初值赋给TCNT1 65536-(4M/256)*= 其中,4M是晶体频率,是定时时长单位秒。 对于8位的定时器

T=(2^8-计数初值)*晶振周期*分频数=(2^8-计数初值)/晶振频率*分频数计数初值=2^8-T/晶振周期/分频数=2^8-T*晶振频率/分频数 因为AVR一指令一周期 IAR For AVR 精确延时 C语言中,想使用精确的延时程序并不容易。IAR 中有这样的一个函数__delay_cycles(),该函数在头文件中定义,函数的作用就是延时N个指令周期。根据这个函数就可以实现精确的延时函数了(但不能做到100%精确度)。 实现的方法: 建立一个的头文件: #ifndef __IAR_DELAY_H #define __IAR_DELAY_H #include <> #define XTAL 8 //可定义为你所用的晶振频率(单位Mhz)#define delay_us(x) __delay_cycles ( (unsigned lon g)(x * XTAL) )

VC中使用定时器的方法

1.启用一个定时器直接调用函数: SetTimer(1,500,NULL);//定义时钟1,时间间隔为500ms SetTimer(2,1000,NULL);//定义时钟2,时间间隔为1000ms 可以在按钮按下时启用定时器: void CTimeDlg::OnButton1() { // TODO: Add your control notification handler code here SetTimer(1,500,NULL);//定义时钟1,时间间隔为500ms SetTimer(2,1000,NULL);//定义时钟2,时间间隔为1000ms } 2.关闭定时器:可以在按钮中调用如下函数关闭某定时器: void CTimeDlg::OnButton2() { // TODO: Add your control notification handler code here KillTimer(1); //关闭1号定时器 KillTimer(2); //关闭2号定时器 } 3.添加定时器时间到的处理代码: 1)在开发界面中Ctrl+W 进入MFCclass wizard页面2)选择Message Maps选项卡 3)在Project中选择你的工程 4)在object Ids:中选择C…..Dlg

5)在Messages:中选择WM_TIMER,此时,Member functions中自动定位到: W OnTimer ON_WM_TIMER, 6) 单击EDIT code(或双击W OnTimer ON_WM_TIMER)自动进入如下函数:void CTimeDlg::OnTimer(UINT nIDEvent) { // TODO: Add your message handler code here and/or call default switch(nIDEvent) { case 1: //1号定时器应该处理的事情 //….. break; case 2: //2号定时器应该处理的事情 //….. break; } CDialog::OnTimer(nIDEvent); //此句VC自动生成 }

时钟源及定时器计算方法

时钟源及定时器计算方法示例一.时钟源 Fin=8MHz ●时钟源定义 规则: Fpllo必须大于20MHZ且少于66MHZ Fpllo * 2s必须少于170MHZ Fin/p推荐为1MHZ 或大于,但小于2MHZ 例:设晶振工作频率fin=8MHz,要求产生主时钟频率MCLK==64MHz m = (MDIV + 8),p = (PDIV + 2),s = SDIV 由于Fpllo * 2s<170MHZ →2s <170MHz/64 MHz = 2.65 →s=1=SDIV Fin/p推荐为1MHZ 或大于,但小于2MHZ, 1MHz<=Fin/p<2M Fin /2M<=P< Fin/1M →4<=P<8 p = (PDIV + 2) →2<=PDIV<6

Fpllo = (m * Fin)/(p * 2s) 注:答案不唯一 ●SDIV=1 (0x01) PLLCON[1:0] 2位0~3 ●取PDIV=2 (0x02) PLLCON[9:4] 6位0~63 ●MDIV=?(0x38) PLLCON[19:12] 8位0~255 由 Fpllo=MCLK=( MDIV +8)*8M/( PDIV +2)*2SDIV =( MDIV +8)*8M/((2+2)*21)= 64MHz →( MDIV +8)*8M/8= 64MHz →MDIV +8=64 →MDIV=56 PLLCON:MDIV[19:12],PDIV[9:4],SDIV[1:0] 0x38 0x2 0x1 ●对PLLCON赋值方法一: PLLCON=0b0011 1000 0000 0010 0001或PLLCON=0x380201 ●对PLLCON赋值方法二: PLLCON= ((MDIV<<12)| (PDIV<<4)|( SDIV<<0)) 二.定时器定义 定时器输入时钟频率f in=MCLK/{预分频值+1}/{再分频值}= MCLK/{ prescaler +1}/{DIV},其中预分频值为0~255,再分频DIV为2,4,8,16,32 例:设系统输入主时钟频率为MCLK=64MHz,要求定时器Time0输出脉冲时间间隔T=5s,占空比为20%。 注:答案不唯一。 ●由定时器输出频率要求可知:f out=1/T=1/5=0.2Hz ●设取DIV= 32 Prescaler=199 Prescaler:0~255 ●由f in= MCLK/{ prescaler +1}/DIV=64MHz/200/32=10KHz 尽量保持整除 ●TCNTBn = f in / f out=10KHz/0.2=50K=50000 TCNTBn寄存器为16位:0~65535 ●占空比20%,可得TCMPBn= TCNTBn*20%=50000*20%=10000,即定时器从50000递 减计数至10000时(即TCMPBn= TCNTBn),Tout输出高电平 定时器配置及启动!

科德定时器使用说明

科德定时器使用说明 [日期:2012-08-14] 来源:网络作者:林永菁[字体:大中小] 定时器可用于定时充电、定时热水器、定时煮饭、定时开关电热毯、定时饮水机、定时各种设备等,方便生活和工作。下面介绍科德定时器的功能及使用说明: 一、调整当前时间 使用定时器时,须先将定时器的显示时间调整到当前时间。 (一)按住“时钟”键的同时,分别按“星期”、“小时”、“分钟”键,调整到当前的时间。(每按一次增加一小时,长按可快速调整。) (二)按“时钟”键3秒后,当前时间增加1小时,同时液晶屏显示“夏令时”字样,进入夏令时功能,再按“时钟”键3秒,取消夏令时功能,时间自动减少1小时。 二、设置程序 (一)按“设定”键,即可进入定时模式设置,屏幕上显示“1开”。

(二)按“小时”、“分钟”和“星期”,即第一组定时开始工作的时间,其中,按“星期”键,可选择不同星期组合模式。可根据需求,定时器只在设定的星期数中工作。 (三)再按“设定”键,屏幕上显示“1关”,即第一组定时关闭时间,时间设置参考“1开”设置方法。以此类推,最多可设置20组开与关。 (四)设置完成后按“时钟”键返回当前时间。 注: 1. 如果每天不需要设定20组,而其他组已经设定,必须按“清除”键,将多余各组的时间程序清除。 2. 定时器设置完成后,应按“设定”键检查多次定时设定情况是否与实际情况一致。如有异,请按时间需要进行调整或重新设定。 三、定时器工作模式选择 (一)在当前时间状况下,连续按“模式”键,显示屏的左侧将循环显示“自动关”、“开”、“自动开”、“关”四种模式,你根据需要进行模式选择。 (二)四种模式释意:“开”:定时器一直有电源输出,没有定时功能;“关”:定时器无电源输出,呈关闭状态;“自动开”:定时器接通电源时有电源输出,之后按设定的程序工作;“自动关”:定时器接通电源时无电源输出,之后按设定的程序工作。 注: 1. 以当前的时间为标准,当前时间处在设定时间段中间,选择“自动开”的模式;当前时间处在设定时间段之前或之后,选择“自动关”的模式。

定时器说明书

科德定时器的功能及使用说明 一、调整当前时间 使用定时器时,须先将定时器的显示时间调整到当前时间。 1、按住“时钟”键的同时,分别按“星期”、“小时”、“分钟”键,调整到当前的时间。(每按一次增加一小时,长按可快速调整)。 2、按“时钟”键3秒后,当前时间增加1小时,同时液晶屏显示“夏令时”字样,进入夏令时功能,再按“时钟”键3秒,取消夏令时功能,时间自动减少1小时。 二、设置程序 1、按“设定”键,即可进入定时模式设置,屏幕上显示“1开”。 2、按“小时”、“分钟”和“星期”,即第一组定时开始工作的时间,其中,按“星期”键,可选择不同星期组合模式。可根据需求,定时器只在设定的星期数中工作。 3、再按“设定”键,屏幕上显示“1关”,即第一组定时关闭时间,时间设置参考“1开”设置方法。以此类推,最多可设置20组开与关。 4、设置完成后按“时钟”键返回当前时间。 注:(1)如果每天不需要设定20组,而其他组已经设定,必须按“清除”键,将多余各组的时间程序清除。 (2)定时器设置完成后,应按“设定”键检查多次定时设定情况是否与实际情况一致。如有异,请按时间需要进行调整或重新设定。 三、定时器工作模式选择 1、在当前时间状况下,连续按“模式”键,显示屏的左侧将循环显示“自动关”、“开”、“自动开”、“关”四种模式,你根据需要进行模式选择。 2、四种模式释意:“开”:定时器一直有电源输出,没有定时功能;“关”:定时器无电源输出,呈关闭状态;“自动开”:定时器接通电源时有电源输出,之后按设定的程序工作;“自动关”:定时器接通电源时无电源输出,之后按设定的程序工作。 注:(1)以当前的时间为标准,当前时间处在设定时间段中间,选择“自动开”的模式;当前时间处在设定时间段之前或之后,选择“自动关”的模式。 (2)程序设定后即使断电也不会丢失,因为定时器本身就有一个可充电电池在里面,具有保存数据的功能。

相关文档
最新文档