搜索
bottom↓
回复: 2

问题:定时器计算值和实际值频率差一半。

[复制链接]

出0入0汤圆

发表于 2018-9-25 16:22:47 | 显示全部楼层 |阅读模式

芯片:MC9S08DZ60
晶振:8MH
问题线束:中断服务函数里我写了让某一个脚取反,示波器是那个引脚在中断里取反出来的波形,根据计算:8Mhz/4*32=64Mhz,总线频率=64/2=32Mhz,,定时器32分频=1MHZ,50000数字计数一次,即50ms一次,也就是说50ms引脚电平反转一次,结果如图所示,100ms才反转一次,希望各位大神帮忙解答一下,不胜感激~~0~~

代码
/********************************************************************************************
** 函数名称: void INIT_MCG(void)
** 功能描述: 初始化总线时钟PEE模式      外部晶振频率为8MHz,总线频率32MHz
** 输 入: ​​​
** 输 出: 无
** 全局变量: 无
** 调用模块: 无
*********************************************************************************************/
void INIT_MCG(void)
{
// 上电复位为FEI模式   
// 由FEI模式转为FBE模式
MCGC2 = 0x36;                // 0x00110110  BDIV=00:用所选时钟除以1;RANGE=1: 8 MHz 的频率属于高频范围 ;
                              // HGO=1: 配置外部振荡器的高增益运行; EREFS=1:选择振荡器 ;ERCLKEN =1:MCGERCLK 使能
while(!MCGSC_OSCINIT);       // EREFS 位选择的晶体已经完成初始化
MCGC1 = 0xb8;                // 10111000 CLKS=10:将外部参考时钟选择为系统时钟源;  RDIV=111:参考时钟除以 128 (=62.5KHZ)
                              // IREFS=0: 选择外部参考时钟
while(MCGSC_IREFST);         // 是 0,表明外部参考是参考时钟的当前源
while(MCGSC_CLKST != 0b10);  // MCGSC 中的 CLKST (位 3 和 2)是 %10,表明已经选择外部参考时钟为 MCGOUT 馈电
// 从 FBE 模式转换到 BLPE 模式
MCGC2_LP = 1;                // 旁路模式中禁止 FLL ( 或 PLL) ( 低功率 ) (已进入 BLPE 模式)
MCGC1 = 0x90;                // 10010000  RDIV=010:8/4=2 MHZ PLL 要求的1MHz -- 2 MHz 频率范围内  
MCGC3 = 0x48;                // 01001000  PLLS=1:选择 PLL  VDIV=1000: 2 MHz  * 32 = 64 MHz
while(!MCGSC_PLLST);         // PLLST 置位,表明 PLLS 时钟的当前源是PLL
// 从 BLPE 模式转换到 PBE 模式
MCGC2_LP = 0;                // LP (位 3)清除至 0,切换到 PBE 模式
while(!MCGSC_LOCK);          // MCGSC 中的 LOCK (位 6)置位,表明 PLL 已经获得锁定
// 从 PBE 模式转换到 PEE 模式
MCGC1 = 0x10;                // 00010000  CLKS=00,将 PLL 输出选择为系统时钟源
while(MCGSC_CLKST != 0b11);  // CLKST (位 3 和 2)是 %11,表明已经选择 PLL 输出,在当前时钟模式中为 MCGOUT 馈电
}

/********************************************************************************************
** 函数名称: void INIT_TPM1ch0(void)
** 功能描述: 初始化TPM1ch0  
** 输 入: ​​​
** 输 出: 无
** 全局变量: 无
** 调用模块: 无
*********************************************************************************************/
void INIT_TPM1ch0(void)
{
​TPM1SC = 0X6D;            // 01101101  TOF = 0(清除溢出标志位); TOIE = 1(中断允许); CPWMS = 1( 所有通道以中央对齐 PWM 模式运行);
​                          //           CLKS[B:A] = 01(总线速率时钟); PS = 101(分频系数32);                    脉冲周期为1us
TPM1CNTH = 0;             // 任意时刻对TPM1CNTH或TPM1CNTL的写操作将计数寄存器的计数值复位(清零)
TPM1CNTH = 0;
TPM1MOD = 50000 - 1;      // 每50000个脉冲周期计数器溢出一次,溢出周期为50000 * 1us = 50ms
}
void interrupt 11 TPM1_OVERFLOW(void)
{

   TPM1SC_TOF = 0;//清除溢出标志位
   
   EPS_LED = ~EPS_LED; //引脚输出取反

}

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!

出0入0汤圆

发表于 2018-9-25 18:16:47 来自手机 | 显示全部楼层
50ms中断一次没毛病啊。50ms高电平,再50ms低电平,总共100ms一个周期,是正确的啊,楼主还有什么疑惑?

出0入0汤圆

 楼主| 发表于 2018-9-25 19:12:18 | 显示全部楼层
Ilove51andAVR 发表于 2018-9-25 18:16
50ms中断一次没毛病啊。50ms高电平,再50ms低电平,总共100ms一个周期,是正确的啊,楼主还有什么疑惑? ...

用示波器测试却是100ms高电平,再100ms低电平,如图,小弟不知这么办了,望大神给指导指导
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-27 06:07

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表