给个我自己写的程序你,我试过了,通过!
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit P0_0=P0^0;
uchar a;
/*********************************************
* TH0和TL0是计数器0的高8位和低8位计数器,
* 计算办法:TL0=(65536-C)%256;
* TH0=(65536-C)/256,
* 其中C为所要计数的次数即多长时间产生一次中断;
* TMOD是计数器工作模式选择,0X01表示选用模式1,
* 它有16位计数器,最大计数脉冲为65536,最长时间
* 为1ms*65536=65.536ms *
*********************************************/
void init_sys(void); /*系统初始化函数*/
void main (void)
{
init_sys();
while(1);
}
void init_sys(void)
{
TMOD=0x01;
TH0=(65536-10000)/256;
TL0=(65536-10000)%256;
EA=1;
ET0=1;
TR0=1;
}
void timer0(void) interrupt 1
{
TH0=(65536-100)/256;
TL0=(65536-100)%256;
a++;
if(a<=3)
{
P0_0=1;
if(a==3) //改变低电平持续时间
{ //也即改变占空比
P0_0=~P0_0;
}
}
else
{
P0_0=0;
if(a==5) //改变周期
{
a=0;
}
}
}
温馨提示:答案为网友推荐,仅供参考