需要个51单片机产生方波的程序
展开全部
#include<reg51.h>
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;
}
露珠,这些太简单了, 你应该自己学着弄。(没调试,直接写上的,有问题追问)
如果满意,请点赞采纳
更多追问追答
追问
第22句在keil上显示是错误 而且我自己写的在示波器上无法显示方波
追答
露珠,把22行 viod删除就可以了啊
显示的是什么
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#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;
}
}
}
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...
----
这不是方波,只是一个矩形波。
----
这不是方波,只是一个矩形波。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询