MSP430单片机个人学习笔记

注:本文章摘自网络与论坛,仅用于记录学习笔记,分享学习经历。

上点复位信号 :POR(Power On Reset)
上电清除信号 :PUC (Power Up Clear)

CPU产生条件:

  1. POR产生时
  2. 启动看门狗时,看门狗定时器计满。
  3. 看门狗写入错误安全参数值
  4. 片内Falsh写入错误的安全参数

POR与PUC都会引发复位

复位后初始状态:

  • /RST引脚被设置为复位模式
  • 所有I/O引脚被设置为输入
  • 外围模块被初始化
  • 状态寄存器SR复位
  • 看门狗激活,进入工作模式
  • 程序计数器PC装入0xFFFEH处的地址,从此地址开始执行程序。

内部RC振荡器
系统复位后内部RC振荡器磨人为系统时钟,但精度比较差,不适合使用诸如串口通信场合波特率会随温度和电压变化而变化,不建议使用(约800KH)

低功耗设计原则

  • 电压宜低就不高
  • 系统宜静就不动
  • 时钟宜慢就不快

低功耗设计

  • 延时程序用定时中断实现
  • 采用键盘扫描方式时,扫描程序可以纳入外部中断服务
  • 尽量减少CPU抗干扰中的冗余指令及软件陷阱
  • 看门狗与电呀侦测功能应尽量取消
  • 用中断代服务替查询
  • 尽量减少CPU的运算量
  • IO间隙运行

低功耗模式配置方法
IAR软件操作

  • 专门的低功耗操作语句
  • BIS_SR(LPM3_bits+GIE);//进入
  • _BIC_SR_IRQ(LPM#_bits);//退出

IAR基础设置(Other勾选)


软件仿真

链接硬件

<>表示头文件在IAR默认的文件夹中,“”存在于自己的项目文件当中

MSP430开发板灯光闪烁代码

#include <msp430x14x.h>#define uchar unsigned char         //定义数据类型#define CPU_F ((double)32768)    //内部延时函数所需要的时钟频率大小,单位为Hz
#define delay_ma(x) __delay_cycles((long)(CPU_F*(double)x/1000.0)) //ms级延时函数
#define delay_us(x) __delay_cycles((long)(CPU_F*(double)x/1000000.0)) //us级延时函数#define LED8PORT P2OUT          //P2口接入8个LED灯
#define LED8SEL  P2SEL
#define LED8DIR  P2DIR//********************************************************************
//                  MSP430单片机内部看门狗初始化函数
//********************************************************************
void WDT_Init()
{WDTCTL = WDTPW + WDTHOLD;    //关闭内部看门狗
}//********************************************************************
//                  端口初始化函数
//********************************************************************
void Port_Init()
{LED8SEL = 0x00;      //设置P2口为普通IO口模式LED8DIR = 0xFF;      //设置P2口输出模式LED8PORT = 0xFF;     //P2口初始值输出为0xFF
}//********************************************************************
//                  时钟配置函数,初始化配置为内DC0
//********************************************************************
void Clock_Init_DCO()
{DCOCTL = DCO0 +DCO1 + DCO2;   //DCO选择最大频率BCSCTL1 |= XT2OFF;            //关闭XT2 BCSCTL1 = RSEL0 + RSEL1 + RSEL2;  //最大时钟频率,大概5MHz}//********************************************************************
//                  时钟配置函数,初始化配置为外部高频晶振
//********************************************************************
void Clock_Init()
{uchar i;BCSCTL1 &= ~XT2OFF;       //打开XT2晶振,XT20FF写0BCSCTL2 |= SELM1+SELS;    //MCLK=SMCLK=XT2,8MHZdo{IFG1 &=~OFIFG;         //清除OFIFG标志位for(i=0;i<100;i++)_NOP();}while((IFG1 & OFIFG)!=0);  //等待晶振稳定IFG1 &=~OFIFG;             //清除标志位
}//********************************************************************
//                  主函数
//********************************************************************
void main(void)
{WDT_Init();   //看门狗初始化函数Clock_Init();   //系统时钟初始化配置函数Port_Init();    //端口初始化函数,用于控制与LED灯链接的IO口初始化while(1){LED8PORT = 0x00;      //LED灯点亮delay_ms(500);        //延时500msLED8PORT = 0xFF;      //LED灯关闭delay_ms(500);        //延时500ms }
}

低功耗模式运行小灯

#include <msp430x14x.h>#define uchar unsigned char         //定义数据类型
#define uint unsigned int    //定义数据类型#define CPU_F ((double)32768)    //内部延时函数所需要的时钟频率大小,单位为Hz
#define delay_ma(x) __delay_cycles((long)(CPU_F*(double)x/1000.0)) //ms级延时函数
#define delay_us(x) __delay_cycles((long)(CPU_F*(double)x/1000000.0)) //us级延时函数#define LED8PORT P2OUT          //P2口接入8个LED灯
#define LED8SEL  P2SEL
#define LED8DIR  P2DIR uint i;//*********************************************************
//                      主函数
//*********************************************************
void main(void)
{BCSCTL1 |= DIVA_2;     //设置ACLK时钟,四分频WDTCTL = WDT_ADLY_1000;   //看门狗定时器工作在内部定时器模式,定时时间为1000msIE1 |= WDTIE;         //使能看门狗中断LED8DIR = 0xFF;LED8PORT = 0xFF;    //先关闭全部LED灯while(1){_BIS_SR(LPM3_bits + GIE);   //进入LPM3低功耗模式,并开启全局中断LED8PORT = 0x00;            //点亮LED灯for(i=5000;i>0;i--);LED8PORT = 0xFF;            //关闭LED灯for(i=5000;i>0;i--);}}
//*********************************************************
//               看门狗定时器中断服务程序
//*********************************************************
#pragma vector = WDT_VECTOR
__interrupt void Watchdog_Timer(void)
{_BIC_SR_IRQ(LPM3_bits);   //退出低功耗模式
}

通过段码表控制数码管

#include <msp430x14x.h>
#include "Config.h"//MSP430IO口初始化
void Port_Init()
{LED8SEL = 0x00;          //设置IO口为普通I/O模式。LED8DIR = 0xFF;          //设置IO口方向为输出LED8PORT = 0xFF;         //P2口初始设置为FFDATASEL = 0x00;          //设置IO口味普通I/O模式DATADIR = 0xFF;          //设置IO口方向为输出DATAPORT = 0xFF;         //P2口初始化为FFCTRSEL = 0x00;           //设置IO口为普通I/O模式CTRDIR = BIT3 + BIT4;    //设置IO口方向为输出,控制口在P63,P64CTRPORT = 0xFF;          //P6口初始化设置为FF
}
//74HC573控制数码管动态扫描并显示数据
void Display(uchar show_num)
{uchar j;j=0x01;                  //用来控制位选DCTR1;                   //控制数码管段数据的74HC573的LE管脚配置WCTR1;                   //控制数码管位的74HC573的LE管脚置高DATAPORT = ~j;           //设置要显示的位,也就是哪个数码管亮WCTR0;                   //锁存位数据,下面送上段数据以后,就显示出来了DATAPORT = table[show_num]; //要显示的数据,就是段数据,如显示0送的就是0x3fDCTR0;                   //锁存段数据,数码管亮一个时间片刻delay_ms(1);             //显示一个时间片刻,会影响亮度和闪烁性}//主程序void main(void)
{uchar k;WDT_Init();               //看门狗初始化Clock_Init();             //时钟初始化Port_Init();              //端口初始化,用于控制IO口输入或输出while(1){for(k=0;k<10;k++){Display(k);            //调用显示函数,依次显示1~7delay_ms(500);}}
}

按键反转法对应关系

  1. 我们给P1赋值0x0f,即00001111,假设0键按下了,则这时P1口的实际值为00001110
  2. 我们给P1在赋值0xf0,即11110000,如果0键按下了,则这时P1口的实际值为11100000、我们把两次P1口的实际值想加得11101110,即为0xee

逐行扫描法

1.首先置4行全部为低电平,4列全部设置了上拉电阻(高电平),按键未按下时,为高电平,此时如果有按键按下,那么对应的该键所在的列的电平将会被拉低
2.确认有按键按下以后,需要进入确定具体为哪一个按键按下的过程,思路为:依次将行线置为低电平,并检测列线的输入,将行和列信号配合即可检测出按键按下的情况

MSP430单片机个人学习笔记相关推荐

  1. MSP430单片机中断学习笔记(一)

    目录 一.中断的基本概念 1.1中断的定义 1.2中断源 1.3中断向量表 1.4中断优先级 1.5断电 1.6中断现场 二.中断源 2.1系统复位中断源 2.1.1断电复位信号(BOR) 2.2.2 ...

  2. 单片机入门学习笔记6:新唐单片机N76E003

    学习新唐单片机是从2018年3月开始的,之前一点也不懂这一块单片机,之后脉络变的越来越清晰. 由于N76E003档次太低,新塘科技官方的管脚配置,芯片选型--都没有这一块芯片,资料唯独只有:芯片的数据 ...

  3. C51单片机仿真学习笔记

    这阵子在学习单片机的仿真,记录下过程,方便以后可以翻阅查看 1.首先是下载安装C51版的keil4软件,然后下载安装proteus软件,打开ISIS 7 Professional 部分操作步骤如下 之 ...

  4. STM32单片机入门学习笔记——定时器TIM第一部分

    笔记整理自B站UP主江科大自化协教程<STM32入门教程-2023持续更新中>,所用单片机也为教程推荐单片机. 大致内容 第一部分:定时器基本定时的功能,定时器每隔这个时间产生一个中断,来 ...

  5. 51单片机入门学习笔记(上)

    笔记整理自B站UP主江科大自化协教程<51单片机入门教程-2020版 程序全程纯手打 从零开始入门> 所用单片机为普中51 STC89C52单片机2022新款,文中所提到的调试现象及结果也 ...

  6. 江科大51单片机入门学习笔记合集

    文章目录 软件下载 介绍 STC89C52RC 命名规则 芯片介绍 开发板介绍 逻辑运算 C语言语法 函数在C语言基础上做的拓展 重入函数 中断函数 外部函数 sfr sbit 51单片机最小系统组成 ...

  7. STM32单片机入门学习笔记——定时器TIM第三部分

    笔记整理自B站UP主江科大自化协教程<STM32入门教程-2023持续更新中>,所用单片机也为教程推荐单片机. 大致内容 第一部分:定时器基本定时的功能,定时器每隔这个时间产生一个中断,来 ...

  8. stm32h743单片机嵌入式学习笔记7-FPU

    * FPU 即浮点运算单元(Float Point Unit).浮点运算,对于定点 CPU(没有 FPU 的 CPU) 来说必须要按照 IEEE-754 标准的算法来完成运算,是相当耗费时间的.而对于 ...

  9. stm32h743单片机嵌入式学习笔记6-压缩图片解码原理

    软件解码: JPEG/JPG 的解码过程可以简单的概述为如下几个部分: 1 .从文件头读出文件的相关信息. JPEG 文件数据分为文件头和图像数据两大部分,其中文件头记录了图像的版本. 长宽.采样因子 ...

  10. 单片机_stc单片机eeprom 学习笔记

    1,有若干个扇区,每个扇区包含512字节,一个地址存储一个字节,第一个扇区的地址从0到512. 十六进制表示是 0x0000~0x0200 2,数据擦除是按照扇区为单位的,所以要合理分配存储内容的扇区 ...

最新文章

  1. 定义ComboBox(下拉列表)组件垂直滚动条的样式。
  2. python matplotlib散点图-python matplotlib从函数更新散点图
  3. matlab矩阵中如何去掉重复的行;如何找到相同的行,并找到其位置
  4. python redis集群_Python3 redis集群连接 (带密码验证)
  5. 斯坦福机器学习公开课学习笔记(3)—拟合问题以及局部权重回归、逻辑回归
  6. 作为怀孕的亲历者,你觉得最值得分享的经验或者技巧是什么?
  7. IBM 公开最新 Power 处理器架构
  8. php基本功之_get(),_set()的用法
  9. python填写excel内容_python实现数据写入excel表格
  10. 面试时Android屏幕适配,Android—屏幕适配(面试技巧)
  11. VGG16关于学习率如何影响精度效应
  12. GoldenGate 之 Bounded Recovery说明
  13. 《为iPad而设计:打造畅销App》——了解客户
  14. 深度学习Course4第三周Detection Algorithms习题整理
  15. ESP32 系统篇: 优化系统启动时间
  16. python批量转换音频采样率
  17. 天涯、简书、微博怎么提高百度收录量?
  18. 谷歌优化排名怎么做?Google SEO怎么优化?
  19. Flink 1.10 版本之前如何生成 Watermark
  20. Office2022个人家庭版

热门文章

  1. matlab如何根据历年gdp找增长规律,中国历年gdp数据图解 中国历年gdp增长率及人均GDP(1978年-2016年)...
  2. 【渝粤题库】广东开放大学 期货与期权 形成性考核
  3. 查看win10的产品密钥过期时间
  4. 杰理语音芯片ic玩具芯片ic的介绍_AD14NAD15N全系列开发
  5. LLVM LLD PE 格式分析 (COFF)
  6. 【MindSpore易点通】一站式指南
  7. 计算机里的硬盘分区,Disk Genius对电脑硬盘分区的详细步骤
  8. 20021年还需要学C语言吗?C语言成为专家的路径、方法、书籍推荐
  9. 盘点2020年最好用的7款3D游戏建模软件
  10. Python实战 | 使用代理IP刷CSDN博客访问量