周期为20ms,分成100等份,每一份200us
设置一个软件计数器cnt,如果占空比为30%,那30×200us内输出高电平,70×200us内输出低电平
使用12MHz晶振,一个机器周期为1us。定时器/计数器0设为方式1,那么M1M0=01,使用定时功能,C/T=0,GATE=0,T1不使用,其相关位设为0,TMOD=0x01h
.方式1为16位长度计数结构,设初值为z,则(65536-z)×1us=200us得z=65334D,转换为16进制后,TH=FF,TL=38.有控制寄存器TCON中的TR0位来控制定时的启动和停止,TR0=1启动,TR0=0停止
#include
#define uchar unsigned char
#define uint unsigned int
uchar data cnt;
sbit pwm=P1^0;
void init(void)
{
TMOD=0x01;
TH0=-(200/256);
TL0=-(200%256);
ET0=1;
TR0=1;
EA=1;
}
void delay(uint k)
{
uint data i,j;
for(i=0;i
for(j=0;j<121;j++) {;}
}
}
void time0(void) interrupt 1
{
TH0=-(200/256);
TL0=-(200%256);
cnt++;
if(cnt<=30) pwm=1;
else pwm=0;
if(cnt>=100) cnt=0;
}
void main(void)
{
init();
while(1)
{
delay(3000);
}
}
自己查书,这个不难吧!