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呢。。不用像汇编一样计算初值的吗?
展开
 我来答
一剑出血
高粉答主

2012-03-22 · 醉心答题,欢迎关注
知道大有可为答主
回答量:5.7万
采纳率:78%
帮助的人:1.7亿
展开全部
1. 这段代码根本就不是用定时器产生方波,而是靠延时硬憋出来的。
2. 这段代码可能是配合触发器之类工作的,其结果是在P1.0上产生8个跳变沿。
3. 至于是否实际产生40kHz的方波,还要由外接的晶振频率以及单片机本身的配置所决定。
4. 你贴出的这段代码有基本的语法错误,不可能编译通过。
小痔若鱼
2012-03-22 · TA获得超过180个赞
知道小有建树答主
回答量:276
采纳率:0%
帮助的人:58.2万
展开全部
定时器定时时间为0,不晓得还怎么产生中断,for循环只是个简单粗略的延时,至于40KHZ,还要算算这个for循环完成的时间是不是一个波长周期,反正这个程序很可能不对
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
woshiduxingjun
推荐于2017-12-16 · TA获得超过118个赞
知道小有建树答主
回答量:152
采纳率:0%
帮助的人:48.7万
展开全部
我不清楚是不是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;

}
追问
谢谢!那请问怎么实现方波个数和脉冲宽度的控制呢?
追答
方波个数可以用计数器控制,脉冲宽度和定时初值有关啊,呵呵
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
x5jdza1cm
2012-03-22
知道答主
回答量:12
采纳率:0%
帮助的人:4.5万
展开全部
3不是随着每
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式