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