
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呢。。不用像汇编一样计算初值的吗? 展开
4个回答
展开全部
1. 这段代码根本就不是用定时器产生方波,而是靠延时硬憋出来的。
2. 这段代码可能是配合触发器之类工作的,其结果是在P1.0上产生8个跳变沿。
3. 至于是否实际产生40kHz的方波,还要由外接的晶振频率以及单片机本身的配置所决定。
4. 你贴出的这段代码有基本的语法错误,不可能编译通过。
2. 这段代码可能是配合触发器之类工作的,其结果是在P1.0上产生8个跳变沿。
3. 至于是否实际产生40kHz的方波,还要由外接的晶振频率以及单片机本身的配置所决定。
4. 你贴出的这段代码有基本的语法错误,不可能编译通过。

2023-06-12 广告
STM32F103是一款高性能的嵌入式芯片,由意法半导体(STMicroelectronics)公司生产。它是STM32系列芯片之一,具有紧凑、低功耗、高性能等特点,被广泛应用于嵌入式系统中。STM32F103的主要特点包括:1. 集成了A...
点击进入详情页
本回答由意法半导体(中国)投资有限公司提供
展开全部
定时器定时时间为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;
}
追问
谢谢!那请问怎么实现方波个数和脉冲宽度的控制呢?
追答
方波个数可以用计数器控制,脉冲宽度和定时初值有关啊,呵呵
本回答被提问者和网友采纳
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询