简单的 PIC单片机定时器中断程序怎么进不去?

[复制链接]
7354|5
 楼主| liuyanlbg 发表于 2012-5-16 21:15 | 显示全部楼层 |阅读模式
各位好!我用PIC16F73单片机编一个定时器程序,但无法进入中断程序,如果把中断程序放到主函数中能正常运行。程序如下:
#include "init.h"
#define set_bit(a,b) a|=1<<b
#define clr_bit(a,b) a&=~(1<<b)
uchar timecnt;
//看门狗初始化
void watchdoginit(void)
{
  OPTION = 0x0F;  //B口上拉,内部RC时钟,预分频给WDT,WDT分频为1:128
}
//定时器1初始化,10ms定时
void timer1init(void)
{
  TMR1H = 0XFB;
  TMR1L = 0X1E;
  TMR1IF = 0;
  PEIE = 1;
  TMR1IE = 1;
  T1CON = 0X31;
}
//端口初始化
void portinit(void)
{
  //clr_bit(OPTION,7);     //端口B内部上拉使能
  TRISA = 0xFF;
  TRISB = 0x7F;
  clr_bit(PORTB,7);
  TRISC = 0x00;
  PORTC = 0x10;
}
void init(void)
{
  di();
  portinit();
  timer1init();
  ei();
}
//中断服务程序
void interrupt ISR(void)
{
  if(TMR1IF)
  {
    TMR1IF = 0;
    TMR1H = 0XFB;
    TMR1L = 0X1E;
    timecnt++;
    if(timecnt<30)
    {
      set_bit(PORTC,0);
    }
    else
    {
      clr_bit(PORTC,0);
    }
    if(timecnt>60)
      timecnt = 0;
  }
}
void main(void)
{
  clr_bit(TRISC,0);
  clr_bit(TRISC,1);
  clr_bit(TRISC,3);
  watchdoginit();
  init();
  while(1)
  {
    CLRWDT();
  }
}
求高手求解!
XIEYUANBIN 发表于 2012-5-16 21:47 | 显示全部楼层
intcon : gie 全局中断允许没开
 楼主| liuyanlbg 发表于 2012-5-17 09:11 | 显示全部楼层
ei()在PIC.H中已定义为GIE=1;定时器程序能运行,中断程序放到主函数中能正常运行,说明已经有中断产生,但是中断程序放到外面时就无法识别
 楼主| liuyanlbg 发表于 2012-6-4 22:32 | 显示全部楼层
是编译器的问题,换一个编译器就好了,哈哈!
yewuyi 发表于 2012-6-5 09:04 | 显示全部楼层
TIME1不光受GIE控制,还有一个外部中断源容许位的吧?那个打开了吗?
兰天白云 发表于 2012-6-5 14:46 | 显示全部楼层
void init(void)
{
  di();
  portinit();
  timer1init();   //这里已经启动T1并允许中断
  ei();              //这里干了些什么,有没有关中断?或T1
}
您需要登录后才可以回帖 登录 | 注册

本版积分规则

37

主题

59

帖子

0

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