利用定时器产生方波并通过中断调节方波频率
要求:从P1^0口输出50Hz的方波,并通过S1,S2调整方波的频率。按下S1 频率以1Hz为单位增大,按下S2 频率以1Hz为单位减小。
(代码仅进行过初步验证,可能存在一定的BUG,谨慎使用)
#include<reg52.h>#define uchar unsigned char
#define uint unsigned intsbit 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 工作方式 1EA = 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;//不断更新周期值}
}
仿真图如下:
都看到这了给个赞支持一下呗
利用定时器产生方波并通过中断调节方波频率相关推荐
- 51单片机实例学习二 按键中断识别、定时器、利用定时器产生乐曲、数摸转换 ADC0804和DAC0832
六.按键中断识别 [实验任务] 采用中断技术,每按一下按键,计数器加1,并用LED显示出来. [硬件电路] 注意:我们只用4位数码管中的两位. 注意:a接P0.0;b接P0.1;c接P0.3-- 注意 ...
- 51单片机的应用——利用定时器控制输出对称方波
单片机晶振为12MHz,编程实现T0模式1下在P1.1处输出周期为td的对称方波. 分析:利用定时器定时溢出控制P1.1输出的反相,达到输出周期方波 51的TOMD控制着定时器T0的工作,首先设置TM ...
- STM8S903K3基于STVD开发,利用定时器5中断实现毫秒时基延时
STM8S903K3基于STVD开发,利用定时器5中断实现毫秒时基延时
- STM32 定时器的简单应用 1ms中断代码
引言:利用定时器TIM8产生1ms中断,每中断一次,全局变量+1,计数到10即10ms,使得输出引脚翻转一次.芯片采用STM32F103VCT6,系统输入时钟12MHz,完成代码并用示波器输出. 根据 ...
- 8、TM4单片机的滴答定时器,及利用定时器精确延时
在我们日常使用单片机的时候,延时一般采用循环的方式,但是这样的方式只能用于粗略的延时,但我们需要精准的时间控制的时候,便需要利用定时器获得精确的延时. 本次采用TM4内的滴答定时器. 文章目录 1.滴 ...
- [STM32F10x] 利用定时器测量脉冲宽度
转载http://www.cnblogs.com/mr-bike/p/4199751.html 硬件:STM32F103C8T6 平台: ARM-MDk V5.11 前面一篇文章讲过如何利用定时器测量 ...
- stm32h7关串口中断怎么弄_【STM32H7教程】第33章 STM32H7的定时器应用之TIM1-TIM17的中断实现...
第33章 STM32H7的定时器应用之TIM1-TIM17的中断实现 本章教程为大家讲解定时器应用之TIM1 – TIM17所有定时器的周期性中断实现.实际项目中用到的地方较多,特别是周期 ...
- 安卓案例:利用定时器实现逐帧动画
安卓案例:利用定时器实现逐帧动画 一.运行效果 单击[开始]按钮,可以看到逐帧动画效果: 单击[停止]按钮,可以停止动画效果. 二.涉及知识点 1.图像视图(ImageView) 2.按钮(Butto ...
- Qt中利用定时器QTimer实时显示当前日期和时间
Qt中利用定时器QTimer实时显示当前日期和时间 时显示当前日期和时间.下面说明方法: 1. 在工程中声明一个全局QTimer对象 QTimer *timer; 2. 在构造函数中定义QTimer, ...
最新文章
- 力所能及的做些自己喜欢和有趣的事
- python dataframe 分位数_Python pandas.DataFrame.quantile函数方法的使用
- 智源创新中心——与你同行,用AI改变世界
- SAP RETAIL 商品主数据里的X-DChain Status字段
- quick-cocos2d-x教程12:实现文本和password输入界面
- npm 卸载_完全免费!GitHub发布软件包管理服务:NPM瑟瑟发抖
- 题目1164:旋转矩阵
- 【数理知识】《积分变换与场论》王振老师-目录
- matlab保存变量的值,怎么不能保存之前的变量值?求解
- python新旧特性过渡_网站改版时的一种新旧版过渡方案
- MySQL Cookbook 学习笔记-02
- PySpider问题记录http599
- Keepalived 安装配置
- (三)Mybatis类型转换器,接口传参类型,一对一,一对多查询resultMap配置
- 这不是海市蜃楼,这是平地雾
- PAT 乙级A1025 适合当算法入门练习题做
- Linux编写脚本nsum求和,shell脚本学习与总结
- Camera2 YUV_420_888转NV21
- STM32F407三重ADC配置
- ERROR 1010 (HY000): Error dropping database (can't rmdir './library', errno: