51单片机定时器实现PWM波
51单片机是可以实现PWM波输出的,原理其实都是一样的。说白了,PWM波就是让某一个引脚输出周期性连续高低电平变化的信号。
那么如何用51单片机实现周期性的高低电平呢?
答案就是用定时器。首先我们需要配置一下定时器,这里不做过多阐述,资料到处都有。然后设置一个计数周期,比如说让定时器计一百个数产生溢出,那么这一百个数的时间就是一个周期。接下来我们就以这一百个数的时间为基准。比如设置前五十个数的时间某引脚为高电平,后五十个数为低电平。那么这个引脚就会输出一个占空比为50%的高低电平变化。这就是所谓的PWM波。
基本代码实现如下:
sbitPWM=P2^0;//P2.0输出pwm
int time;//定义占空比的变量
void main()
{
TMOD=0x01;//定时器0工作方式1
TH0=0xff;//(65536-10)/256;//赋初值定时
TL0=0xf7;//(65536-10)%256;//0.01ms
EA=1;//开总中断
ET0=1;//开定时器0中断
TR0=1;//启动定时器0
while(1)
{
;
}
}
void tim0() interrupt1
{
TR0=0;//赋初值时,关闭定时器
TH0=0xff;//(65536-10)/256;//赋初值定时
TL0=0xf7;//(65536-10)%256;//0.01ms
TR0=1;//打开定时器
time++;
if(time>=100)
time=0;
if(time<=50) //占空比%50,可改
PWM=1;
else
PWM=0;
}
PWM波可以用来调节速度,角度,灰度等。
51单片机定时器实现PWM波相关推荐
- 【51单片机学习】PWM电机调速
简单的PWM电机调速--基于51单片机 (一)51单片机需要用到的寄存器 (二)PWM波的产生及调速原理 (三)电机调速的实现 (一)51单片机需要用到的寄存器 中断允许寄存器,详情可以看STC51单 ...
- 【51MCU】51单片机定时器中断写MIDI音乐(按键可切换音乐)
Author: Manba Cople 专业:IOT 说明:记录和输出学习内容 文章目录 前言 定时器 音乐播放 音乐库 总结和展望 前言 程序思路:该程序是利用51单片机的定时器中断,另外根据音符的 ...
- 基于51单片机可调PWM发生器
源码:基于51单片机可调PWM发生器 一.设计任务 PWM信号频率范围为20Hz ~ 100kHz 占空比为5%~95% 键盘设置PWM频率和占空比 液晶模块显示输出频率和占空比 二.硬件设计 1.硬 ...
- 51单片机定时器频率计算
频率是周期的倒数 51单片机定时器中TH与TL可以改变周期来改变频率. 举例如下 3000us=3ms=0.003s T=0.003s频率=333HZ 2000us=2ms=0.002s ...
- c语言单片机定时器的应用程序,51单片机定时器中断程序(C语言)
51c程序 51单片机定时器中断程序(C语言) 用C语言实现的,先要定义好定时器的初值 不管你使用多大的晶振,使用51单片机,一般都是12分频出来,也就可以得出一个机器周期 机器周期=12/n(n指晶 ...
- 基于51单片机定时器计数+2片74HC595联级+8位数码管时钟+按键修改时间
基于51单片机定时器计数+2片74HC595联级+8位数码管时钟+按键修改时间 Proteus仿真 实例代码 #include "at89x52.h" /**74hc595引脚定义 ...
- 51单片机定时器(T0/T1)的使用与配置流程
第一步:配置工作方式寄存器-TMOD TMOD寄存器的字节地址为89H,不能位寻址.一般采用整体赋值的方式进行配置:如:TMOD=0x01 // 0000 0001 GATE=0,定时器仅受TCON寄 ...
- 51单片机的直流电机PWM调速控制系统(附Proteus仿真+C程序等全套资料)
设计思路 直流电机PWM控制系统的主要功能包括:很实现对直流电机的加速.减速以及电机的正转.反转和急停,并且可以调整电机的转速,能够方便的实现电机的智能控制. 主体电路:即直流电机PWM控制模块.这部 ...
- 51单片机定时器的查询和进入中断处理
51单片机定时器可用两种方式处理:查询和进入中断处理. 1.查询方式 void Init_T0 (void) 定时器初始化 { TMOD = 0x01;//计时器模式 TH0 = (65535-650 ...
- 51单片机定时器秒计数时钟+Proteus仿真
51单片机定时器秒计数时钟+Proteus仿真 Proteus仿真 实例代码 本实例采用的是普中开发板Proteus模板 功能:电子钟,从左到右,1.2位为秒,3.4位为分,5.6位为时,7.8位为天 ...
最新文章
- 经济独立,是你最大的底气
- 深度|从Go高性能日志库zap看如何实现高性能Go组件
- c语言int 转bool_C++代码实现逆波兰式_C 语言
- hadoop1常见配置含义
- html5 原生拖拽,原生JS实现拖拽效果
- Android深度探索(卷1)HAL与驱动开发 心得体会 第十章 嵌入式Linux的调用技术
- 网站“设为首页”代码,“加入收藏”代码
- POJ2586(贪心)
- 搭建自己的企业QQ [2007年6月15日]
- Swagger2+Apizza接口文档
- Vim编辑器快速上手
- Fisher精确检验的通俗理解
- 迷你西游最新服务器是哪个,迷你西游公测新开服务器“万佛朝宗”公告
- C++ 解析器--cint
- 由国内媒体的“非典”报道看信息生态问题-引文
- 618年中大促如何选择蓝牙耳机?值得买的蓝牙耳机品牌
- React组件Component
- 马克思主义03709
- codeblocks||=== Build file: no target in no project (compiler: unknown) ===
- vue range 双向滚动 取中间值
热门文章
- 长微博生成器 php,【九零天下】长微博生成器的PHP代码部分
- Allegro封装制作
- VARCHART XGantt教程之功能介绍
- SYNOPSYS™使用不同透镜设计程序 来改善透镜设计
- Chrome应用商店镜像方法 | Crx根据ID直接下载 | 浏览器插件推荐网站
- android逆向 arm,[原创]Android下ARM静态反编译逆向.(小试多玩YY协议)
- Excel学习 -- 数据透视表功能
- Ambari安装和汉化(转)
- List<Map>转Map<String,List>
- win10用账户登录计算机,图文详解让你的win10系统实现微软账户自动登录-系统操作与应用
-亦是美网络...