IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> 基于MSP430F5529的三种点灯方式(基本、定时、外部中断),快来瞧瞧! -> 正文阅读

[嵌入式]基于MSP430F5529的三种点灯方式(基本、定时、外部中断),快来瞧瞧!

目录

前言

一、msp430f5529三种点灯方式

二、总结

题外话:


前言

好久没有更新一下MSP430F5529的博文了,发觉看的人有点少了,而且前段时间又因为电赛停了,就回归STM32f1的怀抱,毕竟32位的确实比16位的好,而且就用户而言,STM32肯定更占优势······今天就再次回归MSP430的怀抱,那么接下来就会先从基础的使用讲起,这里先是讲用三种方式来点亮LED

一、msp430f5529三种点灯方式

在MSP430f5529中对于LED灯,均是高电平触发,输入高电平后就点亮,输入低电平就熄灭,这个不同于51和STM32,这是比较基础的。那么接下来就主要用三种方式让你快速点灯。

1、基本方式

基本方式就是直接设置一个延时,然后令它循环1点亮,这里我们点亮LED1(P1.0),?首先设置好输出模式,P1DIR |= BIT0,这句代码的意思就是设置为输出模式,之后就是直接简单一句输出1即可实现灯的点亮,即?P1OUT |= BIT0,这句代码就是设置输出为1,若是想要输出为0,即输出P1OUT &= ~BIT0,这就是输出0。那么延时呢?如果不考虑升级时钟频率(系统初始默认1MHZ时钟频率),那么可以直接采用一句__delay_cycles(x)函数延时,但是这个x代表就是几us,所以要延时ms数字就比较大,因此可以自行修改这个自带的延时,具体参照下面代码:

#include <msp430.h> 

#define CPU_F ((double)1000000)
#define delay_us(x) __delay_cycles((long)(CPU_F*(double)x/1000000.0))//重新定义延时函数
#define delay_ms(x) __delay_cycles((long)(CPU_F*(double)x/1000.0))

int main(void)
{
	WDTCTL = WDTPW | WDTHOLD;	// 停止看门狗
    P1DIR |= BIT0;                //设置P1.0口为输出模式

	 while (1)
	  {
	     P1OUT |= BIT0;            //P1.0输出高(LED1点亮)
	     delay_ms(1000);
	     P1OUT &= ~BIT0;             //P1.0输出低(LED1熄灭)
	     delay_ms(1000);
	  }

}

2、定时方式

定时方式,顾名思义就是要用到定时器了,那么怎么使用呢?

MSP430F5529有四个定时器,分别是Timer0_A、Timer1_A、Timer2_A、Timer0_B(两类,A类和B类,具体使用不详讲),这里为我用到了Timer0_A,那么简单来说,无非就是定时器使能,设置好各种参数(模式),开启(使能)中断,运行中断函数这些其实跟其他单片机用起来差别不大,但是运用的代码不一样

那么怎么利用定时器确定自己想要的时间?这就补上

首先系统默认情况下一般为ACLK(32768HZ)、SMCLK(1MHZ)、MCLK(1MHZ)三种,那么先设置一个参考时钟,选用TASSEL_2为SMCLK,那么TASSEL有多少种选择呢?0为TACLK(外部时钟源)1为ACLK(辅助时钟源),2为SMCLK(子系统时钟源),3为~TACLK;

下一讲再讲一下系统时钟源的问题,这里就简单说明一下?

那么时间就等于50000/1000000=0.05,之后0.05*20=1s,那么最终结果就是LED灯1S闪烁一次

剩下部分代码都有详细的注释了,相信可以很快理解。

#include <msp430.h> 

#define CPU_F ((double)1000000)
#define delay_us(x) __delay_cycles((long)(CPU_F*(double)x/1000000.0))
#define delay_ms(x) __delay_cycles((long)(CPU_F*(double)x/1000.0))

unsigned char count=0;

int main(void)//定时器口中断控制函数
{

	WDTCTL = WDTPW | WDTHOLD;	// stop watchdog timer
	P1DIR |= BIT0;              //P1.0置为输出
	TA0CCTL0 = CCIE;            //CCR0中断使能
	TA0CCR0 = 50000;            //设定计数值
	TA0CTL =TASSEL_2+MC_1+TACLR;//SMCLK,增计数模式,清除TAR
	_bis_SR_register(LPM0_bits+GIE);//低功耗模式0,使能中断
}

#pragma vector=TIMER0_A0_VECTOR
__interrupt void TIMER0_A0_ISR(void)
{
    count++;
    if(count==20)
    {
     count=0;
     P1OUT ^= BIT0;                          //1s改变LED1灯状态
    }
}

3、外部中断方式

看完前面两种方式,那么最后一种即为外部中断了,这里其实就是按键中断,设置按键P1.1控制LED亮灭状态,这里就是几个寄存器函数的使用了,基本都详细注释出来了,相信也比较好理解。

#include <msp430.h> 

#define CPU_F ((double)1000000)
#define delay_us(x) __delay_cycles((long)(CPU_F*(double)x/1000000.0))
#define delay_ms(x) __delay_cycles((long)(CPU_F*(double)x/1000.0))

int main(void)//io口中断控制函数
{
  WDTCTL = WDTPW + WDTHOLD;                 // 关闭看门狗
  P1DIR |=  BIT0;                           // 设置P1.0口方向为输出
  P1OUT &= ~BIT0;
  P1REN |=  BIT1;                           // 使能P1.1上拉电阻
  P1OUT |=  BIT1;                           // P1.1口置高电平
  P1IES |=  BIT1;                           // 中断沿设置(下降沿触发)
  P1IFG &= ~BIT1;                           // 清P1.1中断标志
  P1IE  |=  BIT1;                           // 使能P1.1口中断

  __bis_SR_register(LPM4_bits + GIE);       // 进入低功耗模式4 开中断
  __no_operation();                                   // 空操作

}
#pragma vector=PORT1_VECTOR
__interrupt void Port_1(void)
{
   if((P1IN&BIT1)==0)
   {
      delay_ms(50);
      P1OUT ^= BIT0;                          //改变LED1灯状态
      delay_ms(50);
      P1IFG &= ~BIT1;                         //清P1.1中断标志位
      delay_ms(50);
   }
}

二、总结

关于这一部分的学习,其实就是对基本寄存器的学习,毕竟都是从点灯开始的,下一篇我会着重讲一下时钟的配置问题,这一问题是比较重要的,因为如果不配置时钟的话,后续各种操作会因为默认1MHZ的时钟源变得相当缓慢,因此配置时钟就变得尤为重要,这一讲主要还是比较基础的认识MSP430,学习三种点灯方式,轻松入手哈哈。

到这里附上我的板子哈哈,再见各位博友,希望这一讲有帮助到你,欢迎访问其他文章,三连走起哈哈,如果觉得写得还可以,记得给博主点个赞!

题外话:

挺喜欢彭于晏说的一句话:“我就是没有才华,所以才用命去拼!”

学习32之路固然辛苦,但要是坚持下来了,那不是很酷?哈哈哈

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2021-08-22 13:41:27  更:2021-08-22 13:42:44 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 23:15:37-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码