51单片机中,利用定时器0产生方波的问题(C语言),谢谢!
在用定时器0产生方波时,经常可以看到这样的程序:TH0=0;TLO=0;TR0=1;for(i=8;i>0;i--){p1^0=!p1^0nop;nop;nop;nop;...
在用定时器0产生方波时,经常可以看到这样的程序:
TH0=0;
TLO=0;
TR0=1;
for(i=8;i>0;i--)
{ p1^0=!p1^0
nop;
nop;
nop;
nop;
nop;
nop;
nop;
nop;
nop;
}
p1^0=1;
这个例子是要产生40KHZ的方波,NOP9次的作用是什么?还有FOR循环8次的作用呢?还有为什么TH0和TL0的初值都是0呢。。不用像汇编一样计算初值的吗? 展开
TH0=0;
TLO=0;
TR0=1;
for(i=8;i>0;i--)
{ p1^0=!p1^0
nop;
nop;
nop;
nop;
nop;
nop;
nop;
nop;
nop;
}
p1^0=1;
这个例子是要产生40KHZ的方波,NOP9次的作用是什么?还有FOR循环8次的作用呢?还有为什么TH0和TL0的初值都是0呢。。不用像汇编一样计算初值的吗? 展开
展开全部
定时器定时时间为0,不晓得还怎么产生中断,for循环只是个简单粗略的延时,至于40KHZ,还要算算这个for循环完成的时间是不是一个波长周期,反正这个程序很可能不对
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
我不清楚是不是40KHZ,但是可以产生方波,是很笨的方法,也不准确,最好用定时器。
#include<reg51.h>
sbit a=P1^0;
main()
{
a=1;
TMOD=0X01;//定时器0
TH0= ;//自己算吧
TL0= ;
ET0=1;//定时器0允许
TR0=1;//打开定时器0
EA=1;//开总中断
while(1);
}
void timer0() interrupt 0 //中断程序
{
TH0= ;
TL0= ;
a=~a;
}
#include<reg51.h>
sbit a=P1^0;
main()
{
a=1;
TMOD=0X01;//定时器0
TH0= ;//自己算吧
TL0= ;
ET0=1;//定时器0允许
TR0=1;//打开定时器0
EA=1;//开总中断
while(1);
}
void timer0() interrupt 0 //中断程序
{
TH0= ;
TL0= ;
a=~a;
}
追问
谢谢!那请问怎么实现方波个数和脉冲宽度的控制呢?
追答
方波个数可以用计数器控制,脉冲宽度和定时初值有关啊,呵呵
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询