单片机 PWM输出 c

来源:互联网 发布:美国2016年gdp数据 编辑:程序博客网 时间:2024/04/30 01:37
#include<reg52.h>
#include<intrins.h>  //包含_nop_(),汇编中的子函数
#define uchar unsigned char
sbit PWM=P1^0;      //PWM输出
uchar count,PWMH;   //count组波计数,PWMH设置高低挡


void delay(uchar i)  //延时100us,和定时器组波无光,可自己随意定义
{
uchar j;
for(;i>0;i--)
{
for(j=100;j>0;j--)
{
_nop_();   //一个机器周期;
}
}
}


void timer0() interrupt 1
{
if(PWMH==0)        //0档,全0
  PWM=0;
else if(PWMH==10)  //1档,全1
  PWM=1;
else               //组波
    {
if(count++<PWMH) //举例PWMH=1,则第一次count=0(然后就++);执行一次(即只能进入中断一次);以后则为0
PWM=1;
else
   PWM=0;
if(count>=10)    //count=10,即为到了一个周期,重新计数
   count=0;
}
}


void main()
{
TMOD=0x02;  //工作方式2(自动再装入,预置数方式)   
TL0=265-100; //低八位放初值;高八位放预置数;定时100次
TH0=265-100; //八位寄存器,故为265
count=0;
PWMH=0;

TR0=1;   //启动定时器1
ET0=1;  //定时器0中断允许
EA=1;  //cpu中断允许
while(1)
{
PWMH=0;
delay(200); //延时20ms
PWMH=1;
delay(200);
   PWMH=2;
delay(200);
PWMH=3;
delay(200);
PWMH=4;
delay(200);
PWMH=5;
delay(200);
   PWMH=6;
delay(200);
PWMH=7;
delay(200);
PWMH=8;
delay(200);
PWMH=9;
delay(200);
PWMH=10;
delay(200);
}
}
0 0
原创粉丝点击