打印

分析一段程序

[复制链接]
2901|19
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
tm890912|  楼主 | 2013-10-11 21:38 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
#include "msp430x54x.h"
#define uint unsigned int
#define uchar unsigned char
void port_init();
void delay(uint x);
uchar t=0,u=0;
void main()
{
  WDTCTL = WDTPW + WDTHOLD; // 关闭看门狗
  port_init();
  while(1)
  {
    if(t==200)
    {
      t=0;
      P9OUT =~P9OUT;
    }
  }
}
void port_init()
{
  P5DIR |= 0x16;
  P5OUT = 0x10;
  P1DIR |= 0xf0;
  P1OUT |= 0xf0;
  P8DIR = 0xff;
  P8OUT = 0xff;
  P9DIR |= 0x0f;
  P9OUT |= 0xff;
  TA0CTL=0x02c2;
  TA0EX0=0x0007;
  TA0R=(65536-20000);
  TAIFG=0;
}
void delay(uint x)
{
  uint a,b;
  for(a=x;a>0;a--)
    for(b=110;b>0;b--);
}
#progma vector=TIMER0_A0_VECTOR  //(Error[Pe011]: unrecognized preprocessing directive)
__interrupt void Timer0_A0()
{
  TA0R=(65536-20000);
  TAIFG=0;         //(Error[Pe137]: expression must be a modifiable lvalue )
  t++;
}
括号里是错误原因,该怎么改,求指教!

相关帖子

沙发
helldata| | 2013-10-12 09:52 | 只看该作者
第一处:#pragma vector = ... ; pragma写错了;
第二处:TAIFG 这儿TAIFG是一个宏,一个常量,常量是不能赋值的;

使用特权

评论回复
板凳
tm890912|  楼主 | 2013-10-12 10:02 | 只看该作者
helldata 发表于 2013-10-12 09:52
第一处:#pragma vector = ... ; pragma写错了;
第二处:TAIFG 这儿TAIFG是一个宏,一个常量,常量是不能 ...

TAIFG不是标志位吗,为什么不能赋值?

使用特权

评论回复
地板
meihao1| | 2013-10-12 10:11 | 只看该作者
这个真是可以用吗

使用特权

评论回复
5
dirtwillfly| | 2013-10-12 10:41 | 只看该作者
本帖最后由 dirtwillfly 于 2013-10-12 10:56 编辑

昨天翻了下msp430f5438的手册,msp430f5438没有寄存器TAIFG,看你用的是Timer0,你应该用TA0IFG寄存器

使用特权

评论回复
6
tm890912|  楼主 | 2013-10-12 15:52 | 只看该作者
dirtwillfly 发表于 2013-10-12 10:41
昨天翻了下msp430f5438的手册,msp430f5438没有寄存器TAIFG,看你用的是Timer0,你应该用TA0IF ...

    你看的好像是msp430f5438a的芯片手册  ,5438不是TIME-A和TIME-B吗, 我看的5438的芯片手册里就没找到那几个寄存器这是一部分寄存器

E65QF39)~XVU`(S(DAE(L]9.jpg (40.76 KB )

E65QF39)~XVU`(S(DAE(L]9.jpg

$70SD0K@9RD`860M)0AL3]7.jpg (116.38 KB )

$70SD0K@9RD`860M)0AL3]7.jpg

使用特权

评论回复
7
dirtwillfly| | 2013-10-12 16:11 | 只看该作者
tm890912 发表于 2013-10-12 15:52
你看的好像是msp430f5438a的芯片手册  ,5438不是TIME-A和TIME-B吗, 我看的5438的芯片手册里就没找 ...

你看看你用的头文件里是定时器0的寄存器是什么名字

使用特权

评论回复
8
tm890912|  楼主 | 2013-10-12 16:28 | 只看该作者
dirtwillfly 发表于 2013-10-12 16:11
你看看你用的头文件里是定时器0的寄存器是什么名字

这个里面好像没有涉及到标志位的寄存器,只有这里有

使用特权

评论回复
9
dirtwillfly| | 2013-10-12 16:57 | 只看该作者
tm890912 发表于 2013-10-12 15:52
你看的好像是msp430f5438a的芯片手册  ,5438不是TIME-A和TIME-B吗, 我看的5438的芯片手册里就没找 ...

MSP430F5438A.pdf (945.66 KB)

我看的这个数据手册里同时介绍MSP430F5438和MSP430F5438A,在Timer0部分,没看到说MSP430F5438和MSP430F5438A有区别

使用特权

评论回复
10
tm890912|  楼主 | 2013-10-12 20:34 | 只看该作者
dirtwillfly 发表于 2013-10-12 10:41
昨天翻了下msp430f5438的手册,msp430f5438没有寄存器TAIFG,看你用的是Timer0,你应该用TA0IF ...

貌似TA0IFG还是不能识别

使用特权

评论回复
11
zyj9490| | 2013-10-12 20:49 | 只看该作者
写源代码前,看看本蕊片的头文件,通过这个文件把硬件跟软件关联在一起。必须看明白头文件是预先必做的功课。

使用特权

评论回复
12
zyj9490| | 2013-10-12 20:57 | 只看该作者
tm890912 发表于 2013-10-12 20:34
貌似TA0IFG还是不能识别

430没有位的算法,都是字节加位置码,提取出那个位。TAIFG就是那个中断标志的位,你可以先读出控制寄成器的值与位置码相与,判断是0还是非0,还有对位置吗取反相与,再写回控制寄成器,就清了标志位了。

使用特权

评论回复
评分
参与人数 1威望 +2 收起 理由
dirtwillfly + 2 赞一个!
13
tm890912|  楼主 | 2013-10-12 21:54 | 只看该作者
zyj9490 发表于 2013-10-12 20:57
430没有位的算法,都是字节加位置码,提取出那个位。TAIFG就是那个中断标志的位,你可以先读出控制寄成器 ...

能问个菜鸟问题吗  430是不是有2个定时器?  那后面的A5是什么意思?

使用特权

评论回复
14
zyj9490| | 2013-10-12 23:00 | 只看该作者
A5,TI内部的外设技术编号,有几个定时器看具体型号,别的型号有B7定时器外设。

使用特权

评论回复
15
zyj9490| | 2013-10-12 23:08 | 只看该作者
helldata 发表于 2013-10-12 09:52
第一处:#pragma vector = ... ; pragma写错了;
第二处:TAIFG 这儿TAIFG是一个宏,一个常量,常量是不能 ...

这是位在字节中的位置码。

使用特权

评论回复
16
gaochy1126| | 2013-10-12 23:52 | 只看该作者
查看一下是否有这个矢量。

使用特权

评论回复
17
vivilzb1985| | 2013-10-13 23:22 | 只看该作者
我也看看的了,楼上各位的分析的都还不错的

使用特权

评论回复
18
u880| | 2013-10-20 21:00 | 只看该作者
楼主这个是什么功能呢?

使用特权

评论回复
19
huigoushang| | 2013-10-20 21:26 | 只看该作者
其实也没什么难的

使用特权

评论回复
20
waitingf| | 2013-10-20 22:15 | 只看该作者
技术贴

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

5

主题

27

帖子

0

粉丝