用单片机管脚输出PWM波,请问我这个程序对吗?输出的高电平时间误差会大吗?

用单片机管脚输出PWM波,请问我这个程序对吗?输出的高电平时间误差会大吗?,用定时器0,任选一管脚P21,使其输出频率50HZ,周期20ms,输出1500us的高电平时间 具体程序…

用单片机管脚输出PWM波,请问我这个程序对吗?输出的高电平时间误差会大吗?,用定时器0,任选一管脚P21,使其输出频率50HZ,周期20ms,输出1500us的高电平时间

具体程序如下:

#include <stc12c5a.h>
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define uchar unsigned char
#define uint  unsigned int
sbit PWM=P2^1;//P21输出PWM波   
uchar time;   //占空比
/**单片机晶振11.0592MHZ,时钟周期为1/12us,8位定时器最大定时时间256us**/
/** 输出PWM频率为50HZ,周期为0.02s即20ms,定时0.1ms,即100us,中断200次**/
/**  定时器初值:65535-100+1=FF9A **/
void delay(uint z)//延时函数
{
uint x,y;
for(x=z;x>0;x–)
  for(y=110;y>0;y–);
}
void time0init()//定时器0初始化
{
  TMOD=0X01;//定时器0,工作方式1,16位定时器
TH0=0XFF;
TL0=0X9A;//定时0.1ms
ET0=1;
EA=1;
TR0=1;//开启定时器
}
void timer0() interrupt 1
{
   TR0=0;//赋初值时关闭定时器
  TH0=0Xff; //定时器赋初值
   TL0=0X9A; //定时器赋初值
  TR0=1;
  
  time++;
  if(time>=200)//PWM周期为0.1ms*200=20ms
    time=0;
  if(time<=15)//占空比为15%,高电平时间为1500us
  {
   PWM=1;
  }
  else
   PWM=0;
}
void main()
{
delay(5000);
time0init();
while(1)
{
}
}

作者: soufei

为您推荐


Fatal error: Can't use function return value in write context in /www/wwwroot/www.qianrushi.com.cn/wp-content/themes/news/footer.php on line 115