精华内容
下载资源
问答
  • 使用51单片机定时器T1在工作方式2下生成占空比40%的方波,并且在仿真软件里调试出来
  • 注意:要知道,查询法是占用CPU时间的,帮不是一种好方法。 /********************************************** ...描述:T1用于定时,方式1,定时时间50ms,查询方式,定时时间到,TF1=1,利用模拟串口发送字符0x68 *

    注意:要知道,查询法是占用CPU时间的,帮不是一种好方法。

    /**********************************************
    方法1:延时法
    硬件:11.0592MHz晶振,STC89C52,RXD P1.0 TXD P1.1
    波特率:9600
    描述:T1用于定时,方式1,定时时间50ms,查询方式,定时时间到,TF1=1,利用模拟串口发送字符0x68
    **********************************************/
    #include "reg52.h"
    #define uchar unsigned char
    
    sbit P1_0 = 0x90;
    sbit P1_1 = 0x91;
    sbit P1_2 = 0x92;
    
    #define RXD P1_0
    #define TXD P1_1
    #define WRDYN 44 					//写延时
    #define RDDYN 43 					//读延时
    
    void Delay2cp(unsigned char i);
    
    //往串口写一个字节
    void WByte(uchar input)
    {
    	uchar i=8;
    	TXD=(bit)0;						//发送启始位
    	Delay2cp(39);
    
    	//发送8位数据位
    	while(i--)
    	{
    		TXD=(bit)(input&0x01);      //先传低位
    		Delay2cp(36);
    		input=input>>1;
    	}
    
    	//发送校验位(无)
    	TXD=(bit)1;						//发送结束位
    	Delay2cp(46);
    }
    
    //从串口读一个字节
    uchar RByte(void)
    {
    	uchar Output=0;
    	uchar i=8;
    	uchar temp=RDDYN;
    
    	//发送8位数据位
    	Delay2cp(RDDYN*1.5);			//此处注意,等过起始位
    	while(i--)
    	{
    		Output >>=1;
    		if(RXD) Output   |=0x80;	//先收低位
    		Delay2cp(35);				//(96-26)/2,循环共占用26个指令周
    	}
    
    	while(--temp)					//在指定的时间内搜寻结束位。
    	{
    		Delay2cp(1);
    		if(RXD)break;				//收到结束位便退
    	}
    
    	return Output;
    }
    
    //延时程序*
    void Delay2cp(unsigned char i)
    {
         while(--i);					//刚好两个指令周期。
    }
    
    void main()
    {
    	TMOD=0x10; 						//T1 方式1
    
    	TH1=0x9E;  						//50ms初始值
    	TL1=0x58;						//50ms初始值
    
    	TR1=1;							//启用定时器T1
    	
    	while(1)
    	{
    		while(!TF1){;}
    		TH1=0x9E;
    		TL1=0x58;
    
    		WByte(0x68);
    		
    		TF1=0;
    	}
    }
    
    


     

    展开全文
  • 在单片机的学习过程中,单片机定时器的合理设置和应用是非常关键的一步,也是刚开始接触单片机知识的新人工程师们比较容易出错误的一个环节之一。在今天的文章中,我们为大家总结了单片机定时器应用过程中的两大常见...

    在单片机的学习过程中,单片机定时器的合理设置和应用是非常关键的一步,也是刚开始接触单片机知识的新人工程师们比较容易出错误的一个环节之一。在今天的文章中,我们为大家总结了单片机定时器应用过程中的两大常见问题进行实时解析,希望能够对各位新人工程师的学习提供一定帮助。

    01bfa723cd036c3a1bbf2d50112a5c2c.png

    问题一:51单片机的T0、T1定时器四种工作方式各有什么特点?

    在单片机定时器的应用过程中,定时器在进行设置时会有四种不同的工作方式,合理选择相应的工作方式可以帮助工程师快速完成及时设置。下面我们就来逐一讲解一下这四种不同的计时方式。方式0是单片机计时器的第一种计时方式,这一方式13位计数模式。方式1则采用16位计数模式,方式2采用8位自动重装入计数模式,这两种技术模式也是目前在单片机应用过程中最常使用的及时方式。最后一种单片机定时器的计时方式是方式3,这一模式下只有T0有的双8位计数模式。

    ae03b44dca5593c7dbf0c42353ac13af.png

    问题二:在设置单片机定时器的过程中出现了错误,应该怎么进行误差纠正?

    在使用单片机定时器进行计时设置的过程中,出现设置错误的情况是在所难免的,这就需要我们采取一些方法对已经造成的错误进行纠正了。由于单片机的机器周期通常为1μs~2μs,因此定时误差一般应在0μs~20μs之内,对于一般应用,此误差可以忽略,但是对于精确度要求比较高的应用场合,此误差必须进行校正。定时误差是定时溢出后转入执行定时处理语句段之间所耗费的时间,此时间主要由定时溢出转入定时处理语句段所必须执行的指令或硬件过程产生。

    93aeb5433553c8404410af0336209899.png

    定时误差校准的一个比较简单的方法式,在定时溢出响应后,立刻停止定时器的计数工作,同时快速读出当时计数值,然后将完成这一任务的程序段执行时间考虑进去,作为修正因子校正定时初值,以下程序段以中断处理方式为例来进行说明。需要注意的是,由于执行从指令clrTR0(停止计数)到指令setbTR0(重新开启计数)之间的指令需8个机器周期,应将此消耗考虑进去,因此该程序将定时误差缩小在1个机器周期内

    展开全文
  • 定时器T1查询方式控制单片机发出1KHz音频
  • 单片机定时器T1对串口的作用

    千次阅读 2011-06-01 20:24:00
    定时器T1的作用是充当波特率发生器,在串行通信中一般使用它的工作方式2 #include #define uint unsigned int #define uchar unsigned char sbit LED1 = P0^0; sbit LED2 = P0^3;...

    定时器T1的作用是充当波特率发生器,在串行通信中一般使用它的工作方式2

    #include
    #define uint unsigned int
    #define uchar unsigned char
    sbit LED1 = P0^0;
    sbit LED2 = P0^3;
    sbit K1 = P1^0;
    void Delay(uint x)
    {
    uchar i;
    while(x--)
    {
    for(i=0;i<120;i++);
    }
    }
    void putc_to_SerialPort(uchar c)
    {
    SBUF = c;
    while(TI == 0);
    TI = 0;
    }
    void main()
    {
    uchar Operation_NO = 0;
    SCON = 0x40;
    TMOD = 0x20;
    PCON = 0x00;
    TH1 = 0xfd;
    TL1 = 0xfd;
    TI = 0;
    TR1 = 1;
    while(1)
    {
    if(K1 == 0)
    {
    while(K1==0);
    Operation_NO=(Operation_NO+1)%4;
    }
    switch(Operation_NO)
    {
    case 0:
    LED1=LED2=1; break;
    case 1:
    putc_to_SerialPort('A');
    LED1=~LED1;LED2=1;break;
    case 2:
    putc_to_SerialPort('B');
    LED2=~LED2;LED1=1;break;
    case 3:
    putc_to_SerialPort('C');
    LED1=~LED1;LED2=LED1;break;
    }
    Delay(10);
    }
    }

    展开全文
  • C51单片机定时器T0,T1的常用基本设置

    万次阅读 2017-05-06 18:30:11
    提醒器计时可以使用单片机定时器T0、T1来做,计时的定时器T1来做,工作在方式2(8位自动装载),系统运行提示的定时器用T0来做,工作在方式1(16位定时) 代码如下 #include "reg52.h" #define time_...

    有时候带手机不方便,可以又想知道时间,这时候可以用蜂鸣器做一个音频的时间提醒器,每60秒发一声提醒

    提醒器计时可以使用单片机的定时器T0、T1来做,计时的定时器用T1来做,工作在方式2(8位自动装载),系统运行提示的定时器用T0来做,工作在方式1(16位定时)

    代码如下

    #include "reg52.h"
    
    #define uint unsigned int
    #define uchar unsigned char
    
    #define time_set0 5000//设置定时器0的计时长度
    
    #define th0 (65536-time_set0)/256//计算定时器高8位装入值
    
    #define tl0 (65536-time_set0)%256 //计算定时器低8位装入值
    #define time_set1 256-200//设置定时器1的计时长度
    
    sbit P1_1=P1^1;//系统运行指示灯管脚
    
    sbit beep=P1^7;//蜂鸣器管脚
    
    uint cnt=0;//计数器
    uint cnt2=0;//计数器
    uint cnt3=0;//计数器
    
    void delay(uint i)//延时函数
    {
    uchar k;
    for(;i>0;i--)
    for(k=0;k<200;k++);
    }
    
    timer0()interrupt 1 using 1//定时器0设置
    {
        cnt++;//每次中断增加一
    if(cnt>100)//计数时间5ms*100=500ms
    {
    cnt=0;
    }
    
        TH0=th0;//重装定时器
        TL0=tl0;
    }
    
    timer1()interrupt 3 using 2//定时器1设置
    {
        cnt2++;
    if(cnt2>=5000)//计数时间0.2ms*5000=1s
    {
    cnt2=0;
    cnt3++;//秒计数器增加一
    P1_1=!P1_1;//指示灯每秒翻转一次
    }
    }
    
    void main()
    {
        TMOD=0x21;//设置定时器1方式2(高4位0010,自动重装TH->TL,计满255),定时器0方式1(低4位0001,16位定时器,可计满65535)
        TH0=th0;//装载定时器初始值
        TL0=tl0;
        TH1=time_set1;
        TL1=time_set1;
        EA=1;//开总中断
        ET0=1;//开定时器0中断
        ET1=1;//开定时器1中断
        TR0=1;//打开定时器0
        TR1=1;//打开定时器1
    while(1)
    {
      if(cnt3>=60)//计时60秒
      {
      cnt3=0;//计时清零
    beep=0;//打开蜂鸣器
    delay(100);//延时100
    beep=1;//关闭蜂鸣器
      }
    }
    }

    展开全文
  • 单片机 定时器/计数器

    千次阅读 多人点赞 2018-05-26 15:18:48
    单片机 定时器/计数器 ... 定时器/计数器是一个加“1”计数器,来一脉冲即做加1计数,直至寄存器各位全为1,再来一脉冲,计数器回0且使TF0(定时器T0)TF1(定时器T1)置1表示定时时间到,计数值乘以单片机的机...
  • 定时器中断是单片机最重要的一个功能,一开始学的时候遇到了不少的问题,通过不断地学习解决了不少问题,其实学会之后也没有什么。在这里我整理了一下定时器的使用,分享给大家希望能帮助大家。
  • 单片机C语言实例47:用定时器T1中断控制两个LED以不同周期闪烁.txt
  • 51单片机之232串口实现-任务要求Fosc为6MHz,定时器T1为工作模式2任务要求发送机(甲机)接受机(乙机) 任务要求 Fosc为6MHz,定时器T1为工作模式2,串口工作模式1,波特率为4800。 1、通过波特率计算定时器T1时间...
  • AT89S52单片机C语言应用
  • 单片机定时器的使用可以说非常简单,只要掌握原理,有一点的C语言基础就行了。要点有以下几个: 1. 一定要知道英文缩写的原形,这样寄存器的名字就不用记了。 理解是最好的记忆方法。好的教材一定会给出所有英文...
  • 目前常用的单片机中往往都配备了定时器/计数器。在AT89S52芯片内包含有三个16位的定时器/计数器:T0... AT89S52单片机定时器/计数器的基本部件是两个8位的计数器(T1计数器分为高8位TH1和低8位TL1,T0计数器的高8位是T
  • 单片机定时器

    2019-05-24 01:55:03
    NULL 博文链接:https://yunchow.iteye.com/blog/356614
  • 51单片机定时器总结

    2020-08-28 19:34:35
    意思就是当GATE=1时,定时器的启动有二个位控制,即TR0和int0(这是对定时器0来说的,T1的话上二位就是1)。定时器只有在上二位都是一的情况下才会启动。我们就可以利用这个功能来测量脉冲的宽度。
  • 51单片机定时器/计数器T0|T1的四种工作方式

    千次阅读 多人点赞 2020-06-23 15:27:14
    • 选择方式0、方式1、方式2时,T0|T1的工作情况相同 • 选择方式3时,T0|T1的工作情况不同 方式0:13位定时器/计数器,TH0的高8位,TL0的低5位 方式1:16位定时器/计数器,TH0的高8位,TL0的低8位 方式2:自动重...
  • /********************************************** 方法1:延时法 ...描述:T1用于定时,方式1,定时时间50ms,中断方式,定时时间到,TF1=1,利用模拟串口发送字符0x69 ******************************
  • 51单片机定时器(T0/T1)的使用与配置流程

    万次阅读 多人点赞 2020-03-10 12:27:07
    如:TMOD=0x01 // 0000 0001  GATE=0,定时器仅受TCON寄存器中TRx(x=0,1)来控制  GATE=1,定时器TCON寄存器中TRx(x=0,1)和外部中断引(INT0或INT1)上的电平状态来共同控制。  C/T=1,为计数器模式;  ...
  • 单片机定时器中断

    2013-12-17 21:54:17
    单片机定时器中断  51单片机内部共有两个16位的可编程的定时器/计数器T0、T1,而52单片机内部多了一个T2定时器/计数器。通过设置相关的特殊功能寄存器,就可以选择启用定时或计数功能。  需要注意的是,定时器...
  • 51单片机定时器

    2014-10-02 15:00:45
    51单片机共有两个定时器,T0与T1,
  • 51单片机 定时器学习

    2021-04-11 15:30:04
    一、定时器介绍 定时器:51单片机定时器属于单片机的内部...注意:定时器的资源和单片机的型号是关联在一起的,不同的型号可能有不同的定时器个数和操作方式,但一般来说,T0和T1的操作方式是所有51单片机共有的。 2
  • 单片机 定时器计数器

    2018-09-03 18:07:26
    单片机课件,结合书本知识所融汇成的课件,是上课所讲内容全面
  • 单片机定时器总结

    千次阅读 2020-05-23 20:05:27
    最近在学习郭天祥老师的单片机教程,遇到很多问题,期间看了很多博客,终于对单片机定时器有些了解,在此像CSDN优秀的博主表示感谢,由于这是我第一次写博客(研究内容很浅)为了以后复习方便以及希望各位优秀的...
  • 51单片机 定时器及其应用

    万次阅读 多人点赞 2018-07-17 20:38:23
    89c51单片机内部有两个16位的定时/计数器,即定时器T0和定时器T1单片机的定时功能其实就是通过计数来实现的,当单片机每一个机器周期产生一个脉冲时,计数器就加一。定时器的应用涉及到中断方面的知识,可以先了解...
  • 51单片机定时器的使用

    千次阅读 2016-03-10 10:43:08
    51单片机定时器的应用,简单易懂
  • 1. 首先附上代码例子 #include <AT89X52.H> #define uint unsigned int #define uchar unsigned char uint i,j; main(){ i=0;...//定时器T1中断允许 ...//使用定时器T0的模式1 定时器T1的模式1
  • AT89S52单片机C语言应用

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 4,650
精华内容 1,860
关键字:

单片机定时器t1