精华内容
下载资源
问答
  • 定时器T0查询方式P2口8位控制LED闪烁
  • 定时器T0的应用

    千次阅读 2019-09-10 18:32:57
    定时器T0方式0 定时器T0方式1 定时器T0方式2 定时器T1 ,方式3

    定时器T0,方式0

    当TMOD的M1、M0位为00时,定时器工作在方式0,其为13位计数器。由TLx的低5位和THx的高8位构成。TLx溢出则向THx进位,THx溢出则讲TCON的TFx置1。使用12MHz的晶振,定时器1ms的初值为:THx = (8192-1000) / 32; TLx = (8192-1000) % 32; 因为是13位计数器,TLx为5位,最多装入32个数,所以对32取模;

    • 程序现象:定时器控制LED灯每隔1S状态取反
    • 程序说明:LED连接在P2^0;
    #include <reg52.h>
    
    sbit Led0=P2^0;
    
    int count=0;
    
    void main()
    {
        TMOD |= 0x00; //T1保持不变,T0设置为方式0
        
        TH0 =(8192-1000) / 32;        //定时1ms
        TL0 = (8192-1000) % 32;         
        
        ET0 = 1;  //允许定时器/计数器T0溢出中断(IE)
        EA = 1;  //IE,开启总开关
        TR0=1;   //开启计数(TCON)
        while(1)        //避免退出程序,循环等待
        {
            if(count >= 1000)   //计时1s,即1000次中断
            {
                Led0 = ~Led0;      // LED状态取反
                count = 0;
            }
        }
    }
    
    void Timer0() interrupt 1  //中断服务函数
    {
        TH0 =(8192-1000) / 32;        //定时1ms
        TL0 = (8192-1000) % 32;  //方式0重装初值
        count ++;
    }
    
    

    定时器0,方式1

    当TMOD的M1、M0位为01时,定时器工作在方式1,其为16位计数器。使用12MHz的晶振,定时器1ms的初值为:TH0 = (65536-1000) / 256; TL0 = (65536-1000) % 256; 因为是16位计数器,TL0为8位,最多装入256个数,所以对256取模;

    • 程序现象:定时器控制LED灯每隔1S状态取反
    • 程序说明:LED连接在P2^0;
    #include <reg52.h>
    
    sbit Led0=P2^0;
    
    int count=0;
    
    void main()
    {
        TMOD |= 0x01; //T1保持不变,T0设置为方式1
       
        TH0 = (65536-1000) / 256; //定时1ms
        TL0 = (65536-1000) % 256;         
        
        ET0 = 1;  //允许定时器/计数器T0溢出中断(IE)
        EA = 1;  //IE,开启总开关
        TR0=1;   //开启计数(TCON)
        
        while(1)        //避免退出程序,循环等待
        {
            if(count >= 1000)   //计时1s,即1000次中断
            {
                Led0 = ~Led0;      // LED状态取反
                count = 0;
            }
        }
    }
    
    void Timer0() interrupt 1  //中断服务函数
    {
        TH0 = (65536-1000) / 256;   //定时1ms
        TL0 = (65536-1000) % 256;   //方式1重装初值
       
        count ++;
    }
    
    

    定时器0,方式2

    当TMOD的M1、M0位为10时,定时器工作在方式2,其为8位自动重装计数器。因为方式0、方式1需要手动装入初值,所以就会影响定时器精度。因此方式2可以用做频率发生器。方式2中,TH0为高8位常数缓冲器,当TL0低8位溢出时,TH0将自动填充到TL0中,使TL0初值重新计数
    使用12MHz的晶振,定时100us的初值为:TH0 =(256-100) ; TL0 = (256-100) ; 因为不分高低位输入了,所以不需要取模。

    • 程序现象:定时器控制LED灯每隔1S状态取反
    • 程序说明:LED连接在P2^0;
    #include <reg52.h>
    
    sbit Led0=P2^0;
    
    int count=0;
    
    void main()
    {
        TMOD |= 0x02; //T1保持不变,T0设置为方式2
       
        TH0 = (256-100);        //不需要取模了,定时100us
        TL0 = (256-100);      
        
        ET0 = 1;  //允许定时器/计数器T0溢出中断(IE)
        EA = 1;  //IE,开启总开关
        TR0=1;   //开启计数(TCON)
        
        while(1)        //避免退出程序,循环等待
        {
            if(count >= 10000)   //计时1s,即10000次中断
            {
                Led0 = ~Led0;      // LED状态取反
                count = 0;
            }
        }
    }
    
    void Timer0() interrupt 1  //中断服务函数
    {
        count ++;
    }
    
    

    定时器0 ,方式3

    当TMOD的M1、M0位为11时,定时器工作在方式3,T0为两个独立的8位计数器TH0、TL0。方式3只适用于定时器/计数器T0,定时器/计数器T1设置为方式3时,相当于TR1=0,不工作(T1通常被用作串口波特率发生器)

    名称描述
    TL08位计数器;溢出后TF0置1,同时需要重装初值;
    TH08位计数器;溢出后TF1置1,同时需要重装初值;
    • 注意:因为定时器/计数器T1的中断标志位已被占用,所以定时器/计数器T1不能再用中断

    • 程序现象:定时器控制LED0每隔2S状态取反,LED1每隔0.5S状态取反。LED1亮、灭一次后,LED0亮或者灭

    • 程序说明:LED0连接在P2^0;LED1连接在P2^1

    #include <reg52.h>
    
    sbit Led0 = P2^0;
    sbit Led1 = P2^1;
    
    int count0=0,count1=0;
    
    void main()
    {
        TMOD |= 0x03; //T1设置不变,T0设置为方式3
       
        TH0 = (256-100);  //定时100us
        TL0 = (256-50);      //定时50us
        
        ET0 = 1;  //允许定时器/计数器T0溢出中断(IE)
        ET1 = 1;  //允许定时器/计数器T1溢出中断(IE)
        EA = 1;  //IE,开启总开关
        TR0=1;   //开启定时器/计数器T0计数(TCON)
        TR1=1;   //开启定时器/计数器T1计数(TCON)
        
        while(1)        //避免退出程序,循环等待
        {
            if(count0 >= 20000)   //计时2s,即20000次中断
            {
                Led0 = ~Led0;      // LED状态取反
                count0 = 0;
            }
            if(count1 >= 10000)   //计时0.5s,即10000次中断
            {
                Led1 = ~Led1;      // LED状态取反
                count1 = 0;
            }
        }
    }
    
    void Timer0() interrupt 1  //中断服务函数
    {
        TL0 = (256-100);  //定时100us
        count0 ++;
    }
    void Timer1() interrupt 3  //中断服务函数
    {
        TH0 = (256-50);  //定时50us
        count1 ++;
    }
    
    
    展开全文
  • //用定时器T0查询方式P0口8位控制LED闪烁

    #include<reg52.h>
    #define uchar unsigned char
    #define uint unsigned int
    void main (void)
    {   uchar i=0;
    	TMOD=0x01;                                            //使用定时器T0的模式1
    	TH0=(65536-50000)/256;                                //定时器T0的高8位赋值
    	TL0=(65536-50000)%256;                                //定时器T0的低8位赋值
    	TR0=1;                                                //启动定时器T0
    	TF0=0;                                                //定时器的溢出标志位   先清零
    	P0=0xff;                                              //关闭LED灯
    	while(1)                                              //无限循环等待查询
    	{
    		while(TF0==1)
    		{  
    			i++;			
    			if(i==20)                             //LED的闪烁,间隔1s
    			{
    				i=0;
    
    				P0=~P0;
    
    			}
    			TF0=0;
    			TH0=(65536-50000)/256;
    			TL0=(65536-50000)%256;
    
    		}
    	}
    }

     //用定时器T0查询方式P0口8位控制LED闪烁


    展开全文
  • 实现功能:定时器T0模拟串口 使用芯片:STC15F104E 晶振:内部晶振 11.0592MHZ 编译环境:Keil
  • AT89S52单片机C语言应用
  • C51单片机运用定时器T0中断实现电子时钟,含有原理图和相关程序设计。
  • 定时器T0的中断实现长时间定时
  • 定时器T0的中断控制1位LED闪烁
  • 定时器T0的中断实现渴望主题曲的播放
  • 定时器T0控制输出高低宽度不同的矩形波
  • //用定时器T0查询方式P0口8位控制LED闪烁 T1查询方式P1口8位控制LED闪烁 #include // 包含52单片机寄存器定义的头文件 #define uchar unsigned char #define uint unsigned int /******************************...
    //用定时器T0查询方式P0口8位控制LED闪烁
     T1查询方式P1口8位控制LED闪烁
    
    #include<reg52.h>        //  包含52单片机寄存器定义的头文件
    #define uchar unsigned char
    #define uint  unsigned int
    /**************************************************************
    函数功能:主函数
    **************************************************************/
    uint p,q;
    void main(void)
    {
    p=0;//由于闪烁速度太快,看不出来,所以通过计数实现延迟   
    q=0;//由于闪烁速度太快,看不出来,所以通过计数实现延迟                   
    TMOD=0x11;            //使用定时器T1的模式1   T0的模式1
    TH0=(65536-50000)/256;  //定时器T0的高8位赋初值
    TL0=(65536-50000)%256;  //定时器T0的高8位赋初值
    TR0=1;                //启动定时器T0
    TF0=0;                //溢出标志位 先清零     

    TR1=1;                //启动定时器T1
    TF1=0;                //溢出标志位 先清零    
    TH1=(65536-50000)/256;  //定时器T0的高8位赋初值
    TL1=(65536-50000)%256;  //定时器T0的高8位赋初值     

             
    P0=0xff;              //关闭LED灯
    P1=0x00;              //打开LED灯
       while(1){//无限循环等待查询
        
      while(TF0==1||TF1==1){ 
    if(TF0==1){
    p=p+1;
    TF0=0;
            TH0=(65536-50000)/256;  //定时器T0的高8位赋初值
        TL0=(65536-50000)%256;  //定时器T0的高8位赋初值
    }
    if(TF1==1){
    q=q+1;
    TF1=0;
            TH1=(65536-50000)/256;  //定时器T1的高8位赋初值
        TL1=(65536-50000)%256;  //定时器T1的高8位赋初值
    }
      }
      if(p>40){
    p=0;
    P0=~P0;
      } 
      if(q>40){
    q=0;  
    P1=~P1;
      }


    }
     }
    展开全文
  • 定时器T0的模式2测量正脉冲宽度
  • //用定时器T0查询方式P0口8位控制LED闪烁 T1查询方式P1口8位控制LED闪烁 #include // 包含52单片机寄存器定义的头文件 #define uchar unsigned char #define uint unsigned int /******************************...
    //用定时器T0查询方式P0口8位控制LED闪烁
     T1查询方式P1口8位控制LED闪烁
    
    #include<reg52.h>        //  包含52单片机寄存器定义的头文件
    #define uchar unsigned char
    #define uint  unsigned int
    /**************************************************************
    函数功能:主函数
    **************************************************************/
    uint p,q;
    void main(void)
    {
    p=0;//由于闪烁速度太快,看不出来,所以通过计数实现延迟   
    q=0;//由于闪烁速度太快,看不出来,所以通过计数实现延迟                   
    TMOD=0x22;            //使用定时器T1的模式2   T0的模式2
    TL0=TH0=0;  //定时器T0的高8位赋初值  如果要2秒延迟大概需要中断 2000000/ 256  =7812

    TR0=1;                //启动定时器T0
    TF0=0;                //溢出标志位 先清零     

    TR1=1;                //启动定时器T1
    TF1=0;                //溢出标志位 先清零    
    TL1=TH0=1;  //定时器T1的高8位赋初值  如果要2秒延迟大概需要中断 2000000/ 256  =7812

             
    P0=0xff;              //关闭LED灯
    P1=0x00;              //打开LED灯
       while(1){//无限循环等待查询
        
      while(TF0==1||TF1==1){ 
    if(TF0==1){
    p=p+1;
    TF0=0;
    }
    if(TF1==1){
    q=q+1;
    TF1=0;
    }
      }
      if(p>7812){
    p=0;
    P0=~P0;
      } 
      if(q>7812){
    q=0;  
    P1=~P1;
      }


    }
     }
    展开全文
  • 本文主要讲了用单片机定时器T0和P1.7端口产生连续矩形脉冲的程序,希望对你的学习有所帮助。
  • 01 - 修改默认定时器T0的场合   为什么要修改RTX Tiny的默认定时器T0,具有以下2个场合:   1、T0已经有用途。在本来已经完成的系统下移植RTX Tiny,本来的系统定时器T0已经有比较复杂的用途,因此不适合使用T0...
  • ConfigTimer(TIMER0,1);//TIMER0,TIMER1配置T0,T1 ConfigTimer(TIMER0,1);//TIMER0,TIMER1配置T0,T1
  • 51单片机,通过使用定时器T0,利用方式2达到输出PWM脉冲并控制占空比程序。
  • 每个功能都是用2个文件写的,方便移值,学会这种写法,新手少走很多弯路 方便移植的好处就是---辛苦一次,一劳永逸 89C52定时器T0,T1,T2定时器配置方法(4x4按键用法) 实际是把这些内容总结了一下
  • C51单片机定时器T0,T1的常用基本设置

    万次阅读 2017-05-06 18:30:11
    提醒器计时可以使用单片机的定时器T0、T1来做,计时的定时器用T1来做,工作方式2(8位自动装载),系统运行提示的定时器用T0来做,工作方式1(16位定时) 代码如下 #include "reg52.h" #define time_...
  • 时器T016位最小可分辨到100us。...用函数去改变定时器的时间,传入参数为你想要得ms数, 可得到精确的MS级别定时(已经用示波器看过,正确的),最小可设置到100us,分辨率再小就没法设置了。有P1.6输出查看定时效果
  • 3、主函数:二、各个定时器工作方式:方式0:方式2:方式3:借鉴:郭天祥《新概念51单片机C语言教程》一、原理:51单片机,拥有两个定时器,用来中断计数,分别是T0和T1。而52单片机和51单片机的定时器是一样的,...
  • 定时器T0的中断控制8位LED闪烁

    千次阅读 2013-07-18 14:45:45
    #include #define uchar unsigned char #define uint unsigned int uint i; void main() { i=0; EA=1; //打开总中断 TMOD=0x01; //使用定时器T0工作方式1 ET0=1;
  • #include #define uint unsigned int #define uchar unsigned char uint i,j; main(){ ...//定时器T0中断允许 ET1=1;//定时器T1中断允许 TR0=1;// 启动定时器T0 TR1=1;// 启动定时器T1
  • 功能说明:红外遥控器解码,只使用定时器T0定时100us进行按键解码,处理按键短按与长按,将解码的数据通过串口打印。 /*************************************** 功能说明:红外遥控器解码,定时器T0定时100us进行...
  • //选择为定时器0模式,工作方式1,仅用TR0打开启动。 // TH0=0XFC; //给定时器赋初值,定时1ms // TL0=0X18; TH0=0XF4; //3ms TL0=0X48; ET0=1;//打开定时器0中断允许 EA=1;//打开总中断 TR0=1;//打开定时器 ...
  • 每个功能都是用2个文件写的,方便移值,学会这种写法,新手少走很多弯路 方便移植的好处就是---辛苦一次,一劳永逸 把定时器T0T1T2的用法代码都写了
  • #include #define uint unsigned int #define uchar unsigned char uint i,j; main(){ ...//定时器T0中断允许 ET1=1;//定时器T1中断允许 TR0=1;// 启动定时器T0 TR1=1;// 启动定时器T1
  • 先看一下定时器框图: 我们选择图中红色圈出的...我们的T0定时器的初始化函数如下: void TIM0_Init(void) { T0CS = 0; //选择定时模式  PSA =1;//不分配预分频器 T0 = 205; //计数初始值 T0IE =1; AIE = 1;

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 7,004
精华内容 2,801
关键字:

定时器t0工作方式