需要个51单片机产生方波的程序

2024-11-08 01:47:59
有4个网友回答
网友(1):

#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;

}


露珠,这些太简单了, 你应该自己学着弄。(没调试,直接写上的,有问题追问)

如果满意,请点赞采纳

网友(2):

#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;
}
}
}

网友(3):

方波,频率为50hz 高电平持续时间为1.5ms...
----
这不是方波,只是一个矩形波。

网友(4):

定时器模拟产生