打印
[ZLG-MCU]

为什么LPC的TH2,TL2不更新?

[复制链接]
1753|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
taowa|  楼主 | 2007-11-9 10:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
手册上说CCU timer 可以随时读写,写入的值在预分频器溢出后有效。
并且写入时先TH2,后TL2 ,读取时先TL2后TH2. 
写了一个验证程序,先向TH2,TL2写入一个值,再读出验证,通过串口打印出来
在KEIL下仿真,一切正常.实际烧片测试,发现TH2,TL2经常不能更新。

代码摘录如下
#include <Philips eg932.h>
#include <stdio.h>
#pragma ot(0)                    //取消任何优化

void CCUCaptureInt(void);

void CCUInt(void) interrupt  11  //CCU工作在普通模式(捕获有效)
{
 unsigned char inttype;
 inttype=TISE2;
 if(inttype==CAPTUREA_INT)      //捕获中断
     CCUCaptureInt();
 TIFR2=0x00;                    //清除中断标志
}

void CCUCaptureInt(void)
{
    unsigned char i,tl,th;
    TH2=0x00;
    TL2=0x00;
    for(i=0;i<100;i++);        //稍做延时 TIMER2溢出时间为53ms 
                               //经过这个延时 Timer2的计数值理论上不会超过0x6000
    tl=TL2;                    //读出以便验证
    th=TH2;
    printf(" th:%bu,tl:%bu",th,tl);
    while(1);                            //终止程序
}

void main(void)
{
 P2M1=0x00;              //端口配置
 P2M2=0x00;
 P1M1=0x00;
 P1M2=0xf1;
 TPCR2H=0;               //CCU分频器配置,内部RC振荡器计时周期为53ms
 TPCR2L=2;
 CCCRA=0x08;             //CCU捕获置为下降沿触发
 TCR20=0x01;             //CCU开始计数
 ECCU=1;                 //使能ECCU中断
 TICR2=0x01;             //使能捕获通道A中断
 BRGR0=48;               //7.373MHZ 约115200Bps
 BRGR1=0;
 BRGCON=0x03;            //打开波特率发生器并连接
 SCON=0x52;
 EA=1;
 P2=0xff;
 while(1);
}

相关帖子

沙发
wxj1952| | 2007-11-10 21:21 | 只看该作者

Intel—51不是这样。

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

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

7

主题

51

帖子

0

粉丝