MSP430F149——定时器

前言

特点

msp430系列单片机是16位,51单片机为8位,stm32系列为32位。 位数越高代表着该单片机处理数据的能力越快,性能也就越高。32位机器处理性能好,8位机器廉价性价比高,16位机器超低功耗。就是有一个低功耗模式,可以长时间极少耗损地待机,定时唤醒cpu进行工作.

学习路线

详细理解时钟初始化配置。
熟悉基本操作IO口。
学习定时器三大功能。
学习中断的原理。
操作各种外设,模块。

MSP430内部结构

在接触一款单片机,首先应该了解其总体框架,了解其内部结构,方便后期进行学习理解。
系统内部总体结构

系统时钟

在MSP430F149单片机中一共有三个时钟源:

(1)LFXT1CLK,为低速/高速晶振源,通常接32.768kHz,也可以接(400kHz~16Mhz);

(2)XT2CLK,可选高频振荡器,外接标准高速晶振,通常是接8Mhz,也可以接(400kHz~16Mhz);

(3)DCOCLK,数控振荡器,为内部晶振,由RC震荡回路构成;

在MSP430F149内部一共有三个时钟系统:

(1)ACLK(Auxiliary Clock)辅助时钟,通常由LFXT1CLK或VLOCLK作为时钟源,可以通过软件控制更改时钟的分频系数;

(2)MCLK(Master Clock)系统主时钟单元,为系统内核提供时钟,它可以通过软件从四个时钟源选择;

(3)SMCLK(Sub-Main Clock)系统子时钟,也是可以由软件选择时钟源。

MSP430F149的时钟设置相关寄存器

DCOCTL

DCO控制寄存器,地址为56H,初始值为60H
在这里插入图片描述
DCO0~DCO2: 定义了8种频率之一,而频率由注入直流发生器的电流定义。

MOD0~MOD4: Modulation Bit,频率的微调。

该寄存器在不需要DCO的场合保持默认初始值

BCSCTL1

时钟配置寄存器 1,地址为57H,初始值为84H
在这里插入图片描述
RSEL0~RSEL2: 选择某个内部电阻以决定标称频率.0最低,7最高。

XT5V: 1.

DIVA0~DIVA1:选择ACLK的分频系数。DIVA=0,1,2,3,ACLK的分频系数分别是1,2,4,8;

XTS: 选择LFXT1工作在低频晶体模式(XTS=0)还是高频晶体模式(XTS=1)。

XT2OFF: 控制XT2振荡器的开启(XT2OFF=0)与关闭(XT2OFF=1)。

正常情况下把XT2OFF复位.

BCSCTL2

时钟配置寄存器2,地址为58H,初始值为00H
在这里插入图片描述
DCOR: 0,选择内部电阻;1,选择外部电阻

DIVS0~1: DIVS=0,1,2,3对应SMCLK的分频因子为1,2,4,8

SELS: 选择SMCLK的时钟源, 0:DCOCLK; 1:XT2CLK/LFXTCLK.

DIVM0~1: 选择MCLK的分频因子, DIVM=0,1,2,3对应分频因子为1,2,4,8.

SELM0~1: 选择MCLK的时钟源, 0与1:DCOCLK, 2:XT2CLK, 3:LFXT1CLK

下面是我自己进行的一段时钟系统初始化配置

void Clock_Init()
{
   
   unsigned char i;
   BCSCTL1 = RSEL0 + RSEL1 + RSEL2;          // 采用最高频率7   ACLK = XT2
   BCSCTL1&=~XT2OFF; //打开XT2振荡器
   do
   {
   
      IFG1 &= ~OFIFG; // 清除振荡器失效标志
      for (i = 255; i > 0; i--); // 延时,等待XT2起振
   }
    while ((IFG1 & OFIFG) != 0); // 判断XT2是否起振
   
   BCSCTL2 |= SELS+SELM_2;                          // SMCLK = MCLK = XT2   
}

接下来开始学习IO口配置

I/O

’|=‘,’&=~‘赋值操作

   P1DIR &= ~BIT1;   //P1.1端口设置为输入模式
   P1SEL |= BIT1;   //P1.1端口设置为功能复用
   
   P1DIR |= BIT0;   //P1.0端口设置为输出模式
   P1OUT |= BIT0;   //P1.0端口输出高电平

相关函数

在这里插入图片描述

跑马灯(延时函数)

#include <msp430x14x.h>

void Port_Init()
{
   
   P4DIR |= 0xff;  //P4端口配置为输出模式
}

void Clock_Init()
{
   
   unsigned char i;
   BCSCTL1 = RSEL0 + RSEL1 + RSEL2;          // 采用最高频率7   ACLK = XT2
   BCSCTL1&=~XT2OFF; //打开XT2振荡器
   do
   {
   
      IFG1 &= ~OFIFG; // 清除振荡器失效标志
      for (i = 255; i > 0; i--); // 延时,等待XT2起振
   }
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值