您的位置:首页 > 产品设计 > UI/UE

关于query命令的定时器编码的另外思考

2013-04-16 15:50 246 查看
之前编写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左右。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: