精华内容
下载资源
问答
  • 51单片机定时器初值计算器 51单片机定时器初值计算器 51单片机定时器初值计算器
  • pic定时器初值计算器

    2012-05-16 17:04:56
    pic定时器初值计算器
  • 单片机定时器初值计算 单片机定时器初值计算
  • 本文主要讲了单片机定时器初值计算公式,下面一起来学习一下
  • STC89C52单片机波特率初值计算器和定时器初值计算器。
  • 用C写的单片机定时器初值计算器,控制台程序。见笑了。
  • 本文主要讲了一下关于PIC18F4520定时器初值设置,希望对你的学习有所帮助。
  • 定时器初值计算

    千次阅读 2019-04-03 14:52:00
    1. 定时器初值的计算: (1)计算出机器周期------每次定时计算器加1所用的时间。 (2)根据你要定时的时间去算出初值:  假设你要定时Xms(X<65.535ms),计数次数C: Xms/机器周期。  用65535-C=定时计数器...

    1. 定时器初值的计算:

    (1)计算出机器周期------每次定时计算器加1所用的时间。

    (2)根据你要定时的时间去算出初值:

        假设你要定时Xms(X<65.535ms),计数次数C: Xms/机器周期。

        用65535-C=定时计数器的初值(方式1).

        TH0=(定时计数器初值)/256

        TL0= (定时计数器初值)%256.

    2. 定时器的设置

    (1)设置TMOD

    (2)计算出初值

    (3)启动定时计数器

    (4)设置中断程序

     

    转载于:https://www.cnblogs.com/rolingball-creation/p/10648790.html

    展开全文
  • 计算PIC单片机定时器初值,方便,快捷,精确。
  • 利用51定时器的相关知识写了一个“定时器初值计算”控制台程序,能够实现51定时器三种不同工作方式下的初值计算输出。软件使用VS2012编写,仅仅是控制台程序,没有界面,有兴趣的话可以自己用C#或者QT写个界面,或者...
  • 51定时器初值

    2021-02-03 21:24:24
    51定时器初值时钟周期机器周期指令周期初值计算 时钟周期 是指振荡源的周期,,定义为时钟脉冲的倒数 外部晶振12M 则时钟周期为 1s/12M = 1S/12 000 000 = 1/12us 外部晶振11.0592M 则时钟周期为 1s/11.0592M = 1S...

    时钟周期

    是指振荡源的周期,,定义为时钟脉冲的倒数

    外部晶振12M
    则时钟周期为	1s/12M	=	1S/12 000 000		=	1/12us
    
    外部晶振11.0592M
    则时钟周期为	1s/11.0592M	=	1S/11 059 200		=	1/11.0592us
    
    外部晶振24M
    则时钟周期为	1s/24M	=	1S/24 000 000		=	1/24us
    

    机器周期

    单片机执行一单位指令所需要的 时钟周期 个数

    机器周期也称为CPU周期。
    在计算机中,为了便于管理,常把一条指令的执行过程划分为若干个阶段(如取指、译码、执行等),每一阶段完成一个基本操作。完成一个基本操作所需要的时间称为机器周期。
    一般情况下,一个机器周期由若干个时钟周期组成。 如 1T,就表示,需要 1个时钟周期; 12T 即为 12个时钟周期。 这些都只是
    一单位指令的时间(如自增、自减等),多单位指令时间进行倍乘(如赋值语句需要2个机械周期,即乘以2倍),
    传统的8051单片机就是12T的,即完成1个单位指令所需时间为12个时钟周期 。 1T的完成1个单位指令所需时间则为1个机器周期。

    1T		12Mhz的机器周期为1/12us
    12T		12Mhz的机器周期为1us
    

    1T的要比12T的速度更快

    指令周期

    CPU完成一条指令的时间叫指令周期

    一般一条完整的指令包括:取指周期、间址周期、执行周期、中断周期。

    初值计算

    1. 确定机器周期是多少,如1T,或6T,或12T
    2. 确定晶振频率,如11.0592Mhz,或24Mhz,12Mhz,8Mhz
    3. 确定定时时间,10ms,20ms,50ms等
    /*
    1T		12Mhz	1ms
    0XFF FF - (1ms/1s)*(12 000 000*1)
    值为53,536,0XD1 20
    将其高八位填入TH,低八位填入TL
    */
    TH1	= 0xD1;
    TL1 = 0X20;
    /*
    12T		11.0592		50ms
    0XFF FF   -  (50ms/1s)*(11 059 200/12)
    值为19456,0X4C00
    将其高八位填入TH,低八位填入TL
    */
    TH0 = 0x4C;
    TL0 = 0x00;
    

    0XFFFF-(初值/1s)*(晶振频率/?T)

    
    unsigned char Return_TH(unsigned char S,unsigned MHz,unsigned char unsigned char Tim_us)
    {
    	unsigned char TH;
    	TH = (0XFFFF-((Tim/1 000 000)*((MHZ*1 000 000)/S))))&0XFF
    	return TH;
    }
    
    unsigned char Return_TL(unsigned char S,unsigned MHz,unsigned char unsigned char Tim_us)
    {
    	unsigned char TL;
    	TL = (0XFFFF-((Tim/1 000 000)*((MHZ*1 000 000)/S))))>>8;
    	return TL;
    }
    
    int main()
    {
    	unsigned char a,b,c,TH1,TL1;
    	printf("请输入---分频数S---晶振频率Mhz----定时时间us--");
    	scanf("%d%d%d",&a,&b,&c);
    	TH1 = Return_TH(a,b,c);
    	TL1 = Return_TL(a,b,c);
    }
    

    差不多这样,毕竟有现成的工具可以用,HHH

    展开全文
  • 这是一种帮助51单片机自动计算定时器初值的软件,使用简单,方便
  • 51单片机定时器初值计算软件,对于单片机编程人员很有帮助。
  • 51单片机定时器初值计算以及初值计算软件 不想搞懂计算原理的直接跳到文章末尾,使用初值计算软件来解决有关初值计算的问题 51单片机定时器初值计算部分 时钟周期,也称为振荡周期:定义为时钟脉冲的倒数,在...

    51单片机定时器初值计算以及初值计算软件


    不想搞懂计算原理的直接跳到文章末尾,使用初值计算软件来解决有关初值计算的问题
    在这里插入图片描述

    51单片机定时器初值计算部分

    • 时钟周期,也称为振荡周期:定义为时钟脉冲的倒数,在单片机中也就等于晶振频率的倒数。

    eg:12M晶振的单片机,时钟周期=振荡周期=1/12 us。

    • 机器周期:定义为完成一项基本操作所需要的时间,称为机器周期。
    • 51单片机中1个机器周期由6个状态周期组成,也就是12个时钟周期=12 x 1/12 us =1 us
    • 一个机器周期的时间是1us,如果要延时1ms就是1000个机器周期.
    • 定时器/计数器有4种工作方式

    – 方式0:2^13
    – 方式1:2^16
    – 方式2:2^8
    – 方式3:双8位

    • 计数器的初值X = 计数器最大计数值M - 预装载值

    计数器最大计数值M,就是根据工作方式0-3的选择不同而决定的最大计数值。

    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

    1. 晶振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*106/12= 3192 = 0x0C78
    THx = 0CH,TLx = 78H,

    方式1: K=16,X=5ms,Fosc=12MHz 则 M = 2^16 - 5*10(-3)*12*106/12= 60536 = 0xEC78
    THx = ECH,TLx = 78H,
    50ms 12MHz THx = 3CH,TLx = B0H,
    10ms THx = D8H,TLx = F0H,

    方式2: 最大时间 2^8Fosc/12 = 0.256ms

    以上部分内容来自:http://www.elecfans.com/emb/danpianji/20171109577375.html

    void main()
    {
    TOMD|=0x01;         //设置TMOD工作方式寄存器的M0M1为01,对照表格即为定时器/计数器的4种模式中的16位定时器/计数器模式
        TH0=(65536-46080)/256; //装初值11.0592M晶振定时50ms数为46080
        TL0=(65536-46080)%256;
        EA=1;    //中断总开关
        ET0=1;   //开启定时器/计数器的中断允许位置为1
        TR0=1;   //
        return 0;
    }
    void T0_time() interrupt 1
    {
        TH0=(65536-46080)/256;
        TL0=(65536-46080)%256;
        num++;
        if(num==20)
        {
            num=0;
        }
    }
    
    定时器与延时的区别
    1. 延时
      cpu在执行完p1=254之后,cpu又开始执行执行Delay函数。由于cpu执行每条指令的时间是固定的,所以通过一定数量指令的执行,可以实现延时(即让当前的外设状态保持不变,cpu在做无用功);
      在复杂的系统中,与中断相比,延时不准确。因为delay(50000)是0.5s,如果在期间发生了中断,那么时间就不只0.5s了。

    51单片机初值计算软件

    链接:https://pan.baidu.com/s/1lNwpQFjjl1fDz79BwuFU0w 
    提取码:xvha 
    
    展开全文
  • 51串口计算 串口调试 定时器初值计算 郭天祥同款 51串口计算 串口调试 定时器初值计算 郭天祥同款
  • 单片机定时器初值计算软件,无需自己计算初值
  • 51定时器初值计算 可以轻轻松松的帮你计算初值 很方便的
  • 51单片机—定时器初值设定工具
  • PIC 单片机定时器初值计算器,没什么好说的,要的就下载,不要的就不要看。^_^
  • 定时器初值计算.rar

    2021-03-01 06:52:33
    单片机定时器编程中,初值的计算,VB源码
  • 51单片机定时器初值计算详解

    千次阅读 多人点赞 2019-10-24 23:42:44
    学习完毕,又顺手利用刚学到定时器的相关知识写了一个“定时器初值计算”控制台程序,能够实现:51定时器三种不同工作方式下的初值计算输出,既实用,又能加深对所学知识的理解。 软件使用VS2012编写,实现效果...

     

    前言:

           本文详细介绍了51单片机学习过程中定时器的初值计算问题以及相关概念,力求把每一个学习过程中的可能会遇到的难点说清楚,并举相关的例子加以说明。学习完毕,又顺手利用刚学到定时器的相关知识写了一个“定时器初值计算”控制台程序,能够实现:51定时器三种不同工作方式下的初值计算输出,既实用,又能加深对所学知识的理解。


         

       软件使用VS2012编写,实现效果如下,仅仅是控制台程序,没有界面,有兴趣的话可以自己用C#或者QT写个界面,或者做一些功能上拓展,跟我们平常学习51资料中附带的定时器初值计算小工具一样哦!

          

     

       附51系列单片机控制台程序定时器初值核心计算函数源码(完整VS2012工程源码下载

    /*
     * 函数名:Timer_Initial_calculation
     * 描述  :定时器初值计算函数
     * 输入  :无
     * 输出  :无
     */
    void Timer_Initial_calculation()
    {
    	int N;	//计数值 
    	int n;  //定时器位数 
    	int TimeDigit;	//计数总值 
    
    	N = (t*fosc*1000) / 12;     //计算计数值N 
    	//定时器位数选择
    	switch(y)
    	{
    		case 0: 
    			n=13;
    			TimeDigit = pow(2.0,n);      //定时器位数选择 
    			TimingMax = TimeDigit*12/fosc/1000;		//计算定时最长时间 
    			THX = (TimeDigit - N)/32;	//初值高八位 
    			TLX = (TimeDigit - N)%32;	//初值低八位 
    			break;
    		case 1: 
    			n=16;
    			TimeDigit = pow(2.0,n);      //定时器位数选择 
    			TimingMax = TimeDigit*12/fosc/1000;		//计算定时最长时间 
    			THX = (TimeDigit - N)/256;	//初值高八位 
    			TLX = (TimeDigit - N)%256;	//初值低八位 
    			break;
    		case 2: 
    			n=8;
    			TimeDigit = pow(2.0,n);      //定时器位数选择 
    			TimingMax = TimeDigit*12/fosc/1000;		//计算定时最长时间  
    			THX = TimeDigit - N;		//初值高八位 
    			TLX = TimeDigit - N;		//初值低八位 
    			break;
    		default:
    			break;
    	}
    	
    }

       

    下面开始正式介绍定时器初值计算相关内容:

     

    一、系统周期:

    时钟周期

    时钟周期也称为振荡周期,定义为时钟脉冲的倒数(可以这样来理解,时钟周期就是单片机外接晶振的倒数,例如12M的晶振,它的时间周期就是1/12 us),是计算机中最基本的、最小的时间单位。在一个时钟周期内,CPU仅完成一个最基本的动作。对于某种单片机,若采用了1MHZ的时钟频率,则时钟周期为1us;若采用4MHZ的时钟频率,则时钟周期为250ns。由于时钟脉冲是计算机的基本工作脉冲,它控制着计算机的工作节奏(使计算机的每一步都统一到它的步调上来)。显然,对同一种机型的计算机,时钟频率越高,计算机的工作速度就越快。但是,由于不同的计算机硬件电路和器件的不完全相同,所以其所需要的时钟周频率范围也不一定相同。我们学习的8051单片机的时钟范围是1.2MHz-12MHz。 在8051单片机中把一个时钟周期定义为一个节拍(用P表示),二个节拍定义为一个状态周期(用S表示)。

    机器周期

     在计算机中,为了便于管理,常把一条指令的执行过程划分为若干个阶段,每一阶段完成一项工作。例如,取指令、存储器读、存储器写等,这每一项工作称为一个基本操作。完成一个基本操作所需要的时间称为机器周期。一般情况下,一个机器周期由若干个S周期(状态周期)组成。8051系列单片机的一个机器周期同6个S周期(状态周期)组成。前面已说过一个时钟周期定义为一个节拍(用P表示),二个节拍定义为一个状态周期(用S表示),8051单片机的机器周期由6个状态周期组成,也就是说一个机器周期=6个状态周期=12个时钟周期。

    指令周期

    指令周期是执行一条指令所需要的时间,一般由若干个机器周期组成。指令不同,所需的机器周期数也不同。对于一些简单的的单字节指令,在取指令周期中,指令取出到指令寄存器后,立即译码执行,不再需要其它的机器周期。对于一些比较复杂的指令,例如转移指令、乘法指令,则需要两个或者两个以上的机器周期。

    通常含一个机器周期的指令称为单周期指令,包含两个机器周期的指令称为双周期指令

     

    二、定时器初值的计算:

    例:对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 

    方式3 仅适用于T0,此时T0分成两个8位计数器,T1停止计数

    当选用定时器的方式1时,设机器周期为Tcy,定时器产生一次中断的时间为t,那么需要计数的个数N=t/Tcy,装入THX和TLX中的数分别为:

    THX = (2^16 - N)/256     TLX = (2^16 -N )%256(此处的X为定时器0或定时器1

    公式为:(2^y - X)*Tcy = t

            Tosc= 1/ fosc

    一个机器周期 = 12个时钟周期 = 12/fosc

    溢出速率 = 1 / 溢出时间        故:初值X = 2^y – t/Tcy

               THX = 高八位   TLX = 低八位

          注:

             X:定时器初值

             N:计数值

             y:定时器工作方式

             fosc:晶振频率

               Tcy:机器周期,Tosc:时钟周期  Tcy = 1/Tosc

     

    例: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),这样对主程序的干扰也就最小。

     

    三、定时器不同工作方式下赋初值问题:

    1)定时器方式013为计数器,由TL05位(高3位未用)和TH08为组成,因此定时器方式0最多能装载的数为2^19=8192个。当使用定时器方式0时,计数初值

    THX=8192-N/32,TLX=(8192-N)%32.   N 为计数个数=t/Tcy.

    2)定时器方式116为计数器,由TLX8位和THX8位组成的加1计数器。因此最多能装载2^16=65536个数。计数初值为:

    THX=65536-N/256,TLX =(65536-N)%256

         在定时器的方式0和方式1中,当计数溢出后,计数器变为0,因此在循环定时或循环计数时,必须使用软件反复设置计数初值,这样会影响到定时精度,也会使程序设计比较麻烦,使用定时器方式2可解决反复装初值所带来的问题。

    3)定时器方式28位初值自动重装的定时/计数器,THX被作为常数缓冲器,当TLX计数溢出时,在使溢出标志TFX1的同时,还会自动地将THX中的常数重新装入TLX中。方式2适合用作较精确的脉冲信号发生器。计数初值为:

        THX=256-NTLX=256-N

    4)方式3只适用于定时/计数器T0。此时,T0被分成两个独立的计数器。需要注意:当T0工作在方式3时,T1一定不要有中断的场合,因为工作方式3时,T0会占用T1的中断标志位。

     

    取模与取余问题:

    高八位和低八位就像我们十进制的十位和个位,就比如整数89=8*10+9*1;十位上算的“8”当然就是要8910求模,而个位上的9则是8910求余了!至于为什么TH0TL0赋初值要对256求模或求余,那是因为高八位和低八位都是8byte的,也就是它最大只能是“11111111”,化成十进制就是255,再加最前面的“00000000”也就是256个位矢量,所以就要对256求模或求余。

    因为高TH0和低TH0都是八位的 最多能装的数据是255,如果不对255取模取余的话 是装不下的。

           定时器方式013为计数器,由TL05位(高3位未用),所以应对2^5也就是32进行取余、取模。

     

           定时器模式2是自动重装模式, TH0TL0都要用到,TL0是真正的定时/计数器,肯定要有一个初值,在此基础上向上计数,溢出时就将TH0的值装入TL0,不用再次人工写程序干预

     

    四、计数器初值的计算:

    计数器的初值计算要比定时器的相对简单,例如:定时器T1工作在方式2的计数器状态,计算T1的初值:

                     初值X = 2^8 – 计数值

     

    展开全文
  • PIC18定时器初值计算

    2014-09-28 21:55:15
    关于PIC18系列MCU定时器初值计算,使用电子表格填入MCU频率定时时间即可。
  • 51单片机定时器初值的计算

    千次阅读 2018-04-12 15:51:33
    51单片机定时器初值的计算: 二、50MS定时器初值的计算: 1.晶振12M 12MHz除12为1MHz,也就是说一秒=1000000次机器周期。50ms=50000次 机器周期。 65536-50000=15536(3cb0) TH0=0x3c,TL0=0xb0 2.晶振...
  • 51定时器初值计算

    2021-01-18 15:01:32
    它的意思是,定时器实现1毫秒定时,求定时器初值。 因为定时器计数65536后,就会清零,想实现特定时间定时,就要自己计算起点,也叫做初值 因为1个机器周期等于12个时钟周期,因此FOSC/12,得到的是一个机器周期...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 10,704
精华内容 4,281
关键字:

定时器初值是什么