问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

51单片机如何产生8路PWM波

发布网友 发布时间:2022-04-20 09:37

我来回答

5个回答

热心网友 时间:2022-07-12 05:31

我来说一下我的方案,这个我验证过,方法如下:

其实用一个定时器就够了,外部中断接按键,一个用来频率加,一个用来频率减,即做调节频率用,8路频率从P0口输出,定时器产生中断,比如1us,那么我到1us时对P0.0取反,同时中断里在定义一个变量t1,那么t1计中断次数,假如计到5时我让P1.0取反,儿至于计到几有外部中断来定义,比如定义一个全局变量f,INT0按一次则f++,INT1S按一次f- -,如此频率得以控制,定时器处理如下:
void TIME0_ISR(void) interrupt 2
{
t1++;
if(t1==f) p00=~p00;
if(t1==f) p01=~p01;
if(t1==f) p02=~p02;
if(t1==f) p03=~p03;
if(t1==f) p04=~p04;
if(t1==f) p05=~p05;
if(t1==f) p06=~p06;
if(t1==f) {p07=~p07; f=0;}

}
当然这只是简单的用51本身资源产生而已,还可以用专门的外围电路来实现,我给你一个四路频率产生程序,思想如上,已验证过
/*************************四路频率产生器***************************************/

#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int

/*************************常量定义***************************************/

sbit pwm1=P1^0; //第一路频率 1s内产生5000个脉冲
sbit pwm2=P1^1; //第二路频率 1s内产生1000个脉冲
sbit pwm3=P1^2; //第三路频率 1s内产生2500个脉冲
sbit pwm4=P1^3; //第四路频率 1s内产生500个脉冲

uchar cout1,cout2; //分别用来定义时间宽度
uchar t0_max=10,t1_max=100;

/*******************定时器0初始化函数***************************************/

void time0_ini() //定时0初始化
{
TMOD=0X02; //采用定时器0,选择模式2
TH0=0xA3; //0.1ms定时
TL0=0Xa3;
ET0=1; //允许定时器溢出中断
TR0=1; //启动定时器

}

/***************************外部中断0初始化***********************************/

void INT0_ini()
{
EX0=1; //外部中断0允许
IT0=1; //选择边沿触发方式
}

/***************************定时器1初始化*****************************************/

void time1_ini()
{
TMOD=0X20; //采用定时器1,选择模式2
TH1=0XA3 ; //定时0.1ms
TL1=0XA3;
ET1=1; //允许定时器中断
TR1=1; //启动定时器1

}

/*************************主函数************************************************/

void main()
{
time0_ini(); //调用定时器0初始化函数
time1_ini(); //调用定时器1初始化函数
INT0_ini();
cout1=0;
cout2=0;

pwm1=0; //没一路频率都从低电平开始
pwm2=0;
pwm3=0;
pwm4=0;

EA=1; //打开总中断
while(1); //一直停留在主函数中
}

/***************************定时器中断服务程序************************************/

void tim0_ISR() interrupt 1 //定时0中断服务程序
{
cout1++; //计数变量加1
if(cout1==t0_max)
{
pwm1=~pwm1; //每当到了1ms时取反一次电平,即周期为2ms,1s内产生500个脉冲
}
if(cout1==(t0_max+10))
{
cout1=0; //每当到了2ms时取反一次电平,即周期为4ms,1s内产生250个脉冲
pwm2=~pwm2;
}
}

/**************************定时器1中断服务程序************************************/

void time1_ISR() interrupt 3 //定时器3中断服务程序
{
cout2++;
if(cout2==t1_max)
{
pwm3=~pwm3; //每当到了10ms时取反一次电平,即周期为20ms,1s内产生50个脉冲
}
if(cout2==(t1_max+150))
{
cout2=0; //每当到了25ms时取反一次电平,即周期为50ms,1s内产生20个脉冲
pwm4=~pwm4;
}
}

/********************外部中断0服务程序**************************/

void INT0_ISR() interrupt 0
{
if(t0_max>200) t0_max=10; //清楚上限
if(t1_max>2000) t1_max=100;
t0_max=t0_max+10;
t1_max=t1_max+100;
}

热心网友 时间:2022-07-12 05:31

用一个定时器作US级定时,设一个静态变量t每次定时中断减1,t从初值减到0为一个脉冲输出周期,如果t初值为100,设置一个全局变量A来调节占空比,当t>A时输出1,当t<A时输出0,多设几个A这样的变量,就可以多控制几路PWM

热心网友 时间:2022-07-12 05:32

接电子电位器+ICL8038专用芯片,就可以控制器占空比了。
电子电位器x9C103S

热心网友 时间:2022-07-12 05:33

能产生8路PWM的单片机我没见过,不过应该能有吧……
现在一般的单片机都可以产生至少两路PWm,试试C8051F系列的,还不错

热心网友 时间:2022-07-12 05:33

自己可以编个程序实现的
51单片机用汇编语言如何设计8个轮流呼吸的呼吸灯?

假设如下这八个灯依次接在P0口的八个口上,高电平为灯亮,低电平为灯灭,程序如下 ORG 0000H AJMP START START:MOV P0,#01H;()只有第一个灯亮 ACALL DELAY;延迟,不加延迟的话 你根本看不起清到底那个灯亮的 MOV P0,#02H;()只有第二个灯亮 ACALL DELAY MOV P0,#04H;()只有第三个灯...

求详细解释这个51单片机PWM波原理

你要用51产生PWM去控制LED,首先你要确定PWM的周期T和占空比D,确定了这些以后,你可以用定时器产生一个时间基准t,比如定时器溢出n次的时间是PWM的高电平的时间,则D*T=n*t,类似的可以求出PWM低电平时间需要多少个时间基准n'那么你就可以编写程序,根据你定的时间基准 t 去给定时器赋值初始化,...

经过数模转换后怎么产生PWM 51单片机

从产生角度看,由高电平和 低电平 组成,接近数字量。从使用角度看,加上一个 低通滤波器 就变成幅值连续的模拟量了,接近模拟量。2、你要产生PWM,不需要经过 数模转换 。3、选定PWM输出频率,就决定了输出 方波 的周期,将数字量转换为方波 占空比 ,就可以产生PWM。

怎样利用51单片机发生PWM,通过调节PWM的占空比控制可控硅调节电机转速...

需要利用交流电的作触发信号,单片机生成延迟脉冲,不必使用pwm 注意是调节过零后的延迟时间,再出脉冲。

51单片机一共能产生几路pwm波控制电机速度。

这与定时器的数量有关,还有的单片机有专门的PWM发生器,比如STC12系列的就有两个PWM定时器。当然还可以用另外两个定时器模拟PWM,所以共有四个,想52单片机有3个定时器,所以可以模拟出3路PWM。

51单片机输出多路PWM波最少需要哪些元器件(不要告诉我直接用最小系统...

你说对了,只需要最小系统即可。51又没有PWM硬件,只能软件模拟,软件模拟就无所谓外围器件了。模拟8路也没问题

求51单片机实现PWM的程序

void main(){ X=2000; //周期100uS 即PWM的频率=10KHZ duty=50;//占空比 50 TMOD=0X11;EA=1;ET0=1;ET1=1;TH0=(65535-duty)/256;//定时器0 改变占空比 TL0=(65535-duty)%256;TH1=(65535-X)/256 ; //定时器1 改变频率 TL1=(65535-X)%256;TR0=1;TR1=1;while(1) ;} voi...

51单片机产生pwm波控制舵机 pwm波形状是怎样的,是一个脚上不断输出方 ...

time()函数是定时器1的init初始化函数,在主函数里,应该在while函数的前面;从程序来看,pwm = 1,是一个定时器周期,PWM = 0是18个周期。定期起中断入口程序应该这样写:void time1_isr() interrupt 3 using 1

怎么51单片机定时器来模拟PWM波?

对于用定时器来模拟,最基本的方法就是使用一个IO口循环设置其输出值为高电平和低电平。那么定时器在这里起计时作用,而且需要两个时间:高电平持续时间、低电平持续时间。只要做到这两个时间的计时,那么就可以实现基本的PWM了。而要做到两个时间的计时,有两种方案:1.单计时器方案 int i;//计时变量...

51单片机pwm输出频率算法,谁有公式,怎么算的?

单片机是独立 pwm硬件产生,还是靠定时器中断产生 普通51单片机没有硬件pwm功能,只能靠 定时器中断来产生,而多数增强型 51单 片机是有硬件pwm功能,一般PWM频率是晶振频率/分频系数/256 如晶振频率12M,分频系数设为2,则PWM频率为12000000/2/256=23.4 KHZ ...

51单片机产生pwm波 51单片机产生pwm波程序 51单片机如何输出pwm波 51单片机如何实现pwm波功能 51单片机产生可调节方波 单片机产生spwm波程序 单片机怎么产生pwm波 stm32单片机产生a波 单片机产生梯形波
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
金鱼是如何培育的 绝版七匹狼长什么样 苹果4s恢复之后开机整体都是灰色了怎么办 苹果4s看小说时屏幕呈灰色是无意中按了什么键 新化到遵义的经过列车什么时候到 为什么iPhone4s向下滑搜索iPhone屏幕会变成灰色 是正常的吗 你好 苹果4swifi打不开显示灰色怎么修啊?? 快干胶水配方及特点介绍杂用品 苹果4Sv if i 变成灰色不能用了怎么办? iphone4s屏幕为什么变成灰色? 《可爱的你》韩国电视剧 剧情 和大结局 LCD12864背光如何控制,即怎么用单片机调节LCD12864... 韩剧《可爱的你》都是谁演的? 我的X9C103有时候会随机出现一个阻值,不按照程序... 韩剧《可爱的你》 怎么用单片机控制数字电位器啊?拜托大家,最好有... 大神有可爱的你五个小孩的校长(2015)主演杨千嬅,... 请教 程控放大器如何控制放大增益的? x9c104芯片有什么作用? 豆瓣评分7.9的《可爱的你》,是在你心中留下深刻印... 单片机控制数字电位器的c语言程序 电影《可爱的你》主要讲的是个什么故事? x9c103电位器编程!!! 看了《可爱的你》有什么感受? 如何加大手机音量 有没有人用过x9c104?? 电影《可爱的你》中,最让你感动的情节有哪些? PADS制图,要用到数字电位器x9c104,元件库中怎么找? 电影《可爱的你》中,有哪些情节让你印象深刻? X9C104电路图 韩国电视剧《可爱的你》 数字电位器可以单独测它的阻值吗,具体怎么测,型... 英语翻译:可爱的你 有没有压控电阻这种东西 指数函数衰减的信号发生器的电路,要详细的电路图! PyScripter 2.5.3 运行程序报错,UnicodeEncodeErr... 微信李逵捕鱼 进房间闪退 占内存小又好玩的游戏有哪些? 挪威历史,谁知道? 明朝时期有多少人口 世界上最大的城市是那? 捕鱼来了副炮巨蟹之力好吗 从葫芦山庄到打鱼山有多远 西湖益联保保险怎么退 益联保是什么保险 西湖益联保保险保什么 西湖益联保怎么退保 西湖益联保保险怎么报销呢 西湖益联保医保历年账户如何取消自动续费? 西湖益联保哪里查看保单