返回首页

单片机定时器初始化(单片机定时器初始化代码)

来源:www.haichao.net  时间:2022-12-15 13:23   点击:81  编辑:admin   手机版

1. 单片机定时器初始化代码

51单片机中的定时器控制字中有两个控制位TR0、TR1,分别用于启动、停止定时器的计数。 任何时刻,当TR0/TR1为1时,T0/T1定时器计数;当TR0/TR1为0时,T0/T1定时器停止计数。

置TR0/TR1为1的指令一般应该在初始化程序或主程序或其他程序中,不能在其自己的中断服务程序中。

因为CPU能够进入运行该定时器的中断服务程序,肯定是该定时器已经启动并且计时已到。

2. 单片机定时器初始化代码是什么

TMOD可以同时设置定时器1和定时器0的工作方式即计数方式。由于定时器/计数器的功能是由软件编程确定的,所以一般在使用定时/计数器前都要对其进行初始化,使其按设定的功能工作。初始化的步骤一般如下: 1、确定工作方式(即对TMOD赋值); 2、预置定时或计数的初值(可直接将初值写入TH0、TL0或TH1、TL1); 3、根据需要开放定时器/计数器的中断(直接对IE位赋值); 4、启动定时器/计数器(若已规定用软件启动,则可把TR0或TR1置“1”;若已规定由外中断引脚电平启动,则需给外引脚加启动电平。当实现了启动要求后,定时器即按规定的工作方式和初值开始计数或定时)。

3. 单片机定时器初始化代码是多少

TMOD = 0x20; // 定时器1工作于8位自动重载模式, 用于产生波特率 TH1=TL1=0xE8; // 波特率1200 SCON = 0x50; // 设定串行口工作方式1 允许接收,相当于下面三句 //SM0=0; //SM1=1; //REN=1; PCON =0x00; // 波特率不倍增 SMOD = 0 TR1 = 1;

4. 51单片机定时计数器初始化

51单片机中的定时器控制字中有两个控制位TR0、TR1,分别用于启动、停止定时器的计数。任何时刻,当TR0/TR1为1时,T0/T1定时器计数;当TR0/TR1为0时,T0/T1定时器停止计数。

置TR0/TR1为1的指令一般应该在初始化程序或主程序或其他程序中,不能在其自己的中断服务程序中。

因为CPU能够进入运行该定时器的中断服务程序,肯定是该定时器已经启动并且计时已到。

5. 单片机定时器程序编写

因为周期为10毫秒,定时器中断方式,所以初值应该为:65536-(10/2)*1000=65536-5000TH0=(65536-5000)/256TL0=(65536-5000)%256程序如下:ORG0000HLJMPMAINORG000BHLJMPT0ISRORG0030HMAIN:MOVTMOD,#01HMOVTH0,#HIGH(65536-5000)MOVTL0,#LOW(65536-5000)SETBTR0SETBET0SETBEASJMP$T0ISR:CLRTR0MOVTH0,#HIGH(65536-5000)MOVTL0,#LOW(65536-5000)SETBTR0CPLP1.0RETIEND

6. 定时器的初始化编程

还可以使用现成的TPC4-4TD型定时程序控制器,可以控制4路负载,还有4路输入开关的控制,输出定时0——200小时,一共60行设置程序,每行程序有一个延时定时器和一个输出定时器。采用表格设置,无需编程。不仅可以实现定时控制,还可以实现程序控制。不过这个控制器一般都是用于工业设备控制使用,价格380元。还有控制更多输出电器负载的型号。 下面补充回答你对单片机编程的问题: 用单片机编制简易家电控制器并不复杂,只要你学过汇编语言或者单片机C语言也是比较简单的入门程序。程序基本涉及到三个部分,一是按键扫描程序,二是显示程序,这两个程序配合实现对家电控制器操作和设置;三是定时部分,定时部分使用单片机内部的定时器,需要编写定时器的初始化和定时器的中断程序。最好亲自尝试程序的编写,有个这样的课题也是使自己提升的最佳机会。 有个捷径就是参考别人的示例程序,拿来理解修改,这也是学习过程,可以快速掌握。下的功夫越多,自己获得的就更多。

7. 单片机定时器初始化程序代码

TR1=1;是启动计数的标志位,那TR1=0;就是停止计数了。 C语言程序就这么写。 汇编写法: SETB TR1;启动 CLR TR1;停止

8. 51单片机定时器初始化编程的具体过程

51单片机的pwm调速频率主要通过一个定时器和一个IO口来实现PWM的输出。在一个周期里面,首先让IO口输出高电平,并定时一定的时间然后再将IO口输出低电平,定时一定的时间。然后在while里面循环输出即可。需要改变占空比的话就改变高电平的时间与低电平的时间比。我们来看看51单片机的PWM调速程序。

  51单片机PWM调速程序

  /*******************************************************************/ /* 程序名:PWM直流电机调速 */

  /* 晶振:11.00592 MHz CPU型号:AT89C51 */

  /* 直流电机的PWM波控制,可以直接的调速从0到20级的调速 */

  /*****************************************************************/ #include《reg51.h》

  #define TH0_TL0 (65536-1000)//设定中断的间隔时长

  unsigned char count0 = 50;//低电平的占空比 unsigned char count1 = 0;//高电平的占空比

  bit Flag = 1;//电机正反转标志位,1正转,0反转

  sbit Key_add=P2 ^ 0; //电机减速 sbit Key_dec=P2 ^ 1; //电机加速 sbit Key_turn=P2 ^ 2; //电机换向

  sbit PWM1=P2^6;//PWM 通道 1,反转脉冲 sbit PWM2=P2^7;//PWM 通道 2,正转脉冲

  unsigned char Time_delay;

  /************函数声明**************/ void Delay(unsigned char x); void Motor_speed_high(void); void Motor_speed_low(void); void Motor_turn(void); void Timer0_init(void);

  /****************延时处理**********************/ void Delay(unsigned char x)

  {

  Time_delay = x;

  while(Time_delay != 0);//等待中断,可减少PWM输出时间间隔

  }

  /*******按键处理加pwm占空比,电机加速**********/ void Motor_speed_high(void)//

  {

  if(Key_add==0)

  {

  Delay(10); if(Key_add==0)

  {

  count0 += 5;

  if(count0 》= 100)

  {

  count0 = 100;

  }

  }

  while(!Key_add);//等待键松开

  }

  }

  /******按键处理减pwm占空比,电机减速*****/ void Motor_speed_low(void)

  {

  }

  }

  /************电机正反向控制**************/ void Motor_turn(void)

  {

  if(Key_turn == 0)

  {

  Delay(10); if(Key_turn == 0)

  {

  Flag = ~Flag;

  if(Key_dec==0)

  {

  Delay(10); if(Key_dec==0)

  {

  count0 -= 5;

  if(count0 《= 0)

  {

  count0 = 0;

  }

  }

  while(!Key_dec );

  }

  while(!Key_turn);

  }

  }

  /***********定时器0初始化***********/ void Timer0_init(void)

  {

  TMOD=0x01; //定时器0工作于方式1 TH0=TH0_TL0/256; TL0=TH0_TL0%256; TR0=1; ET0=1; EA=1; }

  /*********主函数********************/ void main(void)

  {

  Timer0_init(); while(1)

  {

  Motor_turn(); Motor_speed_high(); Motor_speed_low();

  }

  }

  /**************定时0中断处理******************/ void Timer0_int(void) interrupt 1 using 1

  {

  TR0 = 0;//设置定时器初值期间,关闭定时器 TL0 = TH0_TL0 % 256;

  TH0 = TH0_TL0 / 256 //定时器装初值 TR0 = 1;

  if(Time_delay != 0)//延时函数用

  {

  Time_delay--;

  }

  if(Flag == 1)//电机正转

  {

  PWM1 = 0;

  if(++count1 《 count0)

  {

  PWM2 = 1; } else PWM2 = 0;

  if(count1 》= 100) { count1=0; } }

  else //电机反转

  {

  PWM2 = 0;

  if(++count1 《 count0) { PWM1 = 1; } else PWM1 = 0;

  if(count1 》= 100)

  {

  count1=0;

  }

  }

  }

9. 单片机定时器代码详解

定时器初值=2^n-m*晶振值/分频系数;n:定时器模式,有13,8,16三种;m:要定的时间长度,晶振值:12MHz或6Mhz分频系数:12定义10毫秒;定时器模式1,晶振频率12MHz定时器初值=2^16-10ms*12Mhz/12.=65536-10000.=5536注意单位换算;

10. 单片机定时器初始值

当TL0溢出后,会自动将TH0的初值装入TL0,所以只需要初始时候对TH0、TL0进行赋值,中断程序中就不需要再装入初值了。

顶一下
(0)
0%
踩一下
(0)
0%