智能车制作

 找回密码
 注册

扫一扫,访问微社区

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

[编程类] 中断计数问题

[复制链接]

2

主题

10

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
371
威望
202
贡献
123
兑换币
129
注册时间
2012-12-17
在线时间
23 小时
跳转到指定楼层
1#
发表于 2013-5-7 19:52:29 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
1贡献
我写的中断计数程序,从中断出来后再进入For循环,为啥只能执行for循环中的第一条语句????

42

主题

1054

帖子

0

精华

常驻嘉宾

Rank: 8Rank: 8

积分
3034

优秀会员奖章活跃会员奖章

QQ
威望
1650
贡献
780
兑换币
625
注册时间
2012-7-6
在线时间
302 小时
2#
发表于 2013-5-7 20:33:17 | 只看该作者
额  是不是中断里面的计算过大了? 进入中断后你把使能关了,要出中断的时候再开试试
回复

使用道具 举报

34

主题

271

帖子

0

精华

常驻嘉宾

Rank: 8Rank: 8

积分
3982

优秀会员奖章活跃会员奖章论坛元老奖章

威望
1766
贡献
1586
兑换币
661
注册时间
2011-11-6
在线时间
315 小时
3#
发表于 2013-5-8 15:10:14 | 只看该作者
看看程序
回复

使用道具 举报

2

主题

10

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
371
威望
202
贡献
123
兑换币
129
注册时间
2012-12-17
在线时间
23 小时
4#
 楼主| 发表于 2013-5-9 15:11:00 | 只看该作者
clan 发表于 2013-5-8 15:10
看看程序

void main(void)   
{  
  uint data=12345;

  DDRA=0XFF;  
  DDRB = 0xFF;                //设置PB(0-7)方向为输出   
  PORTB = 0xFF;               //设置PB(0-7)输出高电平   

  sysclock_init();

  PWM_Init();
  lcd_initial();
  write_command(0x2C);
  dsp_single_colour(0x00,0x00);//改变数据,显示不同的背景



  DDRP_DDRP1 = 0;             //设置PP0口方向为输入   
  PERP_PERP1 = 1;             //设置PP0口拉设备启用   
  PPSP_PPSP1 = 1;             //打开PP0口上拉   
  PIEP_PIEP1 = 1;             //设置PP0口中断使能   

  EnableInterrupts;           //打开中断   
  for(;;)
  {  
    arrey1[0]=arrey[speed/10000];
    arrey1[1]=arrey[speed/1000%10];
    arrey1[2]=arrey[speed/100%10];
    arrey1[3]=arrey[speed/10%10];
    arrey1[4]=arrey[speed%10];
    Display_ASCII8X16(25,50,arrey1);

//   PORTB_PB0 = 1;            //打开LED   
  }              

}



//中断函数  
#pragma CODE_SEG __NEAR_SEG NON_BANKED//将中断函数置于非分页区内,地址空间超过了16位的寻址空间64K,但是它的中断向量地址只有16位,所以中断程序要执行,就得在它16位的寻址空间也即非分页区内,这就是为什么会将S12的中断函数置于非分页区的原因。   
interrupt 56 void IRQ_ISR(void)       //56为PP口中断向量号,它是由文件"mc9s12g128.h"中定义的宏,可在这个文件中搜索"VectorNumber"查找各个中断的中断向量号   
{   
uint time;

  DisableInterrupts;                  //关闭中断                     
  PIFP_PIFP1 = 1;                     //清除PP0的中断标志位   
//  PORTB_PB0 = 0;                      //关闭LED   
//  delayms(1000); //延时以至于可以观察到效果

   time++;

   speed=time;

  EnableInterrupts;                   //打开中断   
}  
#pragma CODE_SEG DEFAULT              //将后续代码置于默认区域内

回复

使用道具 举报

2

主题

10

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
371
威望
202
贡献
123
兑换币
129
注册时间
2012-12-17
在线时间
23 小时
5#
 楼主| 发表于 2013-5-9 15:12:09 | 只看该作者
穆旦阿斗 发表于 2013-5-7 20:33
额  是不是中断里面的计算过大了? 进入中断后你把使能关了,要出中断的时候再开试试

好的,我试试看,谢谢了!
回复

使用道具 举报

42

主题

1054

帖子

0

精华

常驻嘉宾

Rank: 8Rank: 8

积分
3034

优秀会员奖章活跃会员奖章

QQ
威望
1650
贡献
780
兑换币
625
注册时间
2012-7-6
在线时间
302 小时
6#
发表于 2013-5-9 15:25:08 | 只看该作者
speed=time? time还是动态局部变量?  这个中断是测速??  
回复

使用道具 举报

34

主题

271

帖子

0

精华

常驻嘉宾

Rank: 8Rank: 8

积分
3982

优秀会员奖章活跃会员奖章论坛元老奖章

威望
1766
贡献
1586
兑换币
661
注册时间
2011-11-6
在线时间
315 小时
7#
发表于 2013-5-9 23:19:51 | 只看该作者
志恒 发表于 2013-5-9 15:11
void main(void)   
{  
  uint data=12345;

你多长时间进入一次中断,可能中断里面写的东西太多了,时间就不准了,没法进中断
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-20 19:41 , Processed in 0.045509 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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