单片机PWM程序是怎么编写的啊,能给一个简单的例子吗?

单片机PWM程序是怎么编写的啊,能给一个简单的例子吗?,第1张

有PWM功能的单片机入STC12系列单片机,直接给专用寄存器赋值开启相应定时器就可以了。普通单单片机,PWM需要用自己来调配。比如:

#include<reg51.h>

unsigned char pwhh,pwhl,pwlh,pwll

bit flag

sbit pwm=P1^0

void t0isr() interrupt 1

{

if(flag)

{

TH0=pwhh

TL0=pwhl

}

else

{

TH0=pwlh

TL0=pwll

}

pwm=~pwm

}

main()

{

TMOD=0x01

pwhh=(65536-1000)/256

pwhl=(65536-1000)%256

pwlh=(65536-500)/256

pwll=(65536-500)%256

TH0=pwhh

L0=pwhl

TR0=1

ET0=1

EA=1

while(1)

}

有二种情况,第一,如果你所使用的8051单片机(例如stc12系列)是带有专用的pwm输出i/o口的话,那就只要控制里面的特殊功能寄存器改变输出占空比就行了,不要外加什么硬件电路的。第二,如果是通入软件模拟pwm输出的话,那就用定时器可以解决的,也不需要外加电路。

15-PWM调光

#include<reg52.h>//包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义

void Delay(unsigned int t)

{

while(--t)

}

void main ( )

{

unsigned int CYCLE=600,PWM_LOW=0//定义周期并赋值

while (1) //主循环

{

P2=0X00

Delay(60000) //特意加延时,可以看到熄灭的过程

for(PWM_LOW=1PWM_LOW<CYCLEPWM_LOW++)

{

P2=0XFF //点亮LED

Delay(PWM_LOW)//延时长度,600次循环中从1加至599

P2=0X00 //熄灭LED

Delay(CYCLE-PWM_LOW)//延时长度,600次循环中从599减至1

}

P2=0XFF

for(PWM_LOW=CYCLE-1PWM_LOW>0PWM_LOW--)

{ //与逐渐变亮相反的过程

P2=0XFF

Delay(PWM_LOW)

P2=0X00

Delay(CYCLE-PWM_LOW)

}

}

}

自己修改 可以改变占空比


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/7748619.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-09
下一篇2023-04-09

发表评论

登录后才能评论

评论列表(0条)

    保存