[ZLG-MCU] 为什么LPC的TH2,TL2不更新?

[复制链接]
2458|1
 楼主| taowa 发表于 2007-11-9 10:58 | 显示全部楼层 |阅读模式
手册上说CCU&nbsp;timer&nbsp;可以随时读写,写入的值在预分频器溢出后有效。<br />并且写入时先TH2,后TL2&nbsp;,读取时先TL2后TH2.&nbsp;<br />写了一个验证程序,先向TH2,TL2写入一个值,再读出验证,通过串口打印出来<br />在KEIL下仿真,一切正常.实际烧片测试,发现TH2,TL2经常不能更新。<br /><br />代码摘录如下<br />#include&nbsp;&ltPhilips
eg932.h&gt<br />#include&nbsp;&ltstdio.h&gt<br />#pragma&nbsp;ot(0)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//取消任何优化<br /><br />void&nbsp;CCUCaptureInt(void);<br /><br />void&nbsp;CCUInt(void)&nbsp;interrupt&nbsp;&nbsp;11&nbsp;&nbsp;//CCU工作在普通模式(捕获有效)<br />{<br />&nbsp;unsigned&nbsp;char&nbsp;inttype;<br />&nbsp;inttype=TISE2;<br />&nbsp;if(inttype==CAPTUREA_INT)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//捕获中断<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CCUCaptureInt();<br />&nbsp;TIFR2=0x00;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//清除中断标志<br />}<br /><br />void&nbsp;CCUCaptureInt(void)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;char&nbsp;i,tl,th;<br />&nbsp;&nbsp;&nbsp;&nbsp;TH2=0x00;<br />&nbsp;&nbsp;&nbsp;&nbsp;TL2=0x00;<br />&nbsp;&nbsp;&nbsp;&nbsp;for(i=0;i&lt100;i++);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//稍做延时&nbsp;TIMER2溢出时间为53ms&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//经过这个延时&nbsp;Timer2的计数值理论上不会超过0x6000<br />&nbsp;&nbsp;&nbsp;&nbsp;tl=TL2;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//读出以便验证<br />&nbsp;&nbsp;&nbsp;&nbsp;th=TH2;<br />&nbsp;&nbsp;&nbsp;&nbsp;printf(&quot;
th:%bu,tl:%bu&quot;,th,tl);<br />&nbsp;&nbsp;&nbsp;&nbsp;while(1);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//终止程序<br />}<br /><br />void&nbsp;main(void)<br />{<br />&nbsp;P2M1=0x00;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//端口配置<br />&nbsp;P2M2=0x00;<br />&nbsp;P1M1=0x00;<br />&nbsp;P1M2=0xf1;<br />&nbsp;TPCR2H=0;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//CCU分频器配置,内部RC振荡器计时周期为53ms<br />&nbsp;TPCR2L=2;<br />&nbsp;CCCRA=0x08;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//CCU捕获置为下降沿触发<br />&nbsp;TCR20=0x01;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//CCU开始计数<br />&nbsp;ECCU=1;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//使能ECCU中断<br />&nbsp;TICR2=0x01;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//使能捕获通道A中断<br />&nbsp;BRGR0=48;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//7.373MHZ&nbsp;约115200Bps<br />&nbsp;BRGR1=0;<br />&nbsp;BRGCON=0x03;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//打开波特率发生器并连接<br />&nbsp;SCON=0x52;<br />&nbsp;EA=1;<br />&nbsp;P2=0xff;<br />&nbsp;while(1);<br />}<br />
wxj1952 发表于 2007-11-10 21:21 | 显示全部楼层

Intel—51不是这样。

Intel—51的TH2/TL2的自动刷新是靠RCAP2H/RCAP2L。也就是要想改变T2值,只要改变RCAP2寄存器值就行了。这样每当T2溢出时RCAP2的值都自动写入T2。这是硬件操作,不可能出错的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

7

主题

51

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部