【单片机】51的简单多路PWM……
squzero2011/04/09电子技术 IP:广东
这个是有限多路的说,因为判断的延迟……做RGB灯或者多路伺服的时候……

频率未知的说,因为决定于晶振、还有多路的延迟以及c_count的最大值~~

T = c_count × T0溢出时间 + 延迟

只是没事干动动脑子……频率什么的自己算的说……Proteus仿真一下……

在6T 16MHz的52上测试了,时钟频率越高,T0的TH TL就不能设太大不然中断太快了%……@#¥(@#&×%(
待会儿测试一下1T的片子……

duty的话……等于 c_count_P[*] / c_count~~不过似乎有点误差的~~


#include <reg52.h>
sbit P1_0 = P1^0;
sbit P1_1 = P1^1;
sbit P1_2 = P1^2;
sbit P1_3 = P1^3;
unsigned char c_count_P[4]= {0,0,0,0};
unsigned int c_count=0;

void InitT0(void)
{
TMOD = 0x01;
TH0 = 0x0FF;
TL0 = 0x0CA;
EA = 1;
ET0 = 1;
TR0 = 1;
}

void main()
{
P1 |= 0x0f;

InitT0();

while(1)
{
if (c_count_P[0] == 12)
{
P1_0 = 0;
c_count_P[0] = 0;
}
if (c_count_P[1] == 50)
{
P1_1 = 0;
c_count_P[1] = 0;
}
if (c_count_P[2] == 100)
{
P1_2 = 0;
c_count_P[2] = 0;
}
if (c_count_P[3] == 160)
{
P1_3 = 0;
c_count_P[3] = 0;
}
}

}
void T0_Int(void) interrupt 1
{
TH0 = 0x0FF;
TL0 = 0x0CA;
c_count_P[0] += (char)(P1_0);
c_count_P[1] += (char)(P1_1);
c_count_P[2] += (char)(P1_2);
c_count_P[3] += (char)(P1_3);
if (++c_count == 512)
{
P1 |= 0x0f;
c_count = 0;
}

}

来自:电子信息 / 电子技术
4
已屏蔽 原因:{{ notice.reason }}已屏蔽
{{notice.noticeContent}}
~~空空如也
squzero 作者
13年10个月前 IP:未同步
288805
STC12 最多4路……
这个程序似乎频率上不去……
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论

想参与大家的讨论?现在就 登录 或者 注册

所属专业
上级专业
同级专业
squzero
进士 机友 笔友
文章
14
回复
129
学术分
0
2009/08/10注册,2年7个月前活动
暂无简介
主体类型:个人
所属领域:无
认证方式:手机号
IP归属地:未同步
插入公式
评论控制
加载中...
文号:{{pid}}
投诉或举报
加载中...
{{tip}}
请选择违规类型:
{{reason.type}}

空空如也

加载中...
详情
详情
推送到专栏从专栏移除
设为匿名取消匿名
查看作者
回复
只看作者
加入收藏取消收藏
收藏
取消收藏
折叠回复
置顶取消置顶
评学术分
鼓励
设为精选取消精选
管理提醒
编辑
通过审核
评论控制
退修或删除
历史版本
违规记录
投诉或举报
加入黑名单移除黑名单
查看IP
{{format('YYYY/MM/DD HH:mm:ss', toc)}}