STC单片机实现可调PWM输出的C51程序

pwm介绍 脉冲宽度调制(pwm),是英文“ pulse width modulation” 的缩写,简称脉宽调制,是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术。简单一点,就是对脉冲宽度的控制。stm32 的定时器除了 tim6 和 7。其他的定时器都可以用来产生 pwm 输出。其中高级定时器 tim1 和 tim8 可以同时产生多达 7 路的 pwm 输出。而通用定时器也能同时产生多达 4路的 pwm 输出。
工作过程
ccr1:捕获比较(值)寄存器(x=1,2,3,4):设置比较值。
ccmr1: oc1m[2:0]位:
对于pwm方式下,用于设置pwm模式1【110】或者pwm模式2【111】
ccer:cc1p位:输入/捕获1输出极性。0:高电平有效,1:低电平有效。
ccer:cc1e位:输入/捕获1输出使能。0:关闭,1:打开。
stc单片机实现可调pwm输出的c51程序 //以下是源程序,只需修改定义io口就可以使用,#include 《 reg52.h 》
#include 《 intrins.h 》
sbit k1 =p3^2 ; //增加键
sbit k2 =p3^3 ; //减少键
sbit beep =p3^1 ; //蜂鸣器
sbit pp =p3^7 ;
unsigned char pwm=0x7f ; //赋初值
void beep();
void delayms(unsigned char ms);
void delay(unsigned char t);
/*********************************************************/
void main()
{
pp=1;
tmod=0x21 ;
th0=0xfc ; //1ms延时常数
tl0=0x66 ; //频率调节
th1=pwm ; //脉宽调节
tl1=0 ;
ea=1;
et0=1;
et1=1;
tr0=1 ;
while(1)
{
do{
if(pwm!=0xff)
{pwm++ ;delayms(10);}
else beep() ;
}
while(k1==0);
do{
if(pwm!=0x02)
{pwm-- ;delayms(10);}
else beep() ;
}
while(k2==0);
}
}
/*********************************************************/
// 定时器0中断服务程序。
/*********************************************************/
void timer0() interrupt 1
{
tr1=0 ;
th0=0xfc ;
tl0=0x66 ;
th1=pwm ;
tr1=1 ;
pp=0 ; //启动输出
}
/*********************************************************/
// 定时器1中断服务程序
/*********************************************************/
void timer1() interrupt 3
{
tr1=0 ;
pp=1 ; //结束输出
}
/*********************************************************/
//蜂鸣器子程序
/*********************************************************/
void beep()
{
unsigned char i ;
for (i=0 ;i《100 ;i++)
{
delay(100) ;
beep=!beep ; //beep取反
}
beep=1 ; //关闭蜂鸣器
delayms(100);
}
/*********************************************************/
// 延时子程序
/*********************************************************/
void delay(unsigned char t)
{
while(t--) ;
}
/*********************************************************/
// 延时子程序
/*********************************************************/
void delayms(unsigned char ms)
{
unsigned char i ;
while(ms--)
{
for(i = 0 ; i 《 120 ; i++) ;
}
}

艾迈斯半导体推出适用于智能健康和可穿戴设备的血压与生命体征传感器参考设计
国产Jeep自由光粗犷美,20万买价月销量破万!
每日一课 | 智慧灯杆规划总体思路——发展策略
一探国产主板版型奥秘:ATX、MATX、ITX,你知多少?
人工智能、机器学习以及深度学习三者之间的关系是什么?
STC单片机实现可调PWM输出的C51程序
全新SurfacePro评测 可以理解为SurfacePro4的进化版
降低物联网开发门槛的神器大更新!TuyaOS 3.7.0版本新增matter等重磅开发框架
微软的Office 365应用协同编辑聊天访问权限将淘汰
聚合物锂电池和磷酸铁锂电池有什么不同及区别详解
中国动力电池产业需要引入“鲶鱼型”企业来推动实现“新陈代谢”和“迭代升级”
智能旋进旋涡流量计的使用要点
IAR环境下基于SemiHost机制实现printf功能
谷歌在内存方面依赖于per memcg lru lock
基于单片机的八路电子抢答器系统设计
一款养护施工智能红外安全预警系统,0.4秒发出警报
聚焦旅行健康行业!vivo营销聚光计划沙龙成功举行
2021年广播公司面临着哪些最大挑战
华为首个业绩出炉:三季度收入同比增长9.9%
中美半导体产业技术和贸易限制工作组正式成立