求教51单片机生成spwm波形的程序

求教51单片机生成spwm波形的程序,第1张

1、用普通I/O口采用软件定时器中断可以模拟SPWM输出。"/**/"里面的内用是对程序的标注,解析。

2、/*采用6MHz晶振,在P1.0脚上输出周期为2.5s,占空吵并比为20%的脉冲信号*/

/*定时100ms,周期2.5s需25次中断,高电平0.5s需5次中断*/

#include <reg51.h>

typedef unsigned char uchar

sbit P1_0=P1^0

uchar time=0

uchar period=25

uchar high=5

void timer0() interrupt 1 using 1

{

TH0=0x3c/*定时器斗庆初值重装载*/

TL0=0xb0

time++

if(time==high) /*高电平持续时间结束,变低*/

{ P1_0=0}

else if(time==period) /*周期时间到,变高*/

{ time=0

P1_0=1

}

}

void main()

{

TMOD=0x01/*定时器0方式1*/

TH0=0x3c/*定时器装载初值*/

TL0=0xb0

EA=1/*开CPU中断*/

ET0=1/*开定时器0中断*/

TR0=1/*启动定升销迹时器0*/

while(1) /*等待中断*/

{}

}

3、说明:本程序主要采用了51单片机(具体型号STC89C52RC)的定时器,工作在方式3,来产生规定时间内的方波,制造SPWM.

用定时器纳顷定时10ms,中断程序里将两个IO管脚状态取反即可。但两个管脚的原始状态是相反的。

大致 程序如下:

主程滑茄猛序里

TMOD=0X01;

TH0=.......

TL0=......

EA=1

ET0=1

PWM1=0//一个管脚置低

PWM2=1//另一个管脚置高

TR0=1

中断程序中:

TH0=.......

TL0=......

PWM1=!PWM1;信桥

PWM2=!PWM2;

我可以提供编程方法,

1、计算好输出的SPWM的频率和周期高差。

2、依据SPWM周期使用sin函数计兄祥算若干点的宽度值;

3、输出信号不断更新计算好的脉冲宽度值输出不同宽度实现SPWM信号羡念搏输出。


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

原文地址: https://outofmemory.cn/yw/12374188.html

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

发表评论

登录后才能评论

评论列表(0条)

保存