请问下为什么跳转不到中断函数

[复制链接]
2403|2
 楼主| w67599 发表于 2012-12-26 11:40 | 显示全部楼层 |阅读模式
本帖最后由 w67599 于 2012-12-26 11:40 编辑

尝试了下发现并没有跳入中断函数PC_ODR=0x60;     说明是搬某个教程里面的计数方法的


源程序如下:#include <iostm8s103f3.h>


void CLK_init(void)
{
  CLK_CKDIVR = 0x08;         // 16M内部RC经2分频后系统时钟为8M
}

void GPIO_init(void)
{
   PA_DDR=0x02;
   PA_CR1=0x02;
   PC_DDR=0x60;
   PC_CR1=0x60;

}

void TIM1_init(void)
{
  TIM1_PSCRH = 0x1F;  // 8M系统时钟经预分频f=fck/(PSCR+1)
  TIM1_PSCRL = 0x3F;  // PSCR=0x1F3F,f=8M/(0x1F3F+1)=1000Hz,每个计数周期1ms
  TIM1_ARRH = 0x03;  // 自动重载寄存器ARR=0x01F4=500
  TIM1_ARRL = 0xE8;  // 每记数1000次产生一次中断,即500ms
  TIM1_IER = 0x01;    // 允许更新中断
  TIM1_CR1 = 0x01;  // 计数器使能,开始计数
}

#pragma vector=TIM1_OVR_UIF_vector
__interrupt void TIM1_OVR_UIF(void)
{
  PC_ODR=PC_ODR^0x00;
  TIM1_SR1 = 0;  // 清除更新中断标记,这步不能漏掉,否则会连续进入中断程序

}

void init_devices(void)
{
  asm("sim");  // 关全局中断
  CLK_init();
  GPIO_init();
  TIM1_init();
  asm("rim");  // 开全局中断
}

void main( void )
{


// 主循环里没有程序需要执行
  while(1)
  {
    init_devices();
    PC_ODR=0x00;
  }
}
uet_cache 发表于 2012-12-26 11:42 | 显示全部楼层
你主程序里怎么一直初始化。。。?

评分

参与人数 1威望 +1 收起 理由
w67599 + 1 很给力!

查看全部评分

 楼主| w67599 发表于 2012-12-26 12:30 | 显示全部楼层
uet_cache 发表于 2012-12-26 11:42
你主程序里怎么一直初始化。。。?

顾着跳时间下面没改掉···多谢提醒
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

3

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部