51单片机测量PWM波的占空比的C语言程序

51单片机测量PWM波的占空比的C语言程序,第1张

定时器产生败态圆程序如察塌下:

unsigned

int

a=0

,b=10

void

main()

{

tmod=0x01

th0=(65536-50000)/256

tl0=(65536-50000)%256

ea=1

et0=1

tr0=1

}

void

pwm()

interrupt

1

{

th0=(65536-50000)/256

tl0=(65536-50000)%256

a++

p1^1=0

if(a=20)

{

a=0

}

if(a=b)

{

p1^1=1

}

}

调节a

,b的值即可调节占空比,程闭激序框架就是这样,具体自己改吧

,以下以和衫晌8为PWM波为例:塌旅

8位的PWM波,一个周期有256个时间段,单片机定时器的中断频率为60*256=15360 Hz

T=0.651ms

以下为伪代码:

ISR_Time()定时器中断服务程序

{ if(i==255)

i=0

else

i++

if (i<k) // k=占空比*256

PORT=1 //端口输出唤锋高电平

else

PORT=0;

定时器计数载入();

}

以标准8051为例(晶振12M),计数脉冲为1us,需计651个脉冲,我们用定时器0,用Keil C编译

#include "reg52.h"

unsigned char k=255//k等于占空比乘以255,可以动态调整

unsigned char i=0

sbit PORT = P1^0//P1.0口输出

void main(void )

{

EA=0//关总中断

ET0=1//开定时器中断

TMOD=0x01//设置定时器为16为定时模式

TH0=0x02 //定时651个周期,0x028B=651

TL0=0x8B

EA=1//开中断

TR0=1 //开始定时

while(1)

}

void timer0 (void) interrupt 1 using 0//定时器中断服务程序

{ if(i==255)

i=0

else

i++

if (i<k) // k=占空比*256

PORT=1 //端口输出高电平

else

PORT=0

TH0=0x02

TL0=0x8B

TR0=1

}

#include<氏镇笑reg51.h>歼含

#define uchar unsigned char

uchar pwm=50,cnt

sbit pluse=P1^0

sbit keyu=P1^4

sbit keyd=P1^5

void t0isr() interrupt 1

{

TH0=(65536-100)/256

TL0=(65536-100)%256

cnt++

if(pwm>0)

{

if(cnt>旅滑100)cnt=0

if(cnt<=pwm)pluse=1

else pluse=0

}

else pluse=0

}

main()

{

TMOD=0x01

TH0=(65536-100)/256

TL0=(65536-100)%256

TR0=1

ET0=1

EA=1

while(1)

{

if(keyu==0)

{

while(keyu==0)

pwm++

if(pwm>100)pwm=100

}

if(keyd==0)

{

while(keyd==0)

if(pwm>0)pwm--

}

}

}


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

原文地址: http://outofmemory.cn/yw/12327923.html

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

发表评论

登录后才能评论

评论列表(0条)

保存