利用定时器产生方波并通过中断调节方波频率

最新更新时间:2022-08-11来源: csdn关键字:定时器  方波  方波频率 手机看文章 扫描二维码
随时随地手机看文章

要求:从P1^0口输出50Hz的方波,并通过S1,S2调整方波的频率。按下S1 频率以1Hz为单位增大,按下S2 频率以1Hz为单位减小。


 (代码仅进行过初步验证,可能存在一定的BUG,谨慎使用)


#include

 

#define uchar unsigned char

#define uint unsigned int

sbit Iput = P1^0;

//------------------------变量区------------------------

 

float Temp = 50;//初始频率 Hz

uint F ;//周期

float a=0;//中间变量

 

//------------------------函数区------------------------

void Delay(uint t)//延时函数

{

while(t--);

}

 

void Init_ET_0()//定时器初始话函数 50ms

{

F = a*500000;//将周期值换算成微秒并除二

TMOD = 0x01;//定时器0 工作方式 1

EA  = 1;    //开总中断

ET0 = 1;   //开定时器开关

TR0 = 1;   //启动定时器

TH0 = (65536 - F)/256;  //给高八位赋初值

TL0 = (65536 - F)%256;  //给低八位赋初值

  //---------------------外部中断配置-------------------------

EX0 = 1;

EX1 = 1;

IT0 = 1;

IT1 = 1;

}

 

void Servoic_ET_0() interrupt 1   //定时器服务函数

{

F = a*500000;//将周期值换算成微秒并除二

TH0 = (65536 - F)/256;   //重装高八位

TL0 = (65536 - F)%256;   //重装低八位

Iput = ~Iput;

}

 

void Servoic_EX_0() interrupt 0   //外中断0

{

EX0 = 0;

Delay(100);

EX0 = 1;     //消抖处理

Temp = Temp++;//频率加一

}

 

void Servoic_EX_1() interrupt 2   //外中断1

{

EX1 = 0;

Delay(100);

EX1 = 1;

Temp = Temp--;//频率减一

}

 

void main()

{

Init_ET_0();//定时器0初始化

while(1)

{

a = 1/Temp;//不断更新周期值

}

}


仿真图如下:

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5qSw5ZWK5qSw5ZOm,size_20,color_FFFFFF,t_70,g_se,x_16

关键字:定时器  方波  方波频率 编辑:什么鱼 引用地址:http://news.eeworld.com.cn/mcu/ic618745.html

上一篇:利用定时器使P1^0口输出指定占空比、周期矩形脉冲
下一篇:利用定时器0写秒表(注释)

推荐阅读

stm32f103——滴答定时器
滴答定时器:定时器的本质就是计数器。我们设置一个定值,然后计数器开始计数,从我们给的定值开始往下一直数,当数到0时,就做相应的动作(也可以不做什么,当把它用作延时计时的时候)。滴答定时器systick是一个内核外设(即:内核自带的)所以在《STM32F10xxx参考手册中文版.pdf》手册中没有相关描述,我们需要参考内核手册《STM32F10xxx20xxx21xxxL1xxxx Cortex-M3 programming manual.pdf》Systick是一个24bit的系统定时器(stm32F407的寄存器名字与位数都与f103一样,但是有些芯片定时器位数不同),向下计数(从定值开始数到0),当计数到0时,在下一个时钟边沿,
发表于 2022-09-29
stm32f103——滴答<font color='red'>定时器</font>
stm32f103——基本定时器定时器中断
我们前面已经学过了滴答定时器,那么定时器的原理与它一样,只不过滴答定时器是在内核中的定时器,而定时器是片上外设。定时器分为:基本定时器和通用定时器。而基本定时器所拥有的功能,通用定时器都有。所以,通用定时器内集成了基本定时器。 定时器作用:产生一个精准的定时stm32f03中基本定时器为TIM6和TIM7:16位预分频器:将输入进来的72Mhz进行预分频,但是它是16位的,所以它的分配系数范围为1~65535。16位自动重装载累加器:用来装载我们设置的计数值。当16位计数单元计数完后,它就将设置的计数值传给计数单元,让计数单元重新开始计数。16位计数单元:它的内部就是定时器计数的过程,即从计数值开始计数。其内部的数值是变化的。定
发表于 2022-09-29
stm32f103——基本<font color='red'>定时器</font>与<font color='red'>定时器</font><font color='red'>中断</font>
stm32f103——通用定时器输出PWM
通用定时器 ----输出 1,输出一个PWM 2,检测脉冲宽度 1》PWM---脉冲宽度调制 占空比:高电平占整个周期的百分比 2》PWM作用:调节灯的亮度,声音的大小,速度的快慢----平均电压值 什么是PWM信号?PWM,英文名Pulse Width Modulation,是脉冲宽度调制(记住这个名词)缩写,它是通过对一系列脉冲的宽度进行调制,等效出所需要的波形(包含形状以及幅值),对模拟信号电平进行数字编码,也就是说通过调节占空比的变化来调节信号、能量等的变化,占空比就是指在一个周期内,信号处于高电平的时间占据整个信号周期的百分比,例如方波的占空比就是50%.PWM脉冲宽度调制,实际上就是脉冲信号,但是这个
发表于 2022-09-29
stm32f103——通用<font color='red'>定时器</font>输出PWM
定时器A TIMER A 新认识|定时器A 划分几个独立时间间隔
定时器A TIMER A 新认识现在的认识:MSP430 5438 有3个时钟,分别是 TA0、TA1 和TB了解了定时器A的用法:定时器A可以分成几个独立的时间周期。这几个时钟周期共用一个计数器TA1R 或TA0R。在头文件中可以查到:TIMER0 含 TA0CCR0- TA0CCR4 五个TIMER1 含 TA1CCR0- TA1CCR2 三个TA0CCR0TA1CCR0 用于控制计数周期,也就是每当TA0RTA1R 计数到TA0CCR0TA1CCR0所设定的数值后就会清零。如:TA0CCR0 =8000; // CCR0必须最大,因为一计数到CCR0即立刻清0,用于
发表于 2022-09-28
51单片机 定时器时钟
1.main.c注:Sec,Min,Hour可不进行赋值#include <REGX52.H>#include "Delay.h"#include "LCD1602.h"#include "Timer0.h"unsigned char Sec=55,Min=59,Hour=23;void main(){ LCD_Init(); Timer0Init(); LCD_ShowString(1,1,"Clock:"); LCD_ShowString(2,1," : :"); while(1) { LCD_ShowNum(2
发表于 2022-09-28
STM32定时器中断配置
1.使能时钟 定时器时钟2.配置定时器结构体、使能3.开启定时器中断,配置中断结构体配置例子#include "tim.h"#include "stm32f10x.h"void tim_config(void){TIM_TimeBaseInitTypeDef TIMinitStructure;//定时器结构体 NVIC_InitTypeDef NVICinitStructure;//内核中断结构体 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);//中断优先组函数RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM
发表于 2022-09-27
STM32<font color='red'>定时器</font><font color='red'>中断</font>配置
小广播
设计资源 培训 开发板 精华推荐

何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2022 EEWORLD.com.cn, Inc. All rights reserved