第2章MSP430F149单片机基础知识
msp430f149技术资料
MSP430是德州公司新开发的一类具有16位总线的带FLASH的单片机,由于其性价比和集成度高,受到广大技术开发人员的青睐.它采用16位的总线,外设和内存统一编址,寻址范围可达64K,还可以外扩展存储器。
具有统一的中断管理,具有丰富的片上外围模块,片内有精密硬件乘法器、两个16位定时器、一个14路的12位的模数转换器、一个看门狗、6路P口、两路USART通信端口、一个比较器、一个DCO内部振荡器和两个外部时钟,支持8M的时钟。
由于为FLASH型,则可以在线对单片机进行调试和下载,且JTAG口直接和FET(FLASH EMULATION TOOL)的相连,不须另外的仿真工具,方便实用,而且,可以在超低功耗模式下工作,对环境和人体的辐射小,测量结果为100mw左右的功耗(电流为14mA左右),可靠性能好,加强电干扰运行不受影响,适应工业级的运行环境,适合与做手柄之类的自动控制的设备.我们相信MSP430单片机将会在工程技术应用中得以广泛应用,而且,它是通向DSP系列的桥梁,随着自动控制的高速化和低功耗化,MSP430系列将会得到越来越多人的喜爱。
第三章MSP430F149 资源的应用介绍及开发第一节中断介绍及存储器段介绍中断在MSP430中得以广泛的应用,它可以快速进入中断程序,之后返回中断前的状态,其时序为:PC执行程序中断允许置位SR中的GIE置位 EINT(中断开)中断到,中断标志位(IFG)置位从中断向量表中读取中断程序的入口地址,进入中断程序执行中断程序中断允许位复位 RETI中断返回回到原来地址。
具体应用将会在应用程序中的到应用。
有关中断源和中断优先级及中断允许位、中断标志位在参考资料1上有详细介绍。
MSP430单片机的片上存储器共为64K,表示为图:第三节 P 口MSP430F149有6个8位的P口,其中P1、P2口占两个中断向量,共可以接16 个中断源,还可以直接利用 P口的输入输出寄存器,直接对外进行通信。
MSP430F149中文资料--部分
基于MSP430F149的GPS
(芯片篇)
1、系统功能框图
2芯片资料:
MSP430F149:
低电源电压范围:1.8~3.6V
超低功耗:待机模式:1.6uA 关闭模式(RAM保持):0.1uA 活动模式:280uA at 1MHz,2.2V
5种省电模式
6us内从待机模式唤醒
16位RISC结构,125ns指令周期
带内部参考,采样保持和自动扫描特性的12位A/D转换器
有7个捕获/比较寄存器的16位定时器Timer_B 有3个捕获/比较寄存器的16位定时器Timer_A
片内集成比较器
串行在线编程,无需外部编程电压,安全熔丝可编程代码保护.
器件系列包括:–MSP430F133:8KB+256B闪速存储器,256B的RAM –MSP430F135:16KB+256B闪速存储器,512B的RAM –MSP430F147,MSP430F1471:32KB+256B闪速存储器,1KB的RAM –MSP430F148, MSP430F1481:48KB+256B闪速存储器,2KB的RAM –MSP430F149, MSP430F1491:60KB+256B闪速存储器,2KB的RAM
可用封装:64脚方形扁平封装(QFP).
功能框图。
MSP430F149最全中文资料
西安邮电学院 63# 710061
陈小忠
3
MSP430 单片机的开发及应用
(1) .汇编是对源程序而言的,因此必须打开一个源文件才能汇编,而连接是对一个工程文件而言 的,连接是对工程文件的所有源代码(包括多个源文件)和数据的定位,因此连接必须打开一个工程 文件才能连接. (2) 连接中必须将库文件的路径改正确,且必须选定 C—SPY 的驱动方式,即在 project 中的 options 的 xlink 的 include 下修改(先选中)xcl 的库路径为 $TOOLKIT_DIR$\icc430\msp430F149A.xcl ,选择 C—SPY 的驱动 drive 为 simulator 或 FLASH EMULATION TOOL ,当没连接 430 片子时可以选 simulator,当连接 430 片子时,选 FLASH EMULATION TOOL 进行在线下载调试. (3) 由于 430 支持汇编语言和 C 语言两种语言,因此可以在一个工程文件 中同时用两种语言,但 建议用汇编语言,因为便于在调试时寻找逻辑和指令的联系及地址的定位正确与否. (4) 在在线的 C—SPY 的调试中,单步需要将 Control 的 Reatime 前的勾取消才能进行单步测试. (5) 在线调试时,不能将 58 管脚(复位/非屏蔽中断) 外部变高,否则,会强制退出调试环境.
第二章
MSP430 F149 语言介绍
MSP430 是德州公司的新产品,有独特的开发环境和自身语言,下面是我在毕业设计中对 F149 的开发环境熟悉中遇到的一些问题的处理和汇编语言的用法及程序中遇到的问题的体会.
第一节 开发环境及程序下载
1.开发环境:在 EW23 环境下进行编程,汇编,连接,在 C—SPY 环境下进行调试,下载是在连 接之后,调试之前,通过计算机的串口下载的.关于环境的操作,可以参考有关资料,其中可能遇到的 问题及解决方法有:
第二章 MSP430F149基本时钟系统
DCOR DIVS0 DIVS1 SELS DIVM0 DIVM1 SELM0 SELM1
(0x01) /* DCO 外部电阻使能 */ (0x02) /* SMCLK 2 分频 */ (0x04) /* SMCLK 4 分频*/ (0x08) /* SMCLK 时钟源选择 0:DCOCLK / 1:XT2CLK/LFXT1CLK */ (0x10) /* MCLK 2 分频 */ (0x20) /* MCLK 4 分频 */ (0x40) /* MCLK 时钟源选择 01:DCOCLK*/ (0x80) /* MCLK 时钟源选择 10:有 XT2 则选择 XT2CLK 否则选择 LFXT1CLK*/
/*************************************************
*BCSCTL2 控制位定义
**************************************************/
#define #define #define #define #define #define #define #define
/* Modulation Bit 0 */ /* Modulation Bit 1 */ /* Modulation Bit 2 */ /* Modulation Bit 3 */ /* Modulation Bit 4 */ /* DCO Select Bit 0 */ /* DCO Select Bit 1 */ /* DCO Select Bit 2 */
0——禁止中断
1——允许中断
说明:IE1 中其余位可能被其它模块使用。
5、IFG1:中断标志寄存器 1
7
6
5
4
MSP430F149中文资料
MSP430单片机的开发及应用设计人:陈小忠西安邮电学院电子信息工程系电子0002班西安邮电学院63# 7100612003年7月目录第一章概述第二章MSP430 F149语言介绍第一节开发环境及程序下载第二节语言介绍第三章MSP430F149 资源的应用介绍及开发第一节中断介绍及存储器段介绍第二节硬件乘法器第三节P口第四节定时器及数模转换第五节时钟模块第六节USART通信模块第七节比较器第八节模数转换第四章MSP430F149开发板的介绍及测试第一节模数转换模块第二节传感器模块第三节外存和实时时钟模块第四节485和232模块第五节电源管理模块及晶振模块第六节PWM波形滤波第一章概述MSP430是德州公司新开发的一类具有16位总线的带FLASH 的单片机,由于其性价比和集成度高,受到广大技术开发人员的青睐.它采用16位的总线,外设和内存统一编址,寻址范围可达64K,还可以外扩展存储器.具有统一的中断管理,具有丰富的片上外围模块,片内有精密硬件乘法器、两个16位定时器、一个14路的12位的模数转换器、一个看门狗、6路P口、两路USART 通信端口、一个比较器、一个DCO内部振荡器和两个外部时钟,支持8M 的时钟.由于为FLASH 型,则可以在线对单片机进行调试和下载,且JTAG口直接和FET(FLASH EMULATION TOOL)的相连,不须另外的仿真工具,方便实用,而且,可以在超低功耗模式下工作,对环境和人体的辐射小,测量结果为100mw左右的功耗(电流为14mA左右),可靠性能好,加强电干扰运行不受影响,适应工业级的运行环境,适合与做手柄之类的自动控制的设备.我们相信MSP430单片机将会在工程技术应用中得以广泛应用,而且,它是通向DSP系列的桥梁,随着自动控制的高速化和低功耗化 ,MSP430系列将会得到越来越多人的喜爱.通过两过多月的毕业设计,我对MSP430有了初步了解,对内部的硬件资源和自身的汇编语法进行了实验,并开发了一个应用板,并进行了调试.鉴于时间和能力有限,没能对所有的应用一一实验.第二章 MSP430 F149语言介绍MSP430是德州公司的新产品,有独特的开发环境和自身语言,下面是我在毕业设计中对F149的开发环境熟悉中遇到的一些问题的处理和汇编语言的用法及程序中遇到的问题的体会.第一节开发环境及程序下载1.开发环境:在EW23环境下进行编程,汇编,连接,在C—SPY环境下进行调试,下载是在连接之后,调试之前,通过计算机的串口下载的.关于环境的操作,可以参考有关资料,其中可能遇到的问题及解决方法有:(1) .汇编是对源程序而言的,因此必须打开一个源文件才能汇编,而连接是对一个工程文件而言的,连接是对工程文件的所有源代码(包括多个源文件)和数据的定位,因此连接必须打开一个工程文件才能连接.(2) 连接中必须将库文件的路径改正确,且必须选定C—SPY的驱动方式,即在project中的options的xlink的include下修改(先选中)xcl的库路径为$TOOLKIT_DIR$\icc430\msp430F149A.xcl ,选择C—SPY 的驱动drive为simulator或FLASH EMULATION TOOL ,当没连接430片子时可以选simulator,当连接430片子时,选 FLASH EMULATION TOOL进行在线下载调试.(3) 由于430支持汇编语言和C语言两种语言,因此可以在一个工程文件中同时用两种语言,但建议用汇编语言,因为便于在调试时寻找逻辑和指令的联系及地址的定位正确与否.(4) 在在线的C—SPY 的调试中,单步需要将Control的Reatime前的勾取消才能进行单步测试.(5) 在线调试时,不能将58 管脚(复位/非屏蔽中断)外部变高,否则,会强制退出调试环境.2.程序下载原理及脱机工作原理:程序的在线调试是通过JATG口和F149片子的 RST、TCK、TDI、TDO、TMS引脚按一定的时序串行的传递程序代码和数据的,调试指令的命令传递都是通过这些数据线和控制线传递的,下载时序可参见资料1,其中的地址0FFFEH为复位向量的地址,它是程序遇到非屏蔽中断和程序启动的首要地址,地址中存放的是程序段开始的首地址,因此必须把程序段的首地址标号表示在中断向量中或程序伪指令的开头位置,否则,连接时将会出错,具体的表示方法在下一节中表示.程序的下载和在线调试的电源是通过计算机在JATG提供的,不须另外给加电源.脱机工作时,是将F149的电源线上电,此时的复位时序同下载后在线复位的时序一样,只是时钟是通过F149内部时钟DCO提供的,上电后,程序将复位向量0FFFE中的地址装入PC,PC开始从程序段的首地址开始执行.脱机工作启动不需要任何操作,只需上电即可,电压要大于1.8v,一般取3v左右,另外,在脱机工作时,可以给RST端口加一个低电平脉冲以复位从程序开始重新执行.第二节指令介绍MSP430有自身语言,汇编语言也不同于其他类型的单片机,伪指令也是变幻魔测,但又很重要,下面是我毕业设计的一些尝试、出问题的地方.也可参见资料。
MSP430F149定时器B讲解
MSP430F149定时器B1.定时器B模块:TimerB与TimerA大部分相同,不同点在于定时器B的捕获/比较单元增加了锁存器。
二者区别:(1)TimerB计数长度为8位,10位,12位,16位可编程,由TBCTL寄存器的CNTLx两位来配置,而定时器A的计数长度是固定的16位;(2)TimerB没有实现定时器A中的SCCI功能位的功能;(3)TimerB在比较模式下的捕获/比较寄存器功能与TimerA不同,增加了捕获比较锁存器;(4)有些芯片型号当中TimerB输出实现了高阻抗输出;(5)比较模式的原理有所不同:TimerA当中CCRx寄存器当中保存与TAR相比较的数据,而在TimerB 当中CCRx中保存要比较的数据,但并不直接与定时器TBR相比较,而是将CCRx当中的数据锁存到相应的锁存器之后,由锁存器与TBR相比较。
从捕获/比较寄存器相比较锁存器传输数据的过程的时间也是可编程的,可以是写入比较捕获寄存器之后立即传输,也可有一个定时器来触发传输。
(6)TimerB支持多种同步的定时功能,多重比较捕获功能和多重波形输出功能(PWM波)。
而且,通过对比较数据的两级缓冲,可实现多个PWM波同步周期更新。
2.TimerB的逻辑结构图:定时器B的逻辑结构基本与定时器A相同。
3.定时器B的寄存器:寄存器相关位的配置过程参考定时器A和数据手册。
4.定时器B的比较功能当定时器B工作在比较模式时,将数据写入捕获比较锁存器TBCCRx当中,当TBCCTLx当中的CLLDx位决定的装载事件的发生时,TBCCRx中的数据会自动地传输到比较寄存器当中。
5.TI提供的例程://// ////// MSP430F149// -----------------// /|| XIN|-// | | | HF XTAL (455k - 8MHz)// --|RST XOUT|-// | |// | P4.1/TB1|--> CCR1 - 75% PWM// | P4.2/TB2|--> CCR2 - 25% PWM//// M. Buccini// Texas Instruments Inc.// Feb 2005// Built with IAR Embedded Workbench Version: 3.21A//******************************************************************************。
MSP430F149 学习板使用说明
MSP430F149 开发板使用说明2009年09月第一章新手入门1.1 MSP430F149 学习板特点:选用16 位超低功耗单片机MSP430F149,采用子母双板分离设计,MCU 子板与集成外设母板通过插针座连接,使用灵活方便。
ØMCU 的全部IO都用插针引出,便于二次开发提供电源指示灯和上电自动复位、手动复位电路。
2、蜂鸣器实验(1)蜂鸣器1:单频音(步进变音调)(2)蜂鸣器2:奏乐(祝你平安)3、数码管实验(1)数码管1(显示0123)(2)数码管2(动态显示0~F)4、4×1 独立按键实验(1)键盘1:扫描数码管显示5、1602 液晶实验(1)1602 液晶1:动态字符显示(2)1602 液晶2:静态字符显示(3)1602 液晶3:内部时钟显示6、RS232 接口实验(1)RS232 接口1:MCU 发送数据PC 机显示(2)RS232 接口2:按键控制MCU 发送数据PC 机显示(3)RS232 接口3:PC 机发送数据MCU 液晶显示(4)RS232 接口4:MCU 回发接收到的PC 机数据7、RS485 接口实验(1)RS485 接口1:发送程序8、PS2 接口实验(1)PS2 接口1:PS2 控制1602 显示9、12-Bit 高精度温度传感器实验(1)温度传感器1:DS18B20 在液晶显示10、RTC 实时时钟实验(1)实时时钟1:DS1302 测试(2)实时时钟2:DS1302 电子钟11、2k Bit EEPROM 实验(1)EEPROM1:AT24C02 测试(2)EEPROM2:读出数据通过串口在PC 机显示12、12-Bit 模数转换器(ADC)接口实验(1)模数转换器2:ADC 在1602 液晶在显示(2)模数转换器3:ADC 通过串口在PC 机显示13、12864 液晶实验(与12864 液晶配套)(1)12864 液晶并口1:字符显示(2)12864 液晶并口2:汉字显示(3)12864 液晶并口3:图形显示(4)12864 液晶并口4:综合演示(5)12864 液晶串口5:字符显示(6)12864 液晶串口6:汉字显示(7)12864 液晶串口7:图形显示(8)12864 液晶串口8:综合演示14、HS0038红外接口实验(1)红外遥控解码实验,在数码管上显示三、开发板综合程序1、温度时间综合实验(1)DS18B20 + DS1302 + 16022、SSCOM综合实验(1)PC发送接收字符第三章板上资源详解本章详细介绍了MSP430F149 学习板上各个功能模块的硬件电路原理、使用方法和注意事项,使用前请仔细阅读。
MSP430F149 FLASH存储模块
MSP430F149的存储器结构及FLASH读写1 概述1.1 FLASH特点写操作只能将1改写为0,不能将0改写成1。
FLASH擦除后所有单元变为1,擦除操作只能针对整个段。
FLASH在擦除前不能被改写。
1.2 MSP430F149存储器编址方式MSP430F149的ROM为60K+256B的FLASH,RAM为2K。
MSP430存储器采用冯诺依曼结构,RAM和ROM合在一起编址。
MSP430F149内部集成有FLASH控制器,可以简化对FLASH的操作。
64K的寻址空间分为RAM、FLASH。
RAM分两块:1、寄存器(0000H-01FFH),存放特殊寄存器、设备寄存器、变量与堆栈。
2、数据RAM(01FFH-),存放各种变量、中间结果、堆栈。
FLASH分两块:1、主FLASH 一般用于存放程序代码。
2、信息FLASH(InfoFlash)用作掉电后保存少量数据。
分为InfoA(0X1080-0X10FF)和InfoB(0X1000-0X1080),每段各128B。
1.3 操作三种操作:读取、擦除(只能针对段擦除)、写入(可以写入单个字节)。
2使用方法2.1 程序架构读取FLASH方法和读取RAM方法相同。
写和擦除FLASH要进行如下配置:配置寄存器制定指针地址写数据/复制数据配置寄存器2.2 参数配置主要配置三个寄存器FCTL1,FCTL2,FCTL3。
1、配置FLASH控制器时钟。
时钟要求控制在250-470Khz之间。
FCTL2 = FWKEY + FSSEL0 + FN0; //2分频2、用指针指向地址Unsigned char *ptr= (unsigned char *) 0x1080;3、进入写模式或擦除模式FCTL1=FWKEY+WRT;或FCTL1=FWKEY+ERASE4、清除锁定位FCTL3=FWKEY;5、写数据*ptr=0x30;或擦除*ptr=0;6、退出写状态,恢复锁存FCTL1=FWKEY;FCTL3=FWKEY+LOCK;2.3 说明上电FLASH默认状态是读。
msp430f149单片机
基于MSP430F149单片机的实验系统设计本课题在对MSP430F149单片机了解学习的基础上,研究了基于MSP430F149单片机的实验系统设计,包括单片机的外部接口电路硬件设计和软件开发。
本课题具体完成了以下几方面内容。
1.理论知识的学习。
学习MSP430F149单片机的内部结构、特点和应用,查阅相关芯片的数据手册,了解各模块电路芯片的工作原理。
2.设计MSP430F149单片机的各种接口电路。
确定各模块的外围接口电路,包括A/D转换、D/A转换、键盘接口、数码管显示、温度传感器、实时时钟、非易失性存储器、液晶显示、串行通信等。
3.学习并使用protel 99SE软件绘制电路原理图、PCB板,制作印制电路板。
学习MSP430单片机的集成开发环境,编写各模块的接口驱动程序。
4.下载调试各模块接口程序,完善各模块的功能。
系统硬件组成共包括九个模块,分别为MSP430F149单片机最小系统模块,4路A/D转换模块,D/A 转换模块,键盘数码管显示模块,温度传感器模块,实时时钟模块,非易失性存储器模块,液晶显示模块,2路串口通信接口模块。
系统软件组成为各个功能模块程序设计,包括七个部分,分别为A/D转换程序,温度传感器显示当前环境中的温度,用液晶来显示实时时钟,通过串口向单片机发送字符,单片机又发回字符给电脑,D/A输出方波,非易失性存储器的读写。
系统结构如图2-1所示。
图2-1 系统组成结构其中,本课题外接模块设计中具有I2C总线接口的电路有温度传感器模块、实时时钟/日历模块、非易失性存储器模块,组成结构如图2-2所示。
图2-2 I2C总线接口模块本课题设计的基于MSP430单片机的实验系统提供MSP430F149芯片,一路LED灯,I2C总线接口的温度传感器芯片LM75,实时/日历时钟芯片PCF8563,16384(16K)字节EEPROM的非易失性存储器芯片AT24C128,汉字图形点阵液晶显示模块RT12864,串行接口8位LED数码管及64键键盘智能控制芯片HD7279A,带有缓冲基准输入(高阻抗)的10位电压输出数字-模拟转换器芯片TLC5615,双串口电平转换芯片SP3223,JTAG并口仿真器。
MSP430F149中文资料--部分
基于MSP430F149的GPS
(芯片篇)
1、系统功能框图
2芯片资料:
MSP430F149:
低电源电压范围:1.8~3.6V
超低功耗:待机模式:1.6uA 关闭模式(RAM保持):0.1uA 活动模式:280uA at 1MHz,2。
2V
5种省电模式
6us内从待机模式唤醒
16位RISC结构,125ns指令周期
带内部参考,采样保持和自动扫描特性的12位A/D转换器
有7个捕获/比较寄存器的16位定时器Timer_B 有3个捕获/比较寄存器的16位定时器Timer_A
片内集成比较器
串行在线编程,无需外部编程电压,安全熔丝可编程代码保护。
器件系列包括:–MSP430F133:8KB+256B闪速存储器,256B的RAM –MSP430F135:16KB+256B闪速存储器,512B的RAM –MSP430F147,MSP430F1471:32KB+256B闪速存储器,1KB的RAM –MSP430F148, MSP430F1481:48KB+256B闪速存储器,2KB的RAM –MSP430F149, MSP430F1491:60KB+256B闪速存储器,2KB的RAM
可用封装:64脚方形扁平封装(QFP).
功能框图。
MPS430F149单片机之_MSP430串口通信的波特率自动识别
interrupt [UART1TX_VECTOR] void UART1_TX_ISR(void)
{
if(nTX1_Len != 0)
{
// 表示缓冲区里的数据没有发送完
nTX1_Flag = 0;
TXBUF1 = UART1_TX_BUF[nSend_TX1];
rate = BAUD57600;
break;
case 0x1c :
rate = BAUD38400;
break;
case 0xe0 :
rate = BAUD19200;
break;
case 0x80 :
rate = BAUD14400;
break;
// 定时器中断
interrupt [TIMERA0_VECTOR] void TimerA_ISR(void)
{
nTime_Flag = 1;
// CCR0 不中断允许
CCTL0 &= ~CCIE;
}
void SetBaud(int baud)
{
//停止UART
if(UART1_RX_BUF[nRX1_Len_temp - 1] == 13)
{
nRX1_Len = nRX1_Len_temp;
nRev_UART1 = 1;
nRX1_Len_temp = 0;
}
}
///////////////////////////////////////
} baudreg;
// 串口寄存器的值 (UBR0_1, UBR1_1, UMCTL_1, Descr)
MSP430F149寄存器整理
各个模块的寄存器:1)CPU内部寄存器(状态寄存器SR)2)外围模块寄存器和特殊寄存器中断使能寄存器(IE1)UTXIE0USART0模块的传输中断使能控制比特。
置1时模块的中断使能,0时关闭URXIE0USART0接收中断控制。
1中断使能、0中断关闭ACCVIEFLASH 存储器非法访问中断使能控制比特位。
1使能、0时关闭。
NMIE 非屏蔽中断使能控制。
1使能、0关闭OFIE 晶体出错中断使能控制。
1使能、0关闭WDTIE看门狗中断使能控制。
1使能看门狗中断、0关闭中断使能寄存器(IE2)****UTXIE15URXIE14********UTXIE1USART1模块传输中断使能控制。
1使能、0关闭URXIE1USART1模块接收中断使能控制。
1使能、0关闭中断标志寄存器(IFG1)UTXIFG07URXIFG 06**NMIIFG4****OFIFG1WDTIFGUTXIFG0USART0传输中断标志位。
1时有中断产生、0没有URXIFG0USART0接收中断标志位。
1时有中断产生、0没有NMIIFG非屏蔽中断标志位。
1时有中断产生、0没有UTXIE07URXIE06ACCVIE5NMIIE4**3**2OFIE 1WDTIEOFIFG晶体出错中断标志位。
1时有中断产生、0没有WDTIFG看门狗中断标志。
1时有中断产生、0时没有中断标志寄存器(IFG2)****UTXIFG15URXIFG14********UTXIFG1USART1传输中断标志位。
1时有中断产生、0时没有URXIFG1USART1接收中断标志位。
1时有中断产生、0时没有模块使能寄存器1(ME1)UTXE07URXE0USPIE0************UTXE0USART0的传输使能。
1时USART0传输模块使能、0时不工作URXE0 USPIE0USART作为UART时,该比特控制UART的接收功能,设置为1时接收模块使能,0时不工作;作为SPI时,设置为1,则SPI使能,0时SPI不工作。
MSP430F149介绍文档
MSP430F149介绍文档MSP430F149是德州仪器(Texas Instruments)推出的一款低功耗、高性能的MSP430系列32位微控制器。
它采用16位RISC架构,工作频率高达16MHz,具有较大的存储容量和丰富的外设资源,适用于各种嵌入式应用开发。
MSP430F149具有较低的工作电压和功耗,能够在1.8V到3.6V的范围内正常工作,使其在电池供电系统中具有较长的续航时间。
它的典型工作电流仅为0.6mA,待机电流为0.1μA,非常适合对功耗要求严格的应用场景。
此外,MSP430F149还支持多种低功耗模式,包括LPM4(电平3)模式,可以实现极低的功耗消耗。
MSP430F149内置了8KB的闪存和512B的RAM,可以通过内部的编程接口进行非易失性存储器(NVM)编程。
它还支持外扩存储器,包括片外SRAM和EEPROM,可以满足更大容量的数据存储需求,灵活应对各种应用场景。
此外,MSP430F149还支持多种通信接口,包括USART、SPI和I2C 等,可以方便地与其他外部设备进行数据交换和通信。
MSP430F149具有多种芯片外设,包括多通道的12位ADC、多个通用定时器、比较器、高速PWM输出等。
这些外设资源可以满足不同应用中的各种控制和计时需求。
此外,MSP430F149还支持内置RTC(实时时钟)模块,提供了精确的时间管理功能,适用于需要时间戳功能的应用场景。
MSP430F149采用了MSP430系列独特的开发环境和编程方式。
德州仪器提供了MSP430编程和调试工具套件,包括MSP430硬件调试接口(HDI)和MSP430调试器(MSP-FET)。
开发人员可以使用这些工具进行软件编译、调试和烧录,快速开发MSP430F149的应用程序。
总之,MSP430F149是一款极具性价比的嵌入式微控制器,具有低功耗、高性能、丰富的外设资源和易用的开发环境等优点。
它适用于各种嵌入式应用开发,包括消费电子产品、工业自动化系统、智能传感器等领域。
MSP430F149单片机
MSP430F149 单片机基础知识
15
87
6
5
4
3
2
1
0
安全键值
BLKWRT WRT Reserved Reserved Reserved MERAS ERASE Reserved
rw-0 rw-0 r0
r0
r0
rw-0 rw-0
r0
该寄存器定义了 Flash 模块的擦除和编程的控制位。其中高 8 位为安全键值,该字段读
出的内容总是 96H,写入时必须为 A5H,否则不能进行操作。
下面分别对低 8 位进行介绍:
BLKWRT
Bit7 按块写模式位。复位值为 0,在进行块写操作时,WRT 位必须置 1;当
设置 EMEX 位时,BLKWRT 自动复位。
0
块写模式关闭;
WRT
1
块写模式开启。
Bit6 写模式使能位。复位值为 0,当设置 EMEX 位时,WRT 自动复位。
0
不能进行写操作;
MERAS、ERASE
1
写操作允许。
Bits2-1 该两位用来控制擦除方式选择位。复位值为 0。当设置 EMEX 位时,这
两位自动复位。
00
不擦除;
01
只擦除单个段;
2、 FCTL2 寄存器
10
擦除所有的主程序区;
11
擦除所有的主程序区和信息区。
15
87
6
5
4
安全键值
FSSELx
3
{
Unsigned int i=0;
For(i=0;i<=1000;i++)
;
}
msp430基础知识
5:完善的中断服务功能。
6:4种计数功能的选择
7:8种输出计数功能的选择。
8:支持多种时序控制
9:DMA使能
TAR 16位计数器
1:修改Timer _A:当计数时钟不是MLCK时,写入应该计数器在计数器停止计数时,因为它与CPU不同步,可能引起时间的竞争。
2:增计数模式
捕获/比较寄存器CCR0用作Timer_A增计数模式的周期寄存器。因为CCR0为16位寄存器,所以该模式适用于定时周期小于65536的连续计数情况。计数器TAR可以增计数到CCR0的值,当计数值与CCR0的值相等(或定时器值大于CCR0的值)时,定时器复位并从0开始重新计数。
LFXT1CLK:低频时钟源
XT2CLK:高频时钟源
DCOCLK:数字控制RC振荡器
时钟发生器的原理说明
问题的提出:
1: 高频,以便对系统硬件请求和事件作出快速的响应。
2:低频 以便将电流消耗降至最小
{
;
}
基本定时器
MSP430具有基本定时器(Basic Timer1),Basic Timer1经常用在低功耗应用中,它的工作目的就是支持软件和外围模块工作在低频率、低功耗条件下。Basic Timer1通过对SMCLK 和ACLK进行分频,向其他外围模块提供低频率控制信号。Basic Timer1非常适合于周期性地产生中断
。(F14系列没有该定时器)
Timer_A 的特性
1:输入时钟可以有多种选择,可以是慢始终、快时钟以及外部时钟。
2:没有自动重装时间常数功能,但产生的定时脉冲或PWM(脉宽调制)信号没有软件带来的误差。
3:不仅能捕获外部事件发生的时间还可以锁定其发生时的高低电平。
msp430单片机入门知识
PORT2_VECTOR (1 * 2u) /* 0xFFE2 P2 */ PORT1_VECTOR (4 * 2u) /* 0xFFE8 P1 */ TIMERA1_VECTOR (5 * 2u) /* 0xFFEA Timer A CCR1/2*/ TIMERA0_VECTOR (6 * 2u) /* 0xFFEC Timer A CCR0 */ USART0TX_VECTOR (8 * 2u) /* 0xFFF0 串口发送 */ USART0RX_VECTOR (9 * 2u) /* 0xFFF2 串口接收*/ WDT_VECTOR (10 * 2u) /* 0xFFF4 Watchdog Timer */ SD16_VECTOR (12 * 2u) /* 0xFFF8 16位ADC */ NMI_VECTOR (14 * 2u) /* 0xFFFC Non-maskable */ RESET_VECTOR (15 * 2u) /* 0xFFFE Reset */
20
中断的具体过程
1. 事先将中断服务程序入口地址装入中断 向量表。
2. 中断发生后,如果中断被允许(可屏蔽 中断),CPU将当前程序地址和CPU状 态寄存器SR压入堆栈。
3. 跳转到中断服务程序入口,备份寄存器 入堆栈。
4. 开始执行中断服务程序。 5. 退出中断前,恢复寄存器。CPU取回SR
寄存器,跳转回中断前主程序地址。
6
MSP430FE425A资源 1. 8M/s处理速度 2. 512RAM(数据)+16KB Flash(程序代码) 3. 内置Flash控制器,剩余Flash可存数据。 4. 内置时钟管理单元,可内部倍频 5. 3路同步采样、差分输入、32倍程控增益放大器的16位ADC 6. 温度传感器 7. 1.2V基准源和输出缓冲器 8. 128段LCD驱动器 9. 增强UART串口 10. 看门狗 11. BasicTimer定时器 12. 16位TimeA定时器,3路捕获和2路PWM 13. 内置BOR复位电路 14. 16个双向可中断IO口 15. 内置电能计量模块 16. 后缀带A的,比如FE425A带硬件乘法器
msp430F149简易教程
各模块简要介绍—12、USCI
各模块简要介绍—6、digital I/O
配置没有使用到的I/O引脚: 应被配置为I/O功能、输出方 向、上拉/下拉电阻使能。这样可 以减少系统的功耗。
各模块简要介绍—6、digital I/O
控制I/O口的实例: P1OUT |=BIT0 ; //置P1.0为1 P1OUT |=BIT0+BIT1+BIT7 ; //置P1.0、 P1.1 、 P1.7为1 P1OUT&=~BIT0 ; //置P1.0为0
捕捉比较 模块的7 种输出模 式 (以CCR2为 例)
各模块简要介绍—11、Timer_B
Timer_B有7个捕捉比较模块,其 功能与Timer_A功能类似,主要在以下 方面不同: (1)计数长度可以为8bits 、10bits、 12bits、16bits (2)捕捉比较寄存器具有双缓冲结构, 不同捕捉比较寄存器TBCCRx能够进行 组合,实现严格同步的比较输出。
Msp430的引脚图
引脚具体说 明见terminal functions表 格
各模块简要介绍— 1、CPU
• 16-BIT RISC architecture 源操作数7种寻址模式,目标 操作数4种寻址模式 • 16个寄存器(见右图),寄 存器间传送数据在1个CPU clock内完成 • R0~R3是专用寄存器PC、 SP、SR、CG,其余为通用 寄存器
该模块是430单片机的特色, 乘法器完全用硬件实现,其工作 与CPU完全独立,能够通过CPU 指令对其进行读和写。 可完成16x16bits 、 16x8bits、 8x16bits、 8x8bits
各模块简要介绍—10、Timer_A
概述: Timer_A是一个具有3个捕捉/比 较模块的16bit定时/计数器,不仅能完 成定时的基本功能,还能完成对计数值 的捕捉功能,而且可以方便地输出多路 PWM波形;其中断功能也很完善,支 持定时器溢出中断、捕捉比较中断等多 种类型,可方便实现定时、测频、输出 PWM波形等多种功能。
msp430f149学习笔记
1.复位信号是MCU工作的起点,430的复位型号有两种:上电复位信号POR和上电清除信号PUC。
POR信号只在上电和RST/NMI复位管脚被设置为复位功能,且低电平时系统复位。
而PUC信号是POR信号产生,以及其他如看门狗定时溢出、安全键值出现错误时产生。
但是,无论那种信号触发的复位,都会使msp430在地址0xffff处读取复位中断向量,然后程序从中断向量所指的地址开始执行。
复位后的状态不写了,详见参考书,嘿嘿。
2.首先你要知道msp430的存储器结构。
典型微处理器的结构有两种:冯。
诺依曼结构——程序存储器和数据存储器统一编码;哈佛结构——程序存储器和数据存储器;msp430系列单片机属于前者,而常用的mcs51系列属于后者。
0-0xf特殊功能寄存器;0x10-0x1ff外围模块寄存器;0x200-?根据不同型号地址从低向高扩展;0x1000-0x107f seg_b0x1080_0x10ff seg_a 供flash信息存储剩下的从0xffff开始向下扩展,根据不同容量,例如149为60KB,0xffff-0x11003.系统时钟是一个程序运行的指挥官,时序和中断也是整个程序的核心和中轴线。
430最多有三个振荡器,DCO内部振荡器;LFXT1外接低频振荡器,常见的32768HZ,不用外接负载电容;也可接高频450KHZ -8M,需接负载电容;XT2接高频450KHZ-8M,加外接电容。
430有三种时钟信号:MCLK系统主时钟,可分频1 2 4 8,供cpu 使用,其他外围模块在有选择情况下也可使用;SMCLK系统子时钟,供外围模块使用,可选则不同振荡器产生的时钟信号;ACLK辅助时钟,只能由LFXT1产生,供外围模块。
4.中断是430处理器的一大特色,因为几乎每个外围模块都能产生,430可以在没有任务时进入低功耗状态,有事件时中断唤醒cpu,处理完毕再次进入低功耗状态。
整个中断的响应过程是这样的,当有中断请求时,如果cpu处于活动状态,先完成当前命令;如果处于低功耗,先退出,将下一条指令的pc值压入堆栈;如果有多个中断请求,先响应优先级高的;执行完后,等待中断请求标志位复位,要注意,单中断源的中断请求标志位自动复位,而多中断的标志位需要软件复位;然后系统总中断允许位SR.GIE复位,相应的中断向量值装入pc,程序从这个地址继续执行。
MSP430F149笔记
一、PWM信号发生#include<msp430x14x.h>#define frequency 16384void main(void){WDTCTL=WDTPW+WDTHOLD;TACTL=TASSEL0+TACLR;CCR0=frequency-1; //频率:32768/(CCR0+1);CCTL1=OUTMOD_7;CCR1=frequency/2; //占空比:CCR1/(CCR0+1);CCTL2=OUTMOD_7;CCR2=frequency/4;P2DIR|=BIT3;P2SEL|=BIT3;P2DIR|=BIT4;P2SEL|=BIT4;TACTL|=MC0; //增计数模式;while(1){_BIS_SR(LPM3_bits);_NOP();}}二、用Timer_B捕获脉宽#include<msp430x14x.h>unsigned int width[10]={0,0,0,0,0,0,0,0,0,0};unsigned int i=0;void main(){WDTCTL=WDTPW+WDTHOLD; //关闭看门狗P4SEL|=BIT0; //P4.0作为捕获模块功能的输入端输入方波//-------开晶振XT2---------BCSCTL1&=~XT2OFF; //打开XT2振荡器do{IFG1 &=~OFIFG; // 清除振荡器失效标志for(i=256;i>0;i--); // 延时,等待XT2起振}while((IFG1 & OFIFG)!=0); // 判断XT2是否起振BCSCTL2=SELM_2+SELS; //选择MCLK=SMCLK为XT2TBCCTL0&=~(CCIS1+CCIS0); // 捕获源为P4.0,即CCI0A(也是CCI0B)TBCCTL0|=CM_2+SCS+CAP; //下降沿捕获,同步捕获,工作在捕获模式TBCCTL0|=CCIE; //允许捕获比较模块提出中断请求TBCTL|=ID_3;TBCTL|=TBSSEL_2; //选择时钟MCLKTBCTL|=TBCLR; //定时器清零TBCTL|=MC_2; //定时器开始计数(连续计数模式0~0xFFFF)_EINT();while(1){_BIS_SR(LPM3_bits);_NOP();}}//―――――定时器TB的CCR0的中断:用于检测脉冲上升与下降沿――――#pragma vector=TIMERB0_VECTOR__interrupt void TimerB0(void){if(TBCCTL0&CM1) //捕获到下降沿{TBCTL|=TBCLR;TBCCTL0=(TBCCTL0&(~CM1))|CM0; //改为上升沿捕获:CM1置零,CM0置一}else if(TBCCTL0&CM0) //捕获到上升沿{width[i++]=TBCCR0; //记录下结束时间TBCCTL0=(TBCCTL0&(~CM0))|CM1; //改为下降沿捕获:CM0置零,CM1置一if(i==10)i=0;}}三、MSP430测速方法#include<msp430x14x.h>unsigned char led_mod[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//LED字模; unsigned int Segments[]={0,0,0,0,0};//要显示的数字;unsigned int uiWidth=0;unsigned int i=0;void InitTimer_B(){TBCCTL0&=~(CCIS1+CCIS0); // 捕获源为P4.0,即CCI0A(也是CCI0B)TBCCTL0|=CM_2+SCS+CAP; //下降沿捕获,同步捕获,工作在捕获模式TBCCTL0|=CCIE; //允许捕获比较模块提出中断请求TBCTL|=ID_3;TBCTL|=TBSSEL_2; //选择时钟MCLKTBCTL|=TBCLR; //定时器清零TBCTL|=MC_2; //定时器开始计数(连续计数模式0~0xFFFF)}void IntoChar(unsigned int unitemp){unsigned char j=0;while(unitemp){Segments[j]=unitemp%10;unitemp=unitemp/10;j++;}}void main(){WDTCTL=WDTPW+WDTHOLD; //关闭看门狗P2DIR=0xff;P2OUT=0xff;P3DIR=0xff;P3OUT=0xff;P4DIR=0xfe;P4OUT=0xfe;P5DIR=0xff;P5OUT=0xff;P6DIR=0xff;P6OUT=0xff;P4SEL|=BIT0; //P4.0作为捕获模块功能的输入端输入方波BCSCTL1&=~XT2OFF; //打开XT2振荡器do{IFG1&=~OFIFG; // 清除振荡器失效标志for(i=256;i>0;i--); // 延时,等待XT2起振}while ((IFG1 & OFIFG) != 0); // 判断XT2是否起振BCSCTL2 =SELM_2+SELS; //选择MCLK=SMCLK为XT2WDTCTL=WDT_ADLY_1_9;IE1|=WDTIE;InitTimer_B();_EINT();while(1);}//定时器TB的CCR0的中断,用于检测脉冲下降沿unsigned int times=0;#pragma vector=TIMERB0_VECTOR__interrupt void TimerB0(void){_DINT();if(TBCCTL0&CM1) //捕获到下降沿{times++;if(times==4){uiWidth=TBCCR0; //记录下结束时间times=0;}TBCTL|=TBCLR;}_EINT();}//看门狗定时器中断,用于LED动态显示unsigned char ucBitolight=0;//数码管位选变量#pragma vector=WDT_VECTOR__interrupt void watchdog_timer(void){IntoChar(uiWidth);P4OUT=led_mod[Segments[4-ucBitolight]];P6OUT|=BIT6;P6OUT&=~BIT6;P4OUT=~(1<<(ucBitolight+3));P5OUT|=BIT5;P5OUT&=~BIT5;ucBitolight++;if(ucBitolight==5) ucBitolight =0;}。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2.2 Flash操作 2.2.1 存储空间组织 存储器中的数据: 字节数据可以定位在偶 地址或奇地址; 字数据定位在偶地址: 低字节在偶地址,高字节 在下一个奇地址。
片内RAM、FLASH组织
其余空间:0~200h用于外围接口及部件的地址
2.2.2 Flash操作
Flash存储器: Flash存储器分为信息Flash和程序Flash 以MSP430F449为例: 信息Flash的地址为1000h~10FFh(256字节),程 序Flash的地址为1100h~FFFFh(60K)。 从硬件和功能上来说,信息Flash和程序Flash没有本 质的不同,程序首地址可以是1100h,也可以是1000h; 信息也可以放在1000h~FFFFh的任何位置。
ROM 0FF16h 0FF14h 0FF12h 00000h 4AEBh 0xxxxh PC
0FA34h 0FA32h 0FA30h
0xxxxh 05BC1h 0xxxxh
寄存器 R10 R11 0FA33h
002A8h 002A7h
0xxh 012h 0xxh
002A8h 002A7h 002A6h
//定义Flash 写操作安全值(高位0xA5)
//定义Flash 段擦除允许位(低位0x02)
#define LOCK
(0x0010)
//擦除锁存位,Lock = 1:Flash被锁存(只读)
char *addr; addr = 0xA000;
//申明地址指针变量 //指针指向0xA000
while(FCTL3 & BUSY){} //测试等待BUSY复位位 FCTL1 = FWKEY + ERASE; //允许FLASH段擦除 FCTL3 = FWKEY; //清楚写锁存位 for(addr =(char *) 0xA000;addr<(char *)0xB000; addr += 0x200) *addr = 0;
2#中断请求
2#中断允许 2#中断源
n#中断允许 n#中断源
n#中断请求
状态寄存器SR
N:负数位 运算结果为负时置位。
字运算: N位设置为运算结果的15位。 例如:0 - 1 = FFFFh,1→N; 字节运算:N位设置为运算结果的7位。 例如:0 - 1 = FFh,1→N。
状态寄存器SR
Z:零位 运算结果为0时置位,不为0复位。
目标地址 0FF16h +1192h 010A82h ROM 0FF16h 0FF14h 0FF12h 01192h 00045h 040B0h PC 操作前RAM 操作后RAM 010AAh 010A8h 010A6h 0xxxxh 00045h 0xxxxh
010AAh 010A8h 010A6h
01116h 01114h 1112h
0xxxxh 01234h 0xxxxh
01116h 01114h 1112h
0xxxxh 0A123h 0xxxxh
符号模式:MOV EDE, TONI
; ( EDE)→(TONI)
如果 PC = 0FF12h,EDE = 0F016h,TONI = 01114h
x = EDE – PC = 0F016h - 0FF14h = 0F102h; y = TONI – PC = 01114h - 0FF16h = 11FEh; 相当于 MOV x(PC),y(PC) ;(PC+x)→(PC+y)
ROM 0FF16h 0FF14h 0FF12h 011FEh 0F102h 04090h 源地址 0FF14h +0F102h (1)F016h 目标地址 0FF16h +011FEh (1)1114h PC 操作前RAM 0F018h 0F016h 0F014h 0xxxxh 0A123h 0xxxxh 操作后RAM 0F018h 0F016h 0F014h 0xxxxh 0A123h 0xxxxh
指令的时钟周期的总体规律(续) :
3周期:数据从CPU之外读写,且目标地址为Rx,源 地址需要换算,如: MOV 2(R5),R7 ;(R5+2) → R7 ADD &EDE,R6 ;ADD EDE,R6 ;EDE = PC+x BR @R9+ ;R9→PC,R9+2 BR #DATA ;(DATA)→ PC PUSH R5 ;R5 →( SP)
0xxh 05Bh 0xxh
002A7h 002A6h
间接模式:MOV
@R10,0(R11) ;(R10)→(R11 + 0), ;MOV传送字(16位数据)
操作前RAM 0FA34h 0xxxxh 05BC1h 0xxxxh 操作后RAM 0FA34h 0FA32h 0FA30h 0xxxxh 05BC1h 0xxxxh
/定义Flash 写操作安全值(高位0xA5)
#define WRT
(0x0040)
//写操作使能位
#define LOCK
(0x0010)
//Lock = 1:Flash被锁存 (只读)
char *addr,*buf; //申明地址指针变量 const char dat ={0x02,0x78,0x12,0x33,0x54,0x6A}; char cont; addr = 0xA000; buf = &dat[0]; cont = 6; while(FCTL3 & BUSY){} //测试等待BUSY复位位 FCTL3 = FWKEY; //清楚写锁存位 FCTL1 = FWKEY + WRT; //设置写使能 for(cont = 0;cont < 6;cont++) *addr++ = buf[cont]; //写数据flash,且地址指针加1 FCTL1 = FWKEY; //擦除所有使能,防止误操作 FCTL3 = FWKEY + LOCK; // Flash被锁存(只读)
等价与:MOV INCD
@R10,0(R11) R0
在执行时寄存器的自动增量在取操作数之后:
立即模式:MOV #45h,TONI
; #45h →(TONI)
如果 PC = 0FF12h,TONI = 10A8h y = TONI–PC = 10A8h - 0FF16h = 1192h ; 相当于 MOV #45h ,y(PC) ; #45h →(PC+y)
第 2章
MSP430F149单片机基础知识
2.1 CPU概述 CPU寄存器
程序计数器PC 系统堆栈指针SP 第三次放入的数据 第二次放入的数据 第一次放入的数据
压堆栈( 取堆栈( PUSH POP)过程 )过程
SP-6 SP-4 SP-2
状态寄存器SR
V:溢出位 FFFFh + 1 将产生溢出,1→V
常数发生寄存器CG1和CG2
使用常数发生寄存器产生常数的优点: 1、不需要特殊的指令 2、对7种最常用的常数不需要额外的字操作数 3、缩短指令周期:不经过MDB就能直接访问
寻址模式 访问整个地址空间的不同寻址模式由As(寻址位, 源操作数的寻址模式)和Ad(寻址位,目标作数的 寻址模式)模式位的内容确定:
ROM 0FF16h 0FF14h 0FF12h 00000h 4AABh 0xxxxh PC
0FA32h 0FA30h
寄存器 R10 R11 0FA32h 002A6h
002A8h 002A6h 002A4h
0xxxxh 012xxh 0xxxxh
002A8h 002A6h 002A4h
0xxxxh 05BC1h 0xxxxh
x 0
也产生溢出,1→V
状态寄存器SR
低功耗工作模式控制
工作模式 AM LPM0 SCG1 0 0 SCG0 0 0 OSCOff 0 0 CPUOff 0 1
LPM1
LPM2 LPM3
0
1 1
1
0 1
0
0 0
1
1 1
LPM4
1
1
1
1
状态寄存器SR
GIE
1#中断允许 1#中断源 1#中断请求
GIE :通用中断允许位
01084h 01082h 01080h
0xxxxh 01234h 0xxxxh
01084h 01082h 01080h
0xxxxh 01234h 0xxxxh
绝对模式:MOV &EDE,&TONI ;EDE→TONI 如果 EDE = 0F016h,TONI = 01114h
ROM 0FF16h 0FF14h 0FF12h 01114h 0F016h 04292h PC 操作前RAM 0F018h 0F016h 0F014h 0xxxxh 0A123h 0xxxxh 操作后RAM 0F018h 0F016h 0F014h 0xxxxh 0A123h 0xxxxh
间接增量模式:MOV.B @R10+,0(R11) 与 MOV.B @R10,0(R11)的操作结果一样, 仅仅在结束时R10 = R0 + 1
等价与:MOV.B @R10,0(R11) INC R0 间接增量模式:MOV @R10+,0(R11) 与 MOV @R10,0(R11)的操作结果一样,仅 仅在结束时R10 = R0 + 2
//被擦除段的首地址写(0~0xFF)
FCTL1 = FWKEY; //擦除所有使能,防止误操作 FCTL3 = FWKEY + LOCK; // Flash被锁存(只读)
FLASH写操作举例:
将0x02,0x78,0x12,0x33,0x54,0x6A写入 0xA000为首地址的FLASH:
#define FWKEY (0xA500)