之前编写query命令之的时候
在三个地方设了非常大的时间间隔。
1.在定时器初始化的时候,让rTCNTB1=65535;rTCMPB1=0;
2在初始化完毕,启动定时器后,开启定时器中断之前,设定了一个延时,这个延时很长
可以是delay_while(50000);
3在定时器中断里面,因为定时器是一直保持翻转电平,所以在定时器里面产生12.5us定界符的时候,之前还保持了65535这个数量级别的
延时。
4添加的一位数据,给予其赋值0xa的那一位,在中断里面可以给它定义不一样的高电平脉冲。
现在看来完全没必要!因为定时器的抖动,发生在产生第一次中断之前,即初始化时候rTCNTB1计数减为0的时候,产生第一次中断的时候,会产生高低高低不可控制的
一小段抖动电平。
为了消除这一段抖动电平,我只要使用3,即产生定界符12.5us之前,给延时足够的长度,那么我就可以把这段抖动与qeury命令波形完全隔离开来
而其可以控制隔离的时间长度。所以这地方,省略步骤1 2 3 4中的第二步,第一步貌似也是可以省略的!
在初始化完成之后,直接开启定时器1中断,就可以看到完美的波形了,而且query前面的部分可以通过定界符即3来控制
query后面的高电平宽度可以通过4来控制。
下面实验一下把1去掉看是什么结果,不过我估计还是要定时一段时间不然一下进入中断就不好使了。
貌似产生两个query命令之间的间隔短了的话,定时器1不容易启动啊,蛋疼。
而且我用示波器打了,一个Uart0_Printf()竟然要使用1.2ms,太不可思议了吧,下面看看rn16
发现产生不了定时器中断并产生query命令的原因是,并不是因为没有加入Uart0_Printf()
而是因为电源没有使用稳压电源,导致开发板供电不稳定,所以定时器都没有启动起来哈。
使用了张师兄给的5V稳压电源之后,能稳定的产生定时器1中断和query波形了。
并且验证了把1 2 去掉,也能够产生所想要的query命令这一论证!
而且通过示波器,随便打一下,就可以看到RN16波形,RN16波形与前面的query命令波形之间的间隔是70us左右。