智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 1178|回复: 1
打印 上一主题 下一主题

[其他] MC9s12xs128mal PIT中断进不了

[复制链接]

1

主题

2

帖子

0

精华

注册会员

Rank: 2

积分
47
威望
38
贡献
7
兑换币
7
注册时间
2014-8-18
在线时间
1 小时
毕业学校
广西科技大学
跳转到指定楼层
1#
发表于 2014-8-21 20:06:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
1贡献
我在网上看过很多程序都运行不了,难道是128跟128mal寄存器有差别?

#include <hidef.h>      /* common defines and macros */
#include "derivative.h"      /* derivative-specific definitions */

#define uint unsigned int
#define uchar unsigned char

void pit_init(void)
{
  PITCFLMT=0;     //关闭PIT
  PITCE_PCE0=1;        //打开定时器通道0
  PITMUX_PMUX0=0;       //定时通道0使用微计数器0
  PITMTLD0=(80-1);  //设置微计数器0的加载寄存器N
  PITLD0=(50000-1);  //设置16位计数器0的加载寄存器M
                  //定时周期=(N+1)*(M+1)/BusClk=(0x4f+1)*(0xc34f+1)/(16M/2)=0.5s
  PITINTE |= (1<<0); //使能定时通道0的中断
  PITCFLMT=0x80;  //使能PIT
}

/*主函数*/
void main(void)
{
  DDRB=0xff;
  PORTB=0xfe;
  pit_init();
  EnableInterrupts;
  for(;;)
  {
    _FEED_COP(); /* feeds the dog */  
  }
}

void interrupt 66 PIT0(void)
{
  PITCFLMT=0;     //只用一个通道时,关闭PIT,稳定,清超时标志位
  PORTB=~PORTB;   //反转电平
//  PITTF=(1<<0);   //清超时标志位
  PITCFLMT=0x80;  //使能PIT
}

回复

使用道具 举报

1

主题

2

帖子

0

精华

注册会员

Rank: 2

积分
47
威望
38
贡献
7
兑换币
7
注册时间
2014-8-18
在线时间
1 小时
毕业学校
广西科技大学
2#
 楼主| 发表于 2014-8-21 20:30:06 | 只看该作者
用的是128mal,程序是128的,怀疑是中断号问题,不知道怀疑正不正确。用查询PITTF值判断时间到没到是可以运行的。
void main(void)
{
  DDRB=0xff;
  PORTB=0xff;
  pit_init();
  for(;;)
  {
    //查询法
    if(PITTF&0x01)  //检查是否超时
    {
      PORTB=~PORTB; //PB口反转电平
      PITTF=(1<<0); //清超时标志位
    }
    //循环,不必再初始化加载寄存器
    _FEED_COP(); /* feeds the dog */  
  }
}
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-28 13:35 , Processed in 0.125044 second(s), 30 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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