MSP430单片机个人学习笔记
MSP430单片机个人学习笔记
注:本文章摘自网络与论坛,仅用于记录学习笔记,分享学习经历。
上点复位信号 :POR(Power On Reset)
上电清除信号 :PUC (Power Up Clear)
CPU产生条件:
- POR产生时
- 启动看门狗时,看门狗定时器计满。
- 看门狗写入错误安全参数值
- 片内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);}}
}
按键反转法对应关系
- 我们给P1赋值0x0f,即00001111,假设0键按下了,则这时P1口的实际值为00001110
- 我们给P1在赋值0xf0,即11110000,如果0键按下了,则这时P1口的实际值为11100000、我们把两次P1口的实际值想加得11101110,即为0xee
逐行扫描法
1.首先置4行全部为低电平,4列全部设置了上拉电阻(高电平),按键未按下时,为高电平,此时如果有按键按下,那么对应的该键所在的列的电平将会被拉低
2.确认有按键按下以后,需要进入确定具体为哪一个按键按下的过程,思路为:依次将行线置为低电平,并检测列线的输入,将行和列信号配合即可检测出按键按下的情况
MSP430单片机个人学习笔记相关推荐
- MSP430单片机中断学习笔记(一)
目录 一.中断的基本概念 1.1中断的定义 1.2中断源 1.3中断向量表 1.4中断优先级 1.5断电 1.6中断现场 二.中断源 2.1系统复位中断源 2.1.1断电复位信号(BOR) 2.2.2 ...
- 单片机入门学习笔记6:新唐单片机N76E003
学习新唐单片机是从2018年3月开始的,之前一点也不懂这一块单片机,之后脉络变的越来越清晰. 由于N76E003档次太低,新塘科技官方的管脚配置,芯片选型--都没有这一块芯片,资料唯独只有:芯片的数据 ...
- C51单片机仿真学习笔记
这阵子在学习单片机的仿真,记录下过程,方便以后可以翻阅查看 1.首先是下载安装C51版的keil4软件,然后下载安装proteus软件,打开ISIS 7 Professional 部分操作步骤如下 之 ...
- STM32单片机入门学习笔记——定时器TIM第一部分
笔记整理自B站UP主江科大自化协教程<STM32入门教程-2023持续更新中>,所用单片机也为教程推荐单片机. 大致内容 第一部分:定时器基本定时的功能,定时器每隔这个时间产生一个中断,来 ...
- 51单片机入门学习笔记(上)
笔记整理自B站UP主江科大自化协教程<51单片机入门教程-2020版 程序全程纯手打 从零开始入门> 所用单片机为普中51 STC89C52单片机2022新款,文中所提到的调试现象及结果也 ...
- 江科大51单片机入门学习笔记合集
文章目录 软件下载 介绍 STC89C52RC 命名规则 芯片介绍 开发板介绍 逻辑运算 C语言语法 函数在C语言基础上做的拓展 重入函数 中断函数 外部函数 sfr sbit 51单片机最小系统组成 ...
- STM32单片机入门学习笔记——定时器TIM第三部分
笔记整理自B站UP主江科大自化协教程<STM32入门教程-2023持续更新中>,所用单片机也为教程推荐单片机. 大致内容 第一部分:定时器基本定时的功能,定时器每隔这个时间产生一个中断,来 ...
- stm32h743单片机嵌入式学习笔记7-FPU
* FPU 即浮点运算单元(Float Point Unit).浮点运算,对于定点 CPU(没有 FPU 的 CPU) 来说必须要按照 IEEE-754 标准的算法来完成运算,是相当耗费时间的.而对于 ...
- stm32h743单片机嵌入式学习笔记6-压缩图片解码原理
软件解码: JPEG/JPG 的解码过程可以简单的概述为如下几个部分: 1 .从文件头读出文件的相关信息. JPEG 文件数据分为文件头和图像数据两大部分,其中文件头记录了图像的版本. 长宽.采样因子 ...
- 单片机_stc单片机eeprom 学习笔记
1,有若干个扇区,每个扇区包含512字节,一个地址存储一个字节,第一个扇区的地址从0到512. 十六进制表示是 0x0000~0x0200 2,数据擦除是按照扇区为单位的,所以要合理分配存储内容的扇区 ...
最新文章
- 定义ComboBox(下拉列表)组件垂直滚动条的样式。
- python matplotlib散点图-python matplotlib从函数更新散点图
- matlab矩阵中如何去掉重复的行;如何找到相同的行,并找到其位置
- python redis集群_Python3 redis集群连接 (带密码验证)
- 斯坦福机器学习公开课学习笔记(3)—拟合问题以及局部权重回归、逻辑回归
- 作为怀孕的亲历者,你觉得最值得分享的经验或者技巧是什么?
- IBM 公开最新 Power 处理器架构
- php基本功之_get(),_set()的用法
- python填写excel内容_python实现数据写入excel表格
- 面试时Android屏幕适配,Android—屏幕适配(面试技巧)
- VGG16关于学习率如何影响精度效应
- GoldenGate 之 Bounded Recovery说明
- 《为iPad而设计:打造畅销App》——了解客户
- 深度学习Course4第三周Detection Algorithms习题整理
- ESP32 系统篇: 优化系统启动时间
- python批量转换音频采样率
- 天涯、简书、微博怎么提高百度收录量?
- 谷歌优化排名怎么做?Google SEO怎么优化?
- Flink 1.10 版本之前如何生成 Watermark
- Office2022个人家庭版
热门文章
- matlab如何根据历年gdp找增长规律,中国历年gdp数据图解 中国历年gdp增长率及人均GDP(1978年-2016年)...
- 【渝粤题库】广东开放大学 期货与期权 形成性考核
- 查看win10的产品密钥过期时间
- 杰理语音芯片ic玩具芯片ic的介绍_AD14NAD15N全系列开发
- LLVM LLD PE 格式分析 (COFF)
- 【MindSpore易点通】一站式指南
- 计算机里的硬盘分区,Disk Genius对电脑硬盘分区的详细步骤
- 20021年还需要学C语言吗?C语言成为专家的路径、方法、书籍推荐
- 盘点2020年最好用的7款3D游戏建模软件
- Python实战 | 使用代理IP刷CSDN博客访问量