单片机/MCUwilliam hill官网
直播中

jf_67090565

1年用户 5经验值
擅长:嵌入式技术
私信 关注
[问答]

求助一下关于51系列单片机的Timer0的计时问题,TH0、TL0+1的时间是怎么算的?

使用的CH552单片机,想简单地研究下各种机器时间、系统时间的关系,于是写了个中断。按照说明书,我这程序里系统主频应为12MHz,中断用于反转端口测量频率,结果如图
91b66b189e20fe3695ca52ab5e4c9ca.jpg

根据示波器结果为10us左右触发一次中断,时间似乎对不上??或者有没有大神指点一下正确的计算方法?说明书在附件奉上*附件:CH552DS1.PDF

//Timer0中断
void writeByCZC_Interrupt(void) interrupt INT_NO_TMR0 using 1
{

TH0=0xFF;
TL0=0x37;		//这俩是Timer0的计数,满了就中断?
//计数200次满

TIN3=!TIN3;

}

int main(void)
{
//时钟选择,使用内部时钟固定24MHZ
//默认内部时钟,24MHz,调整系统频率
SAFE_MOD = 0x55;
SAFE_MOD = 0xAA;
CLOCK_CFG = 0x84; //10000100 12MHz

//中断计数预设值
TH0=0;			//高位的预设
TL0=0;			//低位的预设
//允许中断
TR0=1;
ET0=1;
EA=1;		//全局中断允许


/***********/
//串口相关的设置
SM0=0;
SM1=0;
SM2=0;

TIN5=0;
MISO=1;
TIN3=0;

while(1)
{		
	
}

}

奖励5积分

回帖(2)

jf_67090565

2024-12-24 12:21:54
破案了,其实代码本身没有错,只是TMOD没有设置,导致实际上是按照13位来计数的。TL0+1的时间仍然是1us
举报

淡淡的爱

2024-12-21 17:38:38
根据您提供的代码和描述,您使用的是CH552单片机,系统主频为12MHz。您想要通过Timer0中断来测量频率,但是发现实际触发中断的时间与预期不符。下面我将为您解释Timer0的计时原理以及如何计算TH0和TL0的值。

首先,我们需要了解Timer0的工作原理。Timer0是一个16位定时器,由TH0和TL0两个8位寄存器组成。当Timer0溢出时(即TH0和TL0的值从0xFFFF变为0x0000),会产生一个中断。我们需要计算TH0和TL0的值,使得Timer0在特定的时间间隔内溢出。

在12MHz的系统主频下,每个机器周期的时间是1/12MHz = 83.33ns。Timer0的计数器是一个16位的计数器,最大值为0xFFFF,即65535。因此,Timer0的最大计数时间为65535 * 83.33ns = 5.46ms。

现在我们来计算TH0和TL0的值。假设我们想要Timer0在10us内溢出,那么我们需要计算出需要计数的值。10us = 10 * 1000ns = 10000ns。由于每个机器周期为83.33ns,所以需要计数的周期数为10000ns / 83.33ns ≈ 120。

由于Timer0是一个16位计数器,我们需要将120转换为TH0和TL0的值。120 = 0x78,所以TH0 = 0x07,TL0 = 0x78。

现在我们来修改您的代码:

```c
void writeByCZC_Interrupt(void) interrupt INT_NO_TMR0 using 1 {
    TH0 = 0x07; // 高位的预设值
    TL0 = 0x78; // 低位的预设值
    TIN3 = !TIN3; // 反转端口
}

int main(void) {
    // 时钟选择,使用内部时钟固定24MHz
    // 默认内部时钟,24MHz,调整系统频率
    SAFE_MOD = 0x55;
    SAFE_MOD = 0xAA;
    CLOCK_CFG = 0x84; // 10000100 12MHz

    // 中断计数预设值
    TH0 = 0x07; // 高位的预设值
    TL0 = 0x78; // 低位的预设值

    // 启用Timer0中断
    ET0 = 1; // 启用Timer0中断
    EA = 1;  // 启用全局中断

    while (1) {
        // 主循环
    }
}
```

通过以上修改,您的Timer0中断应该能够在大约10us的时间内触发一次。希望这能帮助您解决问题。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分