求助!自己看教程,写了一个程序,定时器中断不能跳转到中断服务函数

[复制链接]

73

主题

469

帖子

1005

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1005
楼主
发表于 2019-4-22 10:52:27   只看该作者


楼主,想实现什么功能?

猜测几个点:

GPIO口没有设定方向~  输入或者输出。

其它还没细看

73

主题

469

帖子

1005

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1005
沙发
发表于 2019-4-22 14:14:42   只看该作者


初始化代码供你参考下。

主程序的循环是不对的,你可以多读两遍,只要输出为高了,一直在执行代码。


  1. int main(void)
  2. {
  3.     WDTCTL = WDTPW | WDTHOLD;   //关闭看门狗
  4.    
  5.     //GPIO口初始化配置;
  6.     P1DIR |= BIT2;   //P1.2作为输出;
  7.     P1OUT |= BIT2;   //P1.2输出高电平;

  8.     P1DIR &= ~BIT3;  //P1.3接按键,作为输入
  9.     P1REN |=BIT3;    //=1,启用内部电阻;
  10.     P1OUT |=BIT3;   //=1,配置成上拉电阻
  11.    
  12.     P1IES |=BIT3;   //下降沿中断
  13.     P1IFG &=~BIT3;  //清除中断标志位
  14.     P1IE |=BIT3;   //使能中断

  15.     _BIS_SR(GIE);  //开启全局中断
  16.     while (1)
  17.     {
  18.         if((P1OUT&BIT2)==0)  
  19.         {
  20.             TA0CTL = TASSEL_1 + MC_1 + TACLR;
  21.             TA0CCTL0 = CCIE;
  22.             TACCR0 = 32768;       //30秒计时
  23.             _BIS_SR(GIE);
  24.         }
  25.         else
  26.             __no_operation();
  27.     }
  28. }
复制代码

73

主题

469

帖子

1005

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1005
板凳
发表于 2019-4-22 23:42:27   只看该作者
XHP 发表于 2019-4-22 19:52
我看不出循环体的错误。。。

我把主循环标上号(不考虑代码实现的功能):

P1.2输出高电平:  1-->2--> 7-->1 -->2--> 7 ...  中间是没有休息的
P1.2输出低电平:  1-->2--> 3-->4 -->5--> 6  -->1-->2--> 3-->4 -->5--> 6 ... 中间也是没休息,定时器被不停的初始化配置

  1.     while (1)    (1)
  2.     {
  3.         if((P1OUT&BIT2)==0)    (2)
  4.         {
  5.             TA0CTL = TASSEL_1 + MC_1 + TACLR;   (3)
  6.             TA0CCTL0 = CCIE; (4)
  7.             TACCR0 = 32768;       //30秒计时   (5)
  8.             _BIS_SR(GIE);  (6)
  9.         }
  10.         else
  11.             __no_operation();   (7)
  12.     }
复制代码

73

主题

469

帖子

1005

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1005
4#
发表于 2019-4-23 11:09:47   只看该作者
XHP 发表于 2019-4-23 10:22
嗯,这个我通过debug测试出来了,就是定时器初始化后要怎么做才能进入定时器中断? ...


建议先学习下MSP430G2553基本的例程操作。

先停止定时器运行;
配置参数;

清除中断标志位;
开启定时器中断;
开启全局中断;


启动计数器,定时器开始跑起来;
快速回复 返回顶部 返回列表