智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 1803|回复: 6
打印 上一主题 下一主题

哪位高手给我看看,我用的是G128,为什么D口的小灯不闪烁呢

[复制链接]

15

主题

83

帖子

0

精华

高级会员

Rank: 4

积分
594
威望
390
贡献
88
兑换币
37
注册时间
2012-7-28
在线时间
58 小时
跳转到指定楼层
1#
发表于 2012-9-18 18:29:17 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include <hidef.h>      /* common defines and macros */
#include "derivative.h"      /* derivative-specific definitions */
#include<mc9s12g128.h>
#pragma CODE_SEG __NEAR_SEG NON_BANKED


//////////////////////////////////
//********************将频率升到40M***************************//

void SetBusCLK_nM(byte nM)
{   
    MMCCTL1=0X00;                       
    PKGCR  =0X06;                       
    DIRECT =0x00;
    IVBR   =0xFF;   
    ECLKCTL=0xC0;   
    CPMUPROT   =0x26;   //停止保护时钟配置寄存器
    CPMUCLKS_PSTP=0;    //
    CPMUCLKS_PLLSEL=1;  //应用PLL      
    //CPMUSYNR   =nM-1;   //设置分频因子  
    CPMUSYNR   =0xc0|(nM-1); //设置分频因子
    CPMUREFDIV =0x80|0x00; //pllclock=2*(1+SYNR)= MHz;
    CPMUPOSTDIV=0x00;   // Set the post divider register      
    CPMUPOSTDIV=0x00;   // Set the post divider register  
    CPMUPLL    =0x10;   // Set the PLL frequency modulation  
    while(CPMUFLG_LOCK == 0);          /* Wait until the PLL is within the desired tolerance of the target frequency */
    CPMUPROT=0x00;            /* Enable protection of clock configuration registers */
}


//////////////////////////////////////////////////使用busclock   
void API_Init() {
    CPMUAPICTL_APIFE =0;//在设定值之前需要清零;
    CPMUAPICTL_APICLK = 1;
    CPMUAPIR = 20000;     ///1ms
   
   // CPMUACLKTR=0xFC;// fACLK is trimmed to 10KHz
    //?auto Clock 则要设置此寄存器 为0xfc
     CPMUAPICTL_APIE =1;
      CPMUAPICTL_APIF = 1;
    CPMUAPICTL_APIFE = 1;     
}


////////////////////////////////////////////////////////////

void main(void) {
  /* put your own code here */
  
  SetBusCLK_nM(40);
  DDRD = 0xff;
  PORTD = 0x00;
  API_Init();

        EnableInterrupts;
}
///////////////////////////////////////////////////////////
#pragma CODE_SEG __NEAR_SEG NON_BANKED
interrupt 59U void API(void) {
   
   static unsigned  int count =0;
  

  count++;
  if(count >= 300) {    ////100ms
       CPMUAPICTL_APIF = 1;
      count = 0;
      PORTD = ~ PORTD;
     
  }

}
#pragma CODE_SEG DEFAULT //将后续代码置于默认区域内

200

主题

2621

帖子

1

精华

杰出人士

蜗牛

Rank: 12Rank: 12Rank: 12

积分
12488

优秀会员奖章活跃会员奖章论坛骨干奖章论坛元老奖章在线王奖章资源大师奖章

QQ
威望
5973
贡献
3101
兑换币
1999
注册时间
2011-10-21
在线时间
1707 小时
2#
发表于 2012-9-18 18:40:59 | 只看该作者
你把count定义成全局变量试试
回复 支持 反对

使用道具 举报

15

主题

83

帖子

0

精华

高级会员

Rank: 4

积分
594
威望
390
贡献
88
兑换币
37
注册时间
2012-7-28
在线时间
58 小时
3#
 楼主| 发表于 2012-9-18 21:05:17 | 只看该作者
不行,编译有错误,现象还是一样,D口灯亮但是不闪烁,但是如果是单步调试的话,程序可以进入中断,而且小灯可以亮灭,所以还是不明白,你能帮我看看不?
回复 支持 反对

使用道具 举报

38

主题

1651

帖子

0

精华

功勋会员

Rank: 10Rank: 10Rank: 10

积分
8770
威望
4444
贡献
2638
兑换币
1818
注册时间
2010-12-29
在线时间
844 小时
4#
发表于 2012-9-18 21:10:28 | 只看该作者
弱猜,是不是闪得太快,眼睛看不出是在闪了?
回复 支持 反对

使用道具 举报

15

主题

83

帖子

0

精华

高级会员

Rank: 4

积分
594
威望
390
贡献
88
兑换币
37
注册时间
2012-7-28
在线时间
58 小时
5#
 楼主| 发表于 2012-9-18 21:26:24 | 只看该作者
不会,我改过时间试了很多遍
回复 支持 反对

使用道具 举报

17

主题

182

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2657
QQ
威望
1293
贡献
758
兑换币
267
注册时间
2012-5-11
在线时间
303 小时
6#
发表于 2012-9-18 21:45:15 | 只看该作者
单步执行可行。那就可能是1ms时间太短了。换成1s试试效果???
回复 支持 反对

使用道具 举报

15

主题

83

帖子

0

精华

高级会员

Rank: 4

积分
594
威望
390
贡献
88
兑换币
37
注册时间
2012-7-28
在线时间
58 小时
7#
 楼主| 发表于 2012-9-18 23:33:44 | 只看该作者
找到原因了,中断需要等待呀,不然程序跑飞了,呵呵,谢谢大家啦
void main(void) {
   /* put your own code here */
   
   SetBusCLK_nM(40);
   DDRD = 0xff;
   PORTD = 0x00;
   API_Init();

        EnableInterrupts;
for(;;)
{}
}
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关于我们|联系我们|小黑屋|智能车制作 ( 黑ICP备2022002344号

GMT+8, 2024-9-30 23:25 , Processed in 0.043994 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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