极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 11169|回复: 0

【大赛原创经验贴】 学习MSP430 这十几天中所遇到的问题

[复制链接]
发表于 2012-7-18 09:26:25 | 显示全部楼层 |阅读模式
我七月才开始接触MSP430 准确的说是单片机C语言这一方面 以前只是初略的学过一点汇编语言  说以在刚开始是我遇到了不少的问题  并且现在也都还有少的问题。今天看见了斑竹的帖子 于是就想写出来,给大家看看,一是想给和我一样遇到了这方面问题的让人一点点帮助  ,另一方面是希望懂的大神有更好的方法就教教我。
我是初学也许这帖子出来有很多可笑的地方 还望懂的朋友给我指出我的错误 供我学习。     
1、 遇到的第一个问题是按键的,由于当时还没学中断,我就用的IF判断,可是在信号输入方面总是出问题,后来在网上看见了一篇关于电阻上拉的文章
文章如下:

上下拉是否开启是否REN寄存器决定的,而上拉还是下拉是由OUT寄存器决定的,在作为输出时,随着OUT的高低,自动选择上下拉,作为输入的时候,我们也可以人为的付OUT寄存器来得到上下拉。
下面的是我的一个按键的程序(不是中断):

#include <msp430g2452.h>

int main( void )
{

  WDTCTL = WDTPW + WDTHOLD;
P1DIR&=BIT3;

  while(1)
  {     P1REN |= 0x08;
    if((P1IN&BIT3)==0x00)
    P1OUT|=BIT6;     
   else
      P1OUT=0x00;   
  }
}

2、遇到的第二个问题就是定时的问题,做出来的时间和我我计算出来的总是 有偏差而且不是一点半点,是很大的偏差,后来我才知道是时钟的选着出了问题。
先上第一个程序:定时器A

#include <msp430g2452.h>
void main( void )
{
WDTCTL = WDTPW + WDTHOLD;
   BCSCTL3 |= LFXT1S_2;         
  TACCTL0 = CCIE;
  TACCR0 =500;                                   
  TACTL = TASSEL_1 +ID_3 + MC_1;
  P1DIR |=BIT0;
    _EINT();
  LPM3;
while(1);
}
#pragma vector = TIMER0_A0_VECTOR

__interrupt void Timer_A (void)
{  
  P1OUT ^=BIT0;
}

实现LED闪烁时间0.5S。

第二个我做的是看门狗定时:
遇到的问题同样是时间的,先看程序。
#include <msp430g2553.h>
void main (void)
{ BCSCTL3 |= LFXT1S_0 + XCAP_3;   //这个的频率是32768HZ
  WDTCTL=WDT_ADLY_250  ;          //时间0.25,  看门狗可以设八个时间最大可以设1S最小可以设0.064MS。在库文件里可以查到没中时间的写法。
  IE1|=WDTIE;

  P1DIR|=BIT0;
  _EINT();
  while(1);
}
#pragma vector=WDT_VECTOR
__interrupt void WDT (void)
{
  P1OUT^=BIT0;
}

起初这一句BCSCTL3 |= LFXT1S_0 + XCAP_3;我写的和定时器A一样是BCSCTL3 |= LFXT1S_2; 但时间老是慢的很,假如我设 WDTCTL=WDT_ADLY_250但实际有1秒的样子。
到现在我都还把BCSCTL3这个寄存器搞清楚希望知道的可我解答最好能这样发一份BCSCTL3的给我(脑子笨需要详细的资料)。

BCSCTL1 基本时钟系统控制寄存器1
        7  6  5  4  3  2  1  0
XT2OFF  TXS  DIVA.1  DIVA.0  XT5V  Rsel.2  Resl.1  Resl.0

XT2OFF 控制XT2 振荡器的开启与关闭。
    TX2OFF=0,XT2振荡器开启。
    TX2OFF=1,TX2振荡器关闭(默认为TX2 关闭)

XTS    控制LFXT1 工作模式,选择需结合实际晶体振荡器连接情况。
    XTS=0,LFXT1  工作在低频模式(默认)。
    XTS=1,LFXT1  工作在高频模式(必须连接有高频相应的高频时钟源)。

DIVA.0 DIVA.1 控制 ACLK分频。
    0    不分频(默认)
    1     2分频
    2  4分频
    3  8分频

XT5V 此位设置为0。

Resl1.0,Resl1.1,Resl1.2 三位控制某个内部电阻以决定标称频率。
    Resl=0,选择最低的标称频率。
    ……..
    Resl=7,选择最高的标称频率。



第三个问题:
我现在在作步电机的现在  现在只是把正反转和停止作出来了还差调速的问题。  有人到是和我说过用什么位状态,但我不懂现在正在学习中,希望懂的教教我。

回复

使用道具 举报

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

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-4-25 10:14 , Processed in 0.040037 second(s), 17 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

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