51单片机一个io口输出不同的4个不同的pwm

作者&投稿:宠卓 (若有异议请与网页底部的电邮联系)
用一个定时器能使单片机的两个输出口产生2个不同的pwm脉冲吗??懂得话给个程序。。占空比要可调的,,~

提供一种思路,程序没时间写。
1、PWM需要周期,因此定时器必须得设置匹配值,达到周期计数时间后复位TC值;
2、两个PWM波形需要产生可调的PWM,那么就需要让定时器知道什么时刻该让这个IO口输出高低电平。可以让两个输出提供参数,比如数值是多少后出现高电平,高电平持续多长数值?
3、最后就是关键点了,即将定时器TC值(周期值)细化,比如我脉宽周期设定TC值是3000时候复位,那么我可以将这个定时器定时300时候出现一次中断,600时候中断一次,900时候出现一次中断,一次类推,这样就可以得到很多的时间片段,即标志位COUNT。
4、我希望IO口在周期内出现可调节脉宽那么可以实现了,比如COUNT==IO1的时候让其出现高电平,持续多长时间后出现低电平(中断里面完成);
简单的示意程序:
void TIMER_HANDLE(void)
{
//判断是否达到TC值,如果达到则复位(COUNT清零),否则执行匹配中断
//在原有基础上设置匹配值中断,匹配值 +=300;
COUNT++;
if((COUNT == IO1_H_TIME)) //现在正好是需要高电平的时刻,因此值置高
{
//持续时间开启(自减),是否为0?
//不是0,那么继续输出高电平
//是0,关闭输出,同时清除高电平时刻
}
}
估计精度不怎么好。


#include // sbit P1_0 = P1^0; // PWM 脉冲输出sbit key10 = P3^2;sbit key11 = P3^3;unsigned char Set_PWM0 = 2; // 占空比调整unsigned char counter = 0; // 计数的bit bdata tt1; // 标志位void main(){ TMOD=0x01; TH0=(65536-2000)/256; // 定时时间 可以修改 TL0=(65536-2000)%256; EA=1; ET0=1; TR0=1; while(1) { // 开关调整 PWM 占空比 if(key10==0 && tt1==0) {tt1 = 1; Set_PWM0++;} // K1、K2 if(key11==0 && tt1==0) {tt1 = 1; Set_PWM0--;} if(key10==1 && key11==1) tt1=0; }}void Timer0(void) interrupt 1 // 定时器0 PWM 控制{ TH0=(65536-2000)/256; // 定时时间 可以修改 TL0=(65536-2000)%256; counter++; if(counter >= 16) counter = 0; // PWM 16级 可以修改 if(counter >= Set_PWM0) P1_0 = 0; else P1_0 = 1;}

1、首先要明白PWM的含义,PWM就是输出不同占空比的脉冲,
2、普通51单片机IO口输出PWM的话,可以用定时器去计时,比如要输出100HZ的占空比50%的PWM。可以配置1ms的定时器中断,在中断中计数,一个中断就是1ms,100HZ的脉冲,周期是10ms,50%的占空比,可以计数到5的时候把Io口取反;程序如下
void main()
{
TMOD = 0x01;

TH0 = 0xFC;

TL0 = 0x18; // 晶振选择12MHz,配置定时器中断1ms

ET0 = 1;

TR0 =1;

EA= 1;

while(1); //程序停止在这里,,接下来就是去响应中断
}
void Timer0() interrupt 1
{
static unsigned char t = 0;

TH0 = 0xFC;

TL0 = 0x18; //重新装入初值;
t++;

if(t <5)

{
IO = 0;

}
else if(t < 10)
{
IO = 1;

}
else

{
t = 0;

}

}
上面的程序就是周期是10ms,占空比为50%的输出了,,,需要调节占空比的话,只要改变IO口电平电话的时间就可以了;

3、多个IO口 输出不同占空比的PWM;
原理是和1个的是一样的, 多用几个时间变量去计时,判断就可以了。

4、上面说的是普通的51单片机,现在有很多增强型单片机,内部有PWM模块,可以直接使用,赋值一个周期值,比如30000到特定的寄存器里面; 然后改变第一次电平变化的时间和第二次电平变化的时间 就可以实现不同的占空比调节了。具体的可以参考下单片机的数据手册都会有例程说明的,。如果是使用内部PWM模块的话,需要选择含有多路PWM功能的单片机来满足设计要求了。

提供下思路,两个定时器。一个控制高低电平,另一个控制四种PWM的顺序及时长。

不可以,一个具有PWM输出功能的IO口只能输出一路PWM

你需要分时输出吗?不然的话一个IO口就只能输出一路PWM信号。


单片机同一IO口怎么同时实行数据的输入和输出?
这不管是什么语言来实现,方法是一样的,每组的每个IO引脚的属性(输入\/输出)是可以配置的,每组IO口都有三个配置寄存器,通过对这一组寄存器写入配置的参数就行了。这是ATMEGA128的中文资料,可供参考。

51单片机一个I\/O口接多个三极管做开关,能带的起来吗?
单片机I\/O口输出驱动电流一般为20mA,如果接多个三极管可能带不起来,你可以在 I\/O接口处先接一个三极管作为电流驱动,然后在这个三极管后面就可以接多个三极管做开关了。。。

这单片机上的io口在哪呢
单片机上的io口,指的就是引脚,I\/O是Input\/Output的意思,即输入\/输出。如下图,是传统的51单片机,有四个并行口,P0、P1、P2、P3,就是四个I\/O口,每一个并行口有8个引脚,如P0口的8个脚依次是P0.0、P0.1~P0.7,依此类推。共32个I\/O引脚。

51单片机P0口一个IO口可不可以驱动两个LED发光二极管?
P0口是外接上拉的一个IO口,接俩个LED那是没有问题的……一个普通的LEd的电流也就17mA左右,单片机的灌电流能能力差不多也是40mA所以足已……

单片机中一个io口赋予0但是没有接通电源,此时io口为1还是0?
这是电子元件,不通电还有什么用。就是万用表测量电阻值,万用表探头也是有电压的。你程序中给io口赋予低电平,此时,当电源正常供电,单片机晶振电路以及上电复位电路都正常工作的话,此时的io口就是0。

单片机可以实现将一个IO口的输入信号通过另一个IO 口输出从而实现开关功 ...
你好是的单片机完全可以实现将一个IO口的输入信号通过另一个IO 口输出从而实现开关功能的,设置一下就行了

请问一个单片机I\/O端口的问题,
在“计算机组成原理”里面,是如下讲的:CPU和内存之间通信的时候,使用的是“总线”;CPU和外部设备之间通信的时候,使用的“I\/O”接口。而80x86芯片本身,只有“总线”,没有“I\/O”接口。单片机就不同了。单片机是个小而全的硬件系统,其引脚P0、P1、P2、P3,既可以当做“总线”使用,也可以当做...

51单片机,用一个IO口模拟一个脉冲信号,然后用一个独立按键控制这个脉 ...
循环操作就是按一下IO口开始输出脉冲,再按一下脉冲停止,再按一下又开始输出脉冲。。。如此往复。脉冲信号我用定时器模拟的,但是用一个按键实在是不会控制启动和停止。初学者,困扰... 循环操作就是按一下IO口开始输出脉冲,再按一下脉冲停止,再按一下又开始输出脉冲。。。如此往复。脉冲信号我用定时器模拟的,但...

怎样用单片机的一个IO口识别三种电平状态并分别执行不同输出:(1)高...
缺少条件,信号没有格式则无法检测到正确数据。假设:每个数据周期为2S,自电平变化后开始计时,0.2S采样一次,5次后记录电平类型。高电平为1,低电平为0。每两次采样为一组,若组数据为11则为高电平,00为低电平,其他为脉冲。此方法,接收特定数据时会出现错误。自己完善吧。

51单片机一个IO口只能控制一盏LED灯吗?
1. 一般而言,如果不接其他IC在中间,只能控制一个灯:进制里有“码”的概念,使用二进制的单片机的一个I\/O口只能输出高电平或低电平,那么就只有开关两种状态。既然如此,使用一个IO口便只能控制外围的一个开关状态。开关则对应led灯的亮暗。2. 引申一下,多个io口则是可以控制多个开关,如果简单点...

应城市19818937420: 怎样用单片机的一个端口显示4个数码管不同的数字 -
但相枳术: 一条IO的话,外围电路就复杂多了.如果是2条IO就串5个74LS164就行

应城市19818937420: 如何让单片机的一组IO口(比如P0)输出多组数据 -
但相枳术: 毕设容得IO口比较多,分别有三组数据显示,都是动态扫描,都用数码管显示.--每组几位数码管?我把数码管段选放在了P0口,位选在P1口,用位选,段选都接到74HC573锁存器再到P1口可以吗?--先把三组数码管的电路,设计出来,--然后再和单片机连接.同时输出三组数据如何解决冲突的问题?--同时,不可能.可分时.我想把当前显示的锁存器打开,显示后在关闭,然后再显示下一个,一直这样循环,可以吗?--可以.如何实现?--先设计出来电路,再编写程序 没有电路图,说什么都没用.

应城市19818937420: 51单片机的4组IO口有什么区别 -
但相枳术: 51单片机的4组IO口有什么区别 单片机4个IO口 P0、P1、P2、P3做普通IO的时候功能一样,注意P0口是漏极开路,做普通IO口使用必须用上拉电阻,P0和P3有第二功能

应城市19818937420: 单片机接口p1.0 P1.1 P1.2 P1.3******P3.0 P3.1 是什么意思 还有A0 A1 A2 A3 A4 A5是什么意思 -
但相枳术: P1.0这些那就是IO口的编号,51单片机一共有4组IO口,分别是P0、P1、P2、P3,每组都有8个IO口,那就是P0.0~P0.7、P1.0~P1.7、P2.0~P2.7和P3.0~P3.7.同一组IO使用同一个寄存器. A0、A1……那个是地址总线的IO了,与外挂程序存储器有关,一般用不到这个功能,就当做普通IO使用即可.

应城市19818937420: MSC - 51单片机一共有几个P口,其各P口的作用 -
但相枳术: MSC-51单片机一共有4个并行口,分别为P0,P1,P2,P3.每个并口有8个IO脚,各并行口可以8个引脚同时使用,输入/输出8位数据.也可以每个IO脚单独使用,做外部检测输入或位控输出.

应城市19818937420: mcs - 51单片机4个I/O的作用是什么?三总线如何分配的?为什么说能作为I/O使用的一般只有P1口? -
但相枳术: P0是场效应管漏极开路控制,只有P0没上拉,用时候还要接上拉电阻,还是16位寻址的低8位P2是16位寻址的高8位P3是第二功能,所以只有P1没有什么功能一般IO用

应城市19818937420: C51四个IO口的区别 -
但相枳术: P0口: 第一功能:作普通IO口,驱动能力8个TTL门,因为是漏极开路输出,所以作普通输出用时,需外接上拉电阻. 第二功能:单片机外部扩展时作 数据总线/地址总线(低8位) 使用. P1口: 第一功能:作普通IO口,驱动能力4个TTL门,...

应城市19818937420: Msc - 51单片机集成有几个并行I/O口 -
但相枳术: MCS_51单片机集成有4个并行I/O口,即P0、P1 、 P2 、P3.

应城市19818937420: fab(1 - 1.0/3.0*3.0)<1e - 5什么意思 -
但相枳术: fab是绝对值 1e-5是10的负5次方 因为浮点数表示十进制数,一般情况下都是有误差的.可能在十进制的运算上,两个数已经相等了,但是在浮点数的表示上,小数点n位的地方就不相等,这样比较的时候就输出不相等.而用它们的差的绝对值小于1e-5,这样就可以有效避免这种情况了.

应城市19818937420: 单片机io口是什么 谢谢 -
但相枳术: 单片机io口是用来定义相应I/O口位的输入输出状态和方式.包括3个基本项:数据向量Data、属性向量Attribution和方向控制向量Direction.3个端口内每个对应的位组合在一起,形成一个控制字,单片机对控制字或者包装后的控制字读取进行双...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网