试利用定时器/计数器T0从P1.0输出周期为1ms,脉宽为20ms的正脉冲信号。设晶振

用C语言编程:试利用定时器/计数器T0从P1.0输出周期为1s,脉宽为20ms的正脉冲信号。设晶振频率为6MHz

脉宽为20ms的脉冲信号,其周期要大于20ms的。估计你是说反了吧,应该是脉宽为1ms,而周期是20ms,那低电平是19ms,这才合理。可以定时1ms输出高电平,再计时19ms输出低电平。这样,高电平1ms加上低电平19ms是一个周期为20ms。追问

周期是1s,我写错了

温馨提示:答案为网友推荐,仅供参考
第1个回答  2019-04-06
要输出一个正脉冲信号,其周期为1ms,而脉宽却为20ms,做不到;追问

不好意思,周期是1s,写错了

请问应该要怎么写才好呢?

追答

先把 T0 设置为1mS(或者2、5、10)产生一次中断,然后在中断例程里面设置一个静态变量,如 cunt(或者在外面设置个全局变量),每中断一次就对该变量加1,当此变量cunt=1000时,就清零;
然后是操作P1.0引脚的输出状态,这一段代码可以放在中断例程里,也可以放在外面,
sbit Pulse=P1^0;//全局变量
if(cunt<20){Pulse=1;}else{Pulse=0;}
如果T0 设置为 5mS产生一次中断,则cunt=4时,就是20mS了,cunt=200时,就是1000mS了,就要给 cunt清零了;

追问

你能不能帮忙写一下呢😁

他这个脉宽为20ms的正脉冲信号是什么意思呢?有什么要求吗?

🙏🙏请问这个脉宽20ms是有什么要求吗?

追答

就是20mS的高电平,所以输出1,余下时间全是低电平,所以输出0。正脉冲就是说有脉冲来就是高电平,无脉冲来就是低电平。关于信号问题属于基础知识,你不能不掌握的

追问

好的,麻烦你看一下我写的这个

追答

T0 的配置,你就参考教材例程,定时值为 C;

在中断例程里:
cunt++;
if(cunt>N)cunt=0; // N=1000/C;
;///////////////////////////////
定义全局变量
sbit P1_0 = P1^0;

cunt=0;
main()
{
。。。。
while(1)
{
if(cunt<M){P1_0=1;}else{P1_0=0;} // M=20/C ;

}
}

本回答被网友采纳
第2个回答  2019-04-08
T0定时器最大计数值65535*1s/6M=10.9ms,所以直接用定时器是做不到的,只能用定时器做个固定周期的触发,然后再设个计数变量,每个触发周期对计数值加一,来累积实现比定时器容量更长的计时。如果需要代写具体程序的话可以私信我追问

具体要怎么写呢?

追答

第3个回答  2019-04-06
yxj k gucfickvicudigkcurxigigcudtftikcgjxfurdicfuxuxusudcjjcuxdu jkcdurickcjcusrkckcjxidkckcjudkcj,jxkkickcjxgdtkckurjcjckckcditifixkvuxuxux
第4个回答  2019-04-06
入入入一入了成功人士😪👀😪😃😉😃