永发信息网

AT89S52单片机怎样产生pwm波

答案:4  悬赏:0  手机版
解决时间 2021-11-23 00:18
AT89S52单片机怎样产生pwm波
最佳答案
sbit PWM = P0^0;
uchar i,j;
i = 100;
j = 80;
while(1)
{
if(--j == 50) j = 80; //低电平占空比
i = 100;
while(--i) //一个周期
{
if(i>j) PWM = 0
else PWM =1;
}
}追问我是要这个过程的原理,不是要程序啊,你能具体给我讲讲吗?追答通过在一个固定周期while(i--) 也就是100减到0的时间内输出占空比不同的方波来实现脉宽调制。
程序经由P0.0引脚输出一个周期是100的递减加上中间if语句执行时间构成的一个周期循环。
没个周期内的高低电平时间由j的值来控制,每个执行(输出)周期内j减一,
在j控制的阀值内(i>j)输出低电平,其余时间输出高电平。
程序循环,以30个输出波形周期为基本循环,每个周期的低电平时间比上一个周期增加1%,高电平占空比从80%开始以1%的速度递减到50%。追问嗯,谢谢你,这个我懂了,你能再帮我写个由定时器(T1,或T0)产生的,再讲讲原理吗?
(PWM波周期不变,只改占空比)追答unsigned char cycle = 0,emp = 40;
sbit PWM=P0^0;

main()
{
TMOD|= 0x11;
TH1 = 0xfc; //12.00M
TL1 = 0x17;
ET1 = 1;
TR1 = 1;
EA = 1;
while(1)
{
if(cycle >1 00) cycle=0;
if(cycle < emp) PWM=0; //占空比100-emp :emp 周期100ms 占空比修改emp就可以了
else PWM = 1;
}
}

void timer1ISR(void) interrupt 3 //定时器1的中断处理
{
TH1 = 0xfc; //12.00M->100ms /10HZ
TL1 = 0x17;
cycle++;
}
全部回答
用定时器比较精确点。追问能写段程序吗?再解释下程序,十分感谢!
就简单就是延时一下 拉高电平 延时 拉低 再这循环
循环的给I/O口高低电平,加一些简单的延时程序就可以了
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
白菜和芹菜可不可以一起吃
橡胶木免漆衣柜与实木衣柜哪个好
卫生间排污管只有一根,请问这样违反了哪条规
给澳大利亚的手机号发短信怎么发?
百花秀肤美容养生连锁地址在什么地方,我要处
拿到2019北大MBA有条件预录取资格,如能过国
路基水泥稳定碎石层的弯沉值怎么计算?
怎样才能买进未开版的股票
青岛平度个人劳保如何为查询
PS椭圆尺寸单位换算成毫米
朋友说我打乒乓球有球风是什么意思
我家宅基地前面人家盖高楼,未经我邻居签协议,
古人除了用鸳鸯形容男女之爱还有什么
葫芦岛天梭零售店(宏运百货)地址在什么地方
虎胆雄心中哪集演江波受伤啊?
推荐资讯
这什么情况左边男右边女
昌盛旅馆(青岛城阳区)地址在哪,我要去那里办
那坡县百都派出所地址在什么地方,想过去办事
面对即将离别的老师,用什么名言来赞美老师?
masm 5.0在哪里下载
公司有一千多个往来客户,对账时都需要提供原
关于写同学的开头与结尾
淘宝宝贝下架后,浏览量会清零吗?还有宝贝成
用半圆和圆片怎么制作图片
800伏的电压能电死老鼠吗
怎样使牙齿表白
大众二手车行(泉州安溪县)地址在什么地方,我
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?