精华内容
下载资源
问答
  • 2021-04-21 18:08:47
    #include <reg52.h>
    #define uchar unsigned char
    #define uint unsigned int
    	sbit led1=P1^0;
    uchar num;
    void main()
    {
    	TMOD=0x01;
    	TH0=(65536-45872)/256;
    	TL0=(65536-45872)%256;
    	EA=1;
    	ET0=1;
    	TR0=1;
    	while(1)
    	{
    		if(num==20)
    		{
    			num=0;
    			led1=~led1;
    		}
    	}
    }
    void T0_time() interrupt 1
    {
    	TH0=(65536-45872)/256;
    	TL0=(65536-45872)%256;
    	num++;
    }
    
    更多相关内容
  • 定时器T1查询方式控制单片机发出1KHz音频
  • 使用51单片机定时器T1在工作方式2下生成占空比40%的方波,并且在仿真软件里调试出来
  • 555定时器做一个频率为1Hz的秒脉冲发生器 原理就是直流电震荡后升压,比如说1个小功率电棍,利用6V-12V直流电源可产生一种高压脉冲。电路中三极管Q1、Q2构成了一振荡器,产生频率为3Hz的直流脉冲电压,并输入变压器...
  • 使用定时器0方式1产生周期为20ms的等宽正方波连续脉冲,并由P1.2输出,以查询方式完成。
  • 编写程序使定时器0或者定时器1工作方式1,定时50ms触发蜂鸣器。 程序: #include<reg51.h> sbit fm=P2^3; unsigned char cnt; int main(void) { TMOD=0x01; TH0=(65536-46083)/256; TL0=(65536-46083)%256;...

    编写程序使定时器0或者定时器1工作在方式1,定时50ms触发蜂鸣器。

    在这里插入图片描述

    程序:
    #include<reg51.h>
    sbit fm=P2^3;
    unsigned char cnt;
    int main(void)
    {
    TMOD=0x01;
    TH0=(65536-46083)/256;
    TL0=(65536-46083)%256;
    cnt=0;
    TR0=1;
    EA=1;
    ET0=1;
    while(1);
    }
    void int0_timer (void) interrupt 1
    {
    cnt++;
    if(cnt1)
    {
    fm=0;
    }
    if(cnt
    2)
    {
    fm=1;
    cnt=0;
    }
    TH0=(65536-46083)/256;
    TL0=(65536-46083)%256;
    }

    展开全文
  • 索引任务要求Proteus仿真图程序代码 如果有朋友对定时器还不太了解,可以看一下这篇文章 链接: 《单片机定时器总结》—用最简洁的方式学会51单片机定时器。. 任务要求
  • 利用定时器产生乐曲,包含仿真图与C语言代码
  • 51单片机程序源码例子6.利用定时器和蜂鸣器唱歌
  • 定时器计数器T1典例

    2021-01-06 06:46:24
    利用定时器T1,方式0方式1方式2.分别编写三个程序实现),输出的方波在Proteus利用示波器观看)交作业的时候交Proteus工程文件还有源程序,截图在作业本上,程序也写在作业本上) 答:方式0:#include sbit P1...
  • 大致的的编程思路是这样的:T0定时器中断让一个I0口输出高电平,在这个定时器T0的中断当中起动定时器T1,而这个T1是让IO口输出低电平,这样改变定时器T0的初值就可以改变频率,改变定时器T1的初值就可以改变占空比。...
  • 源代码+仿真+电路图
  • 利用定时器T1工作方式1控制两个LED以不同周期闪烁,使得LED1每秒闪烁4次(即周期为250ms),LED2每秒闪烁1次(即周期为1s)。 2.控制分析 2.1 LED侧分析 若要使LED1每秒闪烁4次(即周期为250ms),LED2每秒闪烁1次...

    1.控制目标

    利用定时器T1工作方式1控制两个LED以不同周期闪烁,使得LED1每秒闪烁4次(即周期为250ms),LED2每秒闪烁1次(即周期为1s)。

    2.控制分析

    2.1 LED侧分析

    若要使LED1每秒闪烁4次(即周期为250ms),LED2每秒闪烁1次(即周期为1s),那么需要分别给P1.0和P1.2接口分别输出周期为250ms(高低电平分别125ms)和1000ms(高低电平分别500ms)的方波。

    2.2 程序分析

    因为LED1和LED2的周期刚好是倍数关系,因此可以考虑定时器设置为125ms溢出,那么每溢出一次P1.0取反一次,每溢出四次P1.1取反一次。但是T1是16位定时器,那么最大仅为65535,机器周期为1.085us,则单次最多只能计时约71.1ms,因此我们可以考虑采用62.5ms溢出,那么每溢出2次P1.0取反一次,每溢出8次P1.1取反一次。
    初值计算:单片机内部的时钟振荡器产生11.0529MHz的脉冲信号,经12分频后得到11.0529/12MHz的脉冲信号,那么经过62.5ms需要的脉冲信号为62.5ms/((12/11.0529)*10^(-3)ms)≈57567次,即T1设定初值应为57567次。

    3.程序编写

    #include<reg52.h>
    #include<intrins.h>
    sbit LED1=P1^0;
    sbit LED2=P1^1;	//LED灯位定义
    unsigned char sum1;
    unsigned char sum2;//全局变量定义,用以对溢出次数计数
    void main()
    {
    EA=1; //开总中断
    ET1=1;//允许T1中断
    TMOD=0X10;//M1=0,M0=1,即T1被设定为定时器、工作方式1
    TH1=(65536-57567)/256;	 //T1高八位设初值
    TL1=(65536-57567)%256;	 //T1低八位设初值
    TR1=1; //T1启动
    sum1=0;
    sum2=0;
    while(1)
    ;	//一直循环等待中断
    }
    void Tim1() interrupt 3//中断服务函数,T1的中断编号为3
    {
    	sum1++;
    	sum2++;//每溢出一次sum1和sum2加1
    	if(sum1==2)
    	{
    	LED1=~LED1;
    	sum1=0;
    	}
    	if(sum2==8)
    	{
    	LED2=~LED2;
    	sum2=0;
    	}
    TH1=(65536-57567)/256;	 //T1高八位设初值
    TL1=(65536-57567)%256;	 //T1低八位设初值
    //注意一定要再次对T1重新赋初值,否则溢出一次后将会从0开始计数
    }
    
    
    展开全文
  • 电路中三极管Q1、Q2构成了一振荡器,产生频率为3Hz的直流脉冲电压,并输入变压器比为6V:240V升压器的初级线圈,在每个脉冲结束时,相应地在变压器的次级线圈产生一高电压。脉冲的重复频率可通过选择C2、R1值进行...
  • C语言05-利用定时器测量脉冲宽度(STC32G-DEMO-CODE-220311kw)C语言05-利用定时器测量脉冲宽度(STC32G-DEMO-CODE-220311kw)C语言05-利用定时器测量脉冲宽度(STC32G-DEMO-CODE-220311kw)C语言05-利用定时器测量...
  • 51单片机定时器工作方式1、2原理详解

    万次阅读 多人点赞 2019-08-09 18:38:36
    1.本篇博文旨在帮助那些像我一样刚入门51单片机,如果你对定时器有一定了解,但是其中的的工作方式不能理解,那么这篇文章很适合你,如果你是大神的话…直接绕行吧…… 2.我在学习的过程中由于知识上的不足很多的...

    写在前面

    1.本篇博文旨在帮助那些像我一样刚入门51单片机,如果你对定时器有一定了解,但是其中的的工作方式不能理解,那么这篇文章很适合你,如果你是大神的话…直接绕行吧……

    2.我在学习的过程中由于知识上的不足很多的讲解看不懂,在翻找了许多资料真正理解之后,打算以一种简单易懂的方式进行解释,这是一份很 详尽基础 的讲解手册。

    3.全文以定时器0为例,定时器1的用法与其相同。

    4.由于是讲定时器实现原理,文章文字显得较多,不过都是很简单的文字,只要认真看都能看得懂。

    知识填充

    虽然看懂这篇博文不需要太多的知识储备,但是在这里还是做一个简单的知识普及,便于下文的讲解

    1. 4位二进制数可以和1位十六进制数相互转化,如二进制数1111转化为十六进制是0xf; 二进制转化11111111转化为十进制是255。
    2. 51单片机的时钟周期由晶振决定,假定晶振频率是12M,那么它的时钟周期为1/12M,机器周期是12倍的时钟周期,即为12/12M,文章以12M晶振为例讲解。

    方式一

    工作原理

    采用方式1时,计数位数时16位,由TH0作为高八位,TL0 作为低八位,组成16位加一计数器,在TR0 置1后单片机开始计时,每经过一个机器周期单片机输出一个脉冲使定时器加一,加到16位全为1时会溢出,使TF0 置1,利用此性质可以去执行相应的功能,TF0置1是一个信号
    若 TH0 和 TL0 的初值都为0(即整个定时器的值为0000000000000000),当16位全为1时,单片机一共输出了655361个脉冲,时间经过了65536*12/12M秒钟即为65.536ms。

    初值的设定

    那么问题来了,我们想要利用的时间都是1s,2s这种,而不是65.536ms,如果能让开始计时到TF0 置1这个时间变成50ms这种,就能够通过几次计数溢出达到计时1s钟的目的,这就到了初值的计算。
    由之前的分析可知,单次计时最长为65.536ms,以单次定时50ms(0.05s)为例,需要20次可以定时1s钟。假设开始计时时16位定时器的初值为x,由于单片机定时固定到达65536溢出,那么(65536-x)*12/12M = 0.05,可计算得到x = 15536。化为16进制为0x3cb0。那么TH0 = 0x3c, TL0 = 0xb0;2

    代码实现

    定时1s钟的代码如下:

    #include<reg52.h>
    
    void main()
    {
    	unsigned char cnt = 0;
    	TMOD = 0x01;  //设置定时器为工作方式1
    	TH0 = 0x3c;
    	TL0 = 0xb0; //设置初值
    	TR0 = 1; //打开定时器开关,开始定时
    	while(1)
    	{
    		if(TF0 == 1)
    		{
    			TF0 = 0;
    			TH0 = 0x3c;
    			TL0 = 0xb0;
    		 //单次计时完成后,TH0 与TL0 的值均为11111111,所以需要对他们重新赋初值
    		 	cnt++;
    		 	if(cnt == 20)
    		 	{
    		 		cnt = 0;
    		 		//此处填写定时完成时要执行的功能	
    		 	}
    		}
    	}
    }
    

    方式二

    工作原理

    方式2是自动重装初值的8位计数方式,在本质上是与方式1一样的。在工作方式2中,TH0 只起到为TL0 重装初值的作用,并不参与计数。当TL0 计数到全为1时再有一个脉冲就会触发溢出,TL0 的溢出不仅使TF0 置1,TF0置1是一个信号 ,而且将TH0内容重新装入TL0 ,TH0 内容由代码设置,重装时值不变,然后进行新一轮的定时 ,这就是所谓方式2自动重装初值。

    初值的设定

    方式2的初值的计算方式和方式1相同,与方式1不同的是:由于方式2只有TL0 计数,最多可以记256个脉冲(8位从全0编为全1),单次定时最长也就只有0.256ms(方式1为65.536ms)
    依然以定时1s钟为例,单次定时时间为0.2ms,设初值为x,(256-x)*12/12M = 0.2**10-3(0.2乘10的-3次方,由于格式问题只能打两个星号……),解得x = 56,化为十六进制为0x38,则TH0 和TL0 的初值均为0x38;

    代码实现

    #include<reg52.h>
    
    void main()
    {
    	unsigned int cnt = 0;
    	TMOD = 0x02;
    	TH0 = 0x38;
      	TL0 = 0x38;
      	TR0 = 1;
      	if(TF0 == 1)
      	{
      		TF0 = 0;
      		//TH0 = 0x38;
      		//TL0 = 0x38; 这两处由于是自动重装初值,所以单次定时结束后不需要再赋值
      		cnt++;
      		if(cnt == 5000)
      		{
      			cnt = 0;//单次定时0.2ms,5000次后定时1s
      			//此处填写定时完成时要执行的功能
      		}
      	}
    }
    

    效果跟方式1相同3,经过笔者实验方式2更精准一些?咱也不知道,咱也不敢问


    1. 16位全为1的二进制数的值为216 = 65536 ↩︎

    2. 计算初值还有另外一个方法,就是以产生的脉冲次数(频率)为中心。
      单片机时间频率为12M,机器频率为12M/12,即定时1s钟定时器计数的个数为12M/12(我在这里卡住很长时间,不太好理解),但是方式1单次计数个数最多为65536,远远达不到12M/12次。
      计时1s单片机计数个数为12M/12.那计时50ms(0.05s)计数个数就应该是(12M/12)/ 20 = 50000,那初值就应该是15536。 ↩︎

    3. 不知道读者有没有注意到,在定义cnt变量时,方式1采用的是unsigned char cnt = 0; 而方式2采用的却是unsigned int cnt = 0; 这里涉及到了数据结构的问题,我会在其它博文里提到,这里只需简单理解为方式2中cnt的值过大,unsigned char型容不下就行了。 ↩︎

    展开全文
  • 1硬件连接定时器是单片机内部的特殊功能模块。在控制系统中,常常要求有一些实时时钟以实现定时或者延时控制,如定时中断、定时检测、定时扫描等等,也往往要求有计数器,对外部事件进行计数。要实现定时或者延时...
  • 定时器/计数器的4种工作方式及应用

    千次阅读 2021-05-23 09:51:41
    在前面的学习中,我们已经知道通过设置TMOD的M1、M0两位,可以选择...工作方式0及应用当M1M0=00时,T0采用方式0工作,如图5-2所示,此时T0是一个由TL0的低5位和TH0的8位构成的13位计数器(注:TL0的高3位未用)。图...
  • 51单片机利用定时器0延时1分钟P1间隔闪烁 // An highlighted block #include <reg51.h> #define uchar unsigned char void delay60s(); void main(void) { while(1) { P1=0x00; delay60s(); P1=0xff; ...
  • STM32F4系列基本定时器TIM6 TIM7前言必须了解定时器时钟频率影子寄存器代码设计参考 前言 在一些需要的情况下软件延时十分必要,有时为了测试方便大都直接用了while(–i)或者for循环大致延时下看看就可以了。当需要...
  • #include #define uchar unsigned char #define uint unsigned int sbit dula=P2^6;...sbit led1=P1^0; uchar code table[]= { 0x3f,0x06,0x5b,0x4f,0x66,  0x6d,0x7d,0x07,0x7f,0x6f, 0x7
  • /*****************************...功能:利用定时器0工作方式1实现LED1亮一秒,灭一秒( LED1=P1^7;) 时间:2012.12.10 作者:荆轩道 ************************************************************/ #include
  • 基于AT89C52单片机做的简易时钟,通过数码管显示小时,分钟,秒,利用定时器来精确计时,可以通过按键调整时分秒的数字,另外可在代码里设置闹铃时间,到达设定值蜂鸣器响起。代码清晰,有备注,方便初学者学习。
  • 利用定时器在单片机P1口输出1Mhz方波
  • 要求使用定时器0工作方式2,中断实现。 C语言代码: #include "at89x52.h" sbit LED = P1^0; int cnt = 0; void InterruptTimer0_init() { EA = 1; //打开总中断 TMOD = 0x02; //设置 T0 为模式 2 TH0 = ...
  • 定时器T1中断控制两个LED以不同周期闪烁
  • 用51单片机 定时器T0的计数功能 实现 两位数码管动态显示0到99 包含两种方式 查询方式和中断方式,内涵原理图和代码
  • 1、STM32CubeIDE 配置 LED管脚配置 串口1配置(也就是debug串口) 2、代码 usart.c文件 /* USER CODE BEGIN 0 */ #include stdio.h /* USER CODE END 0 */ . . . /* USER CODE BEGIN 1 */ #ifdef __GNUC__ #...
  • 1) 通过实验掌握 CC2530 芯片 GPIO 的配置方法 2) 掌握 Led 驱动电路及开关 Led 的原理 3) 掌握定时器 T1 的配置与使用 4) 握定时器 T3(8 位)通过中断方式控制 LED1 周期性闪烁
  • STC最新出来的单片机的定时功能和EEPROM的读写功能的实现,

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 94,785
精华内容 37,914
关键字:

利用定时器0工作方式1