#include
int X ; // PWM的周期
int duty; //占空比变量
int jishu;
void SystemInit(void)
{
TMOD = 0x01;
TH0 = (65536 - 1000) / 256; //晶振:12MHZ
TL0 = (65536 - 1000) % 256;
ET0 = 1;
TR0 = 1;
EA = 1;
}
void main()
{
X=20; //周期
duty=8; //占空比
SystemInit(void);
jishu = 0;
while(1)
;
}
void timer0_isr() interrupt 1 //定时器0;改变占空比
{
TH0 = (65536 - 1000) / 256; //晶振:12MHZ
TL0 = (65536 - 1000) % 256;
jishu++;
if(jishu <= duty)
P0 = 1;
else if(jishu < X)
P0 = 1;
else
jishu = 0;
}
露珠,这些太简单了, 你应该自己学着弄。(没调试,直接写上的,有问题追问)
如果满意,请点赞采纳
#include "reg51.h"
unsigned char YSJS=0;
sbit OUT=P1^1;
void Timer1Init(void) //500微妙@12.000MHz
{
TMOD &= 0x0F; //设置定时器模式
TMOD |= 0x01; //设置定时器模式
TL0 = 0x0C; //设置定时初值
TH0 = 0xFE; //设置定时初值
ET0 = 1; //使能定时器0中断
TR0=1; //定时器0开始计时
EA =1; //开总中断
}
void main(void)
{
Timer1Init();
OUT=1;
while(1)
{
}
}
void TIMER1(void) interrupt 1 //定时器0中断函数使用默认寄存器组
{
TL0 = 0x0C; //设置定时初值
TH0 = 0xFE; //设置定时初值
YSJS++;
if(YSJS<3)
{
OUT=1;
}
else
{
if(YSJS<39)
{
OUT=0;
}
else
{
YSJS=0;
OUT=1;
}
}
}
方波,频率为50hz 高电平持续时间为1.5ms...
----
这不是方波,只是一个矩形波。
定时器模拟产生