MSP430单片机自学笔记
MSP430单片机笔记
1、MSP430 端口功能P1、P2 I/O、中断功能、其他片内外设功能P3、P4、P5、P6 I/O、其他片内外设功能S、COM I/O、驱动液晶2、PxDIR 方向寄存器0 为输入模式1 为输出模式在PUC 后全都为位,作为输入时,只能读;作为输出时,可读可定。
3、PxIN 输入寄存器输入寄存器是只读的,用户不能对它写入,只能读取其IO 内容。
此时引脚方向必须为输入。
4、PxOUT 输出寄存器这是IO 端口的输出缓冲器,在读取时输出缓存的内容与脚引方向定义无关。
改变方向寄存器的内容,输出缓存的内容不受影响。
5、PxIFG 中断标专寄存器标志相应引脚是否有待处理中断信息。
0 没有中断请求1 有中断请求6、PxIES 中断触发沿选择寄存器0 上升沿使相应标志置位1 下降沿使相应标志置位7、PxIE 中断使能寄存器0 禁止中断1 允许中断8、PxSEL 功能择寄存器0 择引脚为I/O 功能。
1 择引脚为外围模块功能9、关于端口P3、P4、P5、P6端口P3、P4、P5、P6 是没有中断功能的,其它功能与P1、P2 相同。
所以在此不再作详尽说明。
10、关于端口COM、S这些端口实现与LCD 片的驱动接口,COM 端是LCD 片的公共端,S 端为LCD片的段码端。
LCD 片输出端也可以用软件配置为数字输出端口,详情使用请查看其册。
11、WDT 看门狗看门狗定时器实际上是一个特殊的定时器,它的的功能是当程序运行发生故障序时能使系统从新启动。
其原理就是发生的故障的时间满足规定的定时时间后,产一个非屏蔽中断,使系统的位。
12、定时器各种定时器功能看门狗定时器基本定时,当程序发生错误时执行一个受控的系统重启动。
基本定时器基本定时,支持软件和各种外围模块工作在低频率、低功耗条件下。
定时器A基本定时,支持同时进行的多种时序控制、多个捕获、比较功能和多种输出波形(PWM),可以以硬件方式支持串行通信。
定时器B基本定时,功能基本同定时器A,但比较定时器 A 灵活,功能更强大。
MSP430f5529学习笔记
发板或目标板,同时也会得到很好的技术支持。如果自己制作的话也行, 也未尚不可,那就看个人水平了。
软件工具,因为现在都有学习板的工具软件,如 I建议还是使用 IAR 软件较方便, 因为使用的人群 较多,有问题还可请教,容易解决。
MSP430学习资料及教程,<<MSP430系列16位超低功耗单片机原理与应
(一)通用 I/O 口的设置-1
1.1 I/O 的简介 特点:①多种复用和设置(即可控制是否输入、是否输出、是否接上拉电 阻、是否接下拉电阻、是否可接受中断) ; ②一般情况下, P1和 P2都是具有中断能力的。 从 P1和 P2接口的各个 I/O 管脚引入的中断可以独立的被使能并且设置为上升沿或者下降沿触发。对应 的中断向量表分别为 P1IV 和 P2IV,它们只能进行字操作,并且 PAIV 这个寄存器 根本不存在。 ③P1、P2可合为 PA,P3、P4可合为 PB,…PC、PD。所以 P1为8位 BCD 0x00,PA 为16位 BCD 0x0000。当进行字操作写入 PA 口时,所有的16位都被 写入这个端口;当利用字节操作写入 PA 口的低字节时,高字节保持不变; ④由于430很多 I/O 和外围电路接线,所以这里常用位操作。如事先 定义(接下来也会用到,先在此声明)BIT0=0X01、BIT1=0X02、 BIT3=0X04…BIT7=0X80, 那么将 P1.1、 P1.3的输出设为1的时候, 就可以这样操作: P1OUT|=(BIT1+BIT3) 。这样显得很清楚。 ⑤没有用到的 I/O,要统一拉低为好。此外,当读入的数据长短小于 端口最大长度时,那些没有用到的位会被视零。 1.2 I/O 的简单配置 430I/O 的配置是用软件来实现的, 是通过相应的配置寄存器来实 现的。 (用到某个 I/O 时,一定要先配置好该 I/O,否则易出错) 1.2.1 I/O 方向设定寄存器 PXDIR 如设定 P1.1和 P1.2为输出状态 操作为: P1DIR |=(BIT1+BIT2)等价于 PADIR |=(BIT1+BIT2) 也等价于 PADIR_L|=(BIT1+BIT2。 拉高设定为输出,拉低设定为输入(默认) 。 1.2.2 I/O 输入设定寄存器 PXIN 如设定 P1.1和 P1.2的输入为低电平 操作为: P1IN &=~(BIT1+BIT2) 。 1.2.3 I/O 输出设定寄存器 PXOUT ①当只用为简单的输出时: 如设定 P1.1和 P1.2输出高电平 操作为: P1OUT |=(BIT1+BIT2) 。 ②如果该引脚为正常 I/O 功能,且当前已设定为输入方向,且上拉/ 下拉电阻寄存器是有效地。那么 PXOUT 可以用来配置上拉和下拉电阻: 低电平为下拉电阻; 高电平为上拉电阻; 1.2.4 上拉/下拉电阻使能寄存器 PXREN 低电平该寄存器为无效状态; 高电平该寄存器为有效状态;
MSP430f247单片机笔记
POR信号产生源:1.给器件上电2.复位管脚产生复位信号超级电压监视电路发现电压不稳时,产生POR信号PUC信号产生源:1.产生了POR信号2.看门狗定时器溢出3.看门狗定时器安全密匙错误空间安全密匙错误系统复位后器件的初始化状态:POR信号后NMI管脚为复位模式O被切换到输入状态3.外设模块和相应的寄存器被初始化到确定的状态4.状态寄存器被复位5.看门狗定时器被打开回到以确定位置重新开始读取数据软件初始化:1.设置看门狗2.配置外设资源430单片机中断种类有三种:1.系统复位2.非可屏蔽中断3.可屏蔽中断非可屏蔽中断产生有三种情况:1.非可屏蔽管脚RST/NMI被配置为NMI模式时,产生了用户设定的电平跳变2.振荡器失效3.对FLASH空间的错误访问非屏蔽中断NMI为多源中断,只有一个中断向量,该中断向量对应着多个中断标志,进入该中断向量后用户先要判断那种原因导致了非可屏蔽中断(通过标志位判断,OFIFG=1,振荡器失效中断;ACCVIFG=1,.对FLASH空间的错误访问中断;NMIFG=1,非可屏蔽管脚RST/NMI被配置为NMI模式时,产生了用户设定的电平跳变产生的中断;),这些中断的中断标志位都要通过软件进行手动清除;可屏蔽中断:可通过状态寄存器中的通用中断标志位GIE来使能控制;可屏蔽中断的执行过程:1.可屏蔽中断发生到执行一般需要大约6个机器周期2.单源中断的中断标志位可通过硬件自动清除,多源中断的中断标志位要通过软件清除;状态寄存器被清除,所有低功耗模式结束,CPU进入活跃模式,同时GIE通用中断标志位被清除,其它中断无法打断,用户可通过软件再次打开;4.中断返回时,SR状态寄存器被还原,CPU置为中断前的模式,GIE重新置位,GIE=1;在PUC信号后,由DCOCLK作MCLK的时钟信号,根据需要可将MCLK的时钟源另外设置为LFXT1或XT2,设置顺序如下。
(1). 清OSCOFF/XT2(开启外部晶振)(2). 清OFIFG(3). 延时等待至少50uS(4). 再次检查OFIFG,如果仍置位,则重复(1)~(4)步,直到OFIFG=0为止。
计算机硬件技术基础MSP430_复习知识点
计算机硬件技术基础MSP430_复习知识点第⼀章基本原理1.冯诺依曼计算机:⼯作原理为存储程序+程序控制,结构为输⼊设备,存储器,运算器,控制器,输出设备2.基本概念【Bit:位】【Byte:字节,8个⼆进制位】【word:字,CPU内部数据处理基本单位,⼆进制位数和内部寄存器,运算装置,总线宽度⼀致】3.CPU,存储器,输⼊输出设备,输⼊输出设备通过I/O接⼝和系统连接,各个部位通过总线链接。
4.总线分为:地址总线(AB),数据总线(DB),控制总线(CB)。
地址总线宽度,决定CPU寻址能⼒,能够使⽤多⼤的内存或I/O端⼝。
数据总线的宽度决定⼀次最多传送数据的宽度。
5.存储单元:存储信息的基本单元。
存储单元内容:存储的数据。
存储单元地址:每个单元有唯⼀的编制,译码后可以得到相应的选通信号。
6.读操作:发出地址信号选中存储单元,发出读控制信号,将存储单元的内容通过数据总线传⼊CPU中。
写操作:CPU发出地址信号,选中相应的存储单元;CPU发出存储器写控制信号;将写的内容通过数据总线写⼊选中存储单元中。
7.定址原则:任何操作对象都有确定的地址,译码电路将地址信号实现定制功能。
8.微机的⼯作过程:取指令,将指令取出到CPU并且进⾏译码。
执⾏指令,由控制电路发出执⾏指令所需要的信号,控制CPU执⾏响应操作。
第⼆章数字的表⽰运算9.N进制到⼗进制:略。
⼗进制到N进制:整数部分为除n取余,商零为⽌,先低后⾼。
⼩数部分为乘2取整,到零为⽌,先⾼后低。
10.⼆进制数和⼗六进制数的运算:算术运算,进位和借位都存储在标志寄存器中。
11.⽆符号数:所有各位都表⽰数值⼤⼩,最⾼位⽆符号意义。
⽤于处理全部是正数的场合。
12.带符号数:⽤补码来表⽰带符号数。
求补运算:按位取反,最低位+1,相当于(0-该数)补码:正数的补码:全部为数字位(最⾼位是0)。
负数的补码:对该数正数进⾏求补运算(最⾼位为1)。
补码真值计算:最⾼位为0,等于⼆进制的数值。
MSP430G2553学习笔记(数据手册)
MSP430G2553学习笔记(数据手册)MSP430G2553性能参数(DIP-20) 工作电压范围:1.8~3.6V。
5种低功耗模式。
16位的RISC结构,62.5ns指令周期。
超低功耗:运行模式-230µA;待机模式-0.5µA;关闭模式-0.1µA;可以在不到1µs的时间里超快速地从待机模式唤醒。
基本时钟模块配置:具有四种校准频率并高达16MHz的内部频率;内部超低功耗LF振荡器;32.768KHz晶体;外部数字时钟源。
两个16 位Timer_A,分别具有三个捕获/比较寄存器。
用于模拟信号比较功能或者斜率模数(A/D)转换的片载比较器。
带内部基准、采样与保持以及自动扫描功能的10位200-ksps 模数(A/D)转换器。
16KB闪存,512B的RAM。
16个I/O口。
注意:MSP430G2553无P3口!MSP430G2553的时钟基本时钟系统的寄存器DCOCTL-DCO控制寄存器DCOxDCO频率选择控制1MODxDCO频率校正选择,通常令MODx=0注意:在MSP430G2553上电复位后,默认RSEL=7,DCO=3,通过数据手册查得DCO频率大概在0.8~1.5MHz之间。
BCSCTL1-基本时钟控制寄存器1XT2OFF不用管,因为MSP430G2553内部没有XT2提供的HF时钟XTS不用管,默认复位后的0值即可DIV Ax设置ACLK的分频数00 /101 /210 /411 /8RSELxDCO频率选择控制2BCSCTL2-基本时钟控制寄存器2SELMxMCLK的选择控制位00 DCOCLK01 DCOCLK10 LFXT1CLK或者VLOCLK11 LFXT1CLK或者VLOCLK DIVMx设置MCLK的分频数00 /101 /210 /411 /8SELSSMCLK的选择控制位0 DCOCLK1 LFXT1CLK或者VLOCLK DIVSx设置SMCLK的分频数00 /101 /210 /411 /8DCORDCO直流发生电阻选择,此位一般设00 内部电阻1 外部电阻BCSCTL3-基本时钟控制寄存器3XT2Sx不用管LFXT1Sx00 LFXT1选为32.768KHz晶振01 保留10 VLOCLK11 外部数字时钟源XCAPxLFXT1晶振谐振电容选择00 1pF01 6pF10 10pF11 12.5pFmsp430g2553.h中基本时钟系统的内容/************************************************************* Basic Clock Module************************************************************/#define __MSP430_HAS_BC2__ /* Definition to show that Module is available */SFR_8BIT(DCOCTL); /* DCO Clock Frequency Control */SFR_8BIT(BCSCTL1); /* Basic Clock System Control 1 */SFR_8BIT(BCSCTL2); /* Basic Clock System Control 2 */SFR_8BIT(BCSCTL3); /* Basic Clock System Control 3 */#define MOD0 (0x01) /* Modulation Bit 0 */#define MOD1 (0x02) /* Modulation Bit 1 */#define MOD2 (0x04) /* Modulation Bit 2 */#define MOD3 (0x08) /* Modulation Bit 3 */#define MOD4 (0x10) /* Modulation Bit 4 */#define DCO0 (0x20) /* DCO Select Bit 0 */#define DCO1 (0x40) /* DCO Select Bit 1 */#define DCO2 (0x80) /* DCO Select Bit 2 */#define RSEL0 (0x01) /* Range Select Bit 0 */#define RSEL1 (0x02) /* Range Select Bit 1 */#define RSEL2 (0x04) /* Range Select Bit 2 */#define RSEL3 (0x08) /* Range Select Bit 3 */#define DIVA0 (0x10) /* ACLK Divider 0 */#define DIVA1 (0x20) /* ACLK Divider 1 */#define XTS (0x40) /* LFXTCLK 0:Low Freq. / 1: High Freq. */ #define XT2OFF (0x80) /* Enable XT2CLK */#define DIVA_0 (0x00) /* ACLK Divider 0: /1 */#define DIVA_1 (0x10) /* ACLK Divider 1: /2 */#define DIVA_2 (0x20) /* ACLK Divider 2: /4 */#define DIVA_3 (0x30) /* ACLK Divider 3: /8 */#define DIVS0 (0x02) /* SMCLK Divider 0 */#define DIVS1 (0x04) /* SMCLK Divider 1 */#define SELS (0x08) /* SMCLK Source Select 0:DCOCLK /1:XT2CLK/LFXTCLK */#define DIVM0 (0x10) /* MCLK Divider 0 */#define DIVM1 (0x20) /* MCLK Divider 1 */#define SELM0 (0x40) /* MCLK Source Select 0 */#define SELM1 (0x80) /* MCLK Source Select 1 */#define DIVS_0 (0x00) /* SMCLK Divider 0: /1 */#define DIVS_1 (0x02) /* SMCLK Divider 1: /2 */#define DIVS_2 (0x04) /* SMCLK Divider 2: /4 */#define DIVS_3 (0x06) /* SMCLK Divider 3: /8 */#define DIVM_0 (0x00) /* MCLK Divider 0: /1 */#define DIVM_1 (0x10) /* MCLK Divider 1: /2 */#define DIVM_2 (0x20) /* MCLK Divider 2: /4 */#define DIVM_3 (0x30) /* MCLK Divider 3: /8 */#define SELM_0 (0x00) /* MCLK Source Select 0: DCOCLK */#define SELM_1 (0x40) /* MCLK Source Select 1: DCOCLK */#define SELM_2 (0x80) /* MCLK Source Select 2: XT2CLK/LFXTCLK */#define SELM_3 (0xC0) /* MCLK Source Select 3: LFXTCLK */#define LFXT1OF (0x01) /* Low/high Frequency Oscillator Fault Flag */#define XT2OF (0x02) /* High frequency oscillator 2 fault flag */#define XCAP0 (0x04) /* XIN/XOUT Cap 0 */#define XCAP1 (0x08) /* XIN/XOUT Cap 1 */#define LFXT1S0 (0x10) /* Mode 0 for LFXT1 (XTS = 0) */#define LFXT1S1 (0x20) /* Mode 1 for LFXT1 (XTS = 0) */#define XT2S0 (0x40) /* Mode 0 for XT2 */#define XT2S1 (0x80) /* Mode 1 for XT2 */#define XCAP_0 (0x00) /* XIN/XOUT Cap : 0 pF */#define XCAP_1 (0x04) /* XIN/XOUT Cap : 6 pF */#define XCAP_2 (0x08) /* XIN/XOUT Cap : 10 pF */#define XCAP_3 (0x0C) /* XIN/XOUT Cap : 12.5 pF */#define LFXT1S_0 (0x00) /* Mode 0 for LFXT1 : Normal operation */ #define LFXT1S_1 (0x10) /* Mode 1 for LFXT1 : Reserved */#define LFXT1S_2 (0x20) /* Mode 2 for LFXT1 : VLO */#define LFXT1S_3 (0x30) /* Mode 3 for LFXT1 : Digital input signal */#define XT2S_0 (0x00) /* Mode 0 for XT2 : 0.4 - 1 MHz */#define XT2S_1 (0x40) /* Mode 1 for XT2 : 1 - 4 MHz */#define XT2S_2 (0x80) /* Mode 2 for XT2 : 2 - 16 MHz */#define XT2S_3 (0xC0) /* Mode 3 for XT2 : Digital input signal */基本时钟系统例程(DCO)MSP430G2553在上电之后默认CPU执行程序的时钟MCLK来自于DCO时钟。
MSP430单片机深入学习笔记
复位1.POR信号只在两种情况下产生:➢微处理器上电。
➢RST/NMI管脚被设置为复位功能,在此管脚上产生低电平时系统复位。
2.PUC信号产生的条件为:➢POR信号产生。
➢看门狗有效时,看门狗定时器溢出。
➢写看门狗定时器安全健值出现错误。
➢写FLASH存储器安全键值出现错误。
3.POR信号的出现会导致系统复位,并产生PUC信号。
而PUC信号不会引起POR信号的产生。
系统复位后(POR之后)的状态为:➢RST/MIN管脚功能被设置为复位功能。
➢所有I/O管脚被设置为输入。
➢外围模块被初始化,其寄存器值为相关手册上注明的默认值。
➢状态寄存器(SR)复位。
➢看门狗激活,进入工作模式。
➢程序计数器(PC)载入0xFFFE(0xFFFE为复位中断向量)处的地址,微处理器从此地址开始执行程序。
4.典型的复位电路有以下3种:(1)由于MSP430具有上电复位功能,因此,上电后只要保持RST/NMI(设置为复位功能)为高电平即可。
通常的做法为,在RST/NMI管脚接100kΩ的上拉电阻,如图1-5(a)所示。
(2)除了在RST/NMI管脚接100kΩ的上拉电阻外,还可以再接0.1μF的电容,电容的另一端接地,可以使复位更加可靠。
如图1-5(b)所示。
(3)由于MSP430具有极低的功耗,如果系统断电后立即上电,则系统中电容所存储的电荷来不及释放,此时系统电压不会下降到最低复位电压以下,因而MSP430不会产生上电复位,同时RST/NMI管脚上也没有足够低的电平使MSP430复位。
这样,系统断电后立即上电,MSP430并没有被复位。
为了解决这个问题,可增加一个二极管,这样断电后储存在复位电容中的电荷就可以通过二极管释放,从而加速电容的放电。
二极管的型号可取1N4008。
如图1-5(c)所示。
系统时钟振荡器:1.DCO 数控RC振荡器,位于芯片内部。
不用时可以关闭2.LFXT1 可以接低频振荡器,典型的如32.768kHz的钟表振荡器,此时振荡器不需要接负载电容。
MSP430f5438初学者笔记
MSP430f5438初学者笔记一、简介1.1CPU:16-bit RISC除program-flow指令外所有指令都在寄存器和7种源操作数寻址方式及4种目的操作数合作下执行16个寄存器,register-to-register指令执行时间是一个CPU时钟R0 程序计数器寄存器20-bitR1 堆栈指针20-bitR2 状态寄存器16-bitR3 不变的产生器R4~R15 通用寄存器1.2指令集:51指令3格式7中寻址方式附加指令1.3操作模式6个可软件设置的LOW-POWER模式一个中断事件可以唤醒5个模式中的任何一个,响应请求,并从中断程序中返回原模式Mode ACTIVE DISABLEDActive mode (AM) 所有时钟ACTIVELow-power mode 0 (LPM0) ACLK SMCLK FLL CPU MCLK LPM1 ACLK SMCLK CPU FLL MCLK LPM2 DCO发生器ACLK CPU MCLK FLL DCOCLK LPM3 ACLK CPU MCLK FLL DCOCLK DC发生器LPM4 晶振关闭完整数据保留LPM5 内部调节器关闭无数据保留通过RST和IO唤醒1.4中断矢量地址:FFFF~FF80H1.5 SFR处于最低地址空间可以进行字访问和字节访问1.6存储256K闪存空间64K程序存储器16KRAM 512BBSL程序装载器用于编程存储器串连接口1.7外围时钟:支持统一的时钟系统UCS包括:32K手表晶振(XT1 低频模式)内部低频振荡器VLO内部平衡低频振荡器REFO内部集成数字控制器DCO高频晶振(XT1高频模式or XT2)FLL锁频环连同一个数字调节器使得DCO构成一个多倍可编程的手表晶振时钟信号:ACLK 32K手表晶振、高频晶振、VLO、REFO、DCO MCLK CPU用,来源同ACLKSMCLK 用于外围来源同ACLK多分频ACLK电源管理模块(PMM)包括一个集成的PMM电压调节器,提供核心电压设备和包含可编程的产出水平,来提供电力的优化。
Msp430学习笔记
Msp430学习笔记一、简介图1 基本结构图2 pin designation结论:1.基本每个管脚都可以复用2.外围功能模块丰富端口介绍(32 I/O pins)1.端口P1和P2具有输入、输出、中断和外部模块功能。
这些功能可以通过各自的7个控制寄存器的设置来实现。
(1)PxDIR 输入输出方向寄存器rw(2)PxIN 输入寄存器r(3)PxOUT 输出寄存器r(4)PxIFG 中断标志寄存器r(5)PxIES 中断触发沿选择寄存器rw(6)PxIE 中断使能寄存器rw(7)PxSEL 功能选择寄存器rw2.其他端口:四个控制寄存器(除去中断相关)看看例程二、时钟部分1.时钟寄存器设置SCFQCTL 系统时钟控制寄存器(倍频,反馈后默认是31,31+1=32)SCFI0 系统时钟频率调整器0(锁频环反馈中的分频(实质最终是倍频))SCFI1 系统时钟频率调整器1(自动控制调整,无需软件设置)FLL_CTL0 FLL+控制器0 (反馈中是否分频、选择LFXT1晶振的有效电容)FLL_CTL1 FLL+控制器1 (振荡器控制、时钟源对应的振荡器的选择,默认情况下:振荡器打开,MCLK选择DCOCLK,SMCLK选择DCOCLK)图时钟模块2.工作模式:One Active Mode、Five Power Saving ModesMSP430是一个特别强调低功耗的单片机系列,尤其适用于采用电池供电的长时间工作场合。
系统根据应用和节能使用不同的时钟信号,这样可以合理利用系统的电源,实现整个系统的超低功耗。
中断是MSP430微处理器的一大特色。
有效地利用中断可以简化程序,并且提高执行效率和系统稳定性。
几乎所有的msp430系统单片机的每个外围模块都能产生中断,为MSP430针对事件(外围模块产生的中断)进行的编程打下基础。
MSP430在没有事件发生时处于低功耗模式,事件发生时通过中断唤醒CPU,时间处理完毕后CPU再次进入低功耗模式,由于CPU运算速度和推出低功耗的速度很快,所以在应用中,CPU大部分时间都处于低功耗状态,使得系统的整体功耗极大地降低。
1_第1章 MSP430单片机入门基础
• 在EW430调试状态下,View 菜单里面提供了功能丰富的 查看功能(见图1.2.6): • 1)在线查看变量。 2)通过菜单View->Watch打开观察窗。 3)通过菜单View->Register 打开寄存器窗。 4)通过菜单View->Disassembly打开反汇编窗。 5)通过菜单View->Call Stack打开调用关系窗。 6)通过菜单View->Stack打开堆栈窗。 7)通过菜单View->Memory打开内存窗。
1.3 MSP430单片机C语言基础
1.3.1 1.3.2 1.3.3 变量 数学运算 位操作
1.3.4 1.3.5 1.3.6
1.3.7
寄存器操作 中断 内部函数
库函数
1.3.1 变量
图1.3.1 C语言、编译器和机器码之间的关系
1.3.1 变量
表1.3.1 C430中变量类型
1.3.2 数学运算
1.6.4 1.6.5 1.6.6
风格一致性 注释 宏定义
1.6.1 变量命名规则
变量名尽量使用具有说明性的名称,避免使用a、 b、c、x、y、z等无意义字符。使用范围大的变 量,如全局变量,更应该有一个说明性的名称。 变量名尽量使用名词,长度控制在1~4个单词 最佳。
1.6.2 函数命名规则
和变量一样,函数名称也应具有说明性。函数 名应使用动词或具有动作性的名字,后面可以 跟名词说明操作对象。
MSP430单片机的CPU没有乘法、除法指令,乘 除操作会被编译器转换成移位和加法来实现。 如果乘除的数值刚好是2的幂,可以用移位直接 替代乘除法,运算速度会提高很多。
1.3.3 位操作
位操作指令大部分存在于早期速度不高的CISC处 理器上(以8051为代表),以提高执行效率,弥补 CPU运算速度的不足。目前几乎所有的RISC型处 理器都取消了位操作指令,MSP430单片机也不 例外。
计算机硬件技术基础MSP430_复习知识点
第一章基本原理1.冯诺依曼计算机:工作原理为存储程序+程序控制,结构为输入设备,存储器,运算器,控制器,输出设备2.基本概念【Bit:位】【Byte:字节,8个二进制位】【word:字,CPU内部数据处理基本单位,二进制位数和内部寄存器,运算装置,总线宽度一致】3.CPU,存储器,输入输出设备,输入输出设备通过I/O接口和系统连接,各个部位通过总线链接。
4.总线分为:地址总线(AB),数据总线(DB),控制总线(CB)。
地址总线宽度,决定CPU寻址能力,能够使用多大的内存或I/O端口。
数据总线的宽度决定一次最多传送数据的宽度。
5.存储单元:存储信息的基本单元。
存储单元内容:存储的数据。
存储单元地址:每个单元有唯一的编制,译码后可以得到相应的选通信号。
6.读操作:发出地址信号选中存储单元,发出读控制信号,将存储单元的内容通过数据总线传入CPU中。
写操作:CPU发出地址信号,选中相应的存储单元;CPU发出存储器写控制信号;将写的内容通过数据总线写入选中存储单元中。
7.定址原则:任何操作对象都有确定的地址,译码电路将地址信号实现定制功能。
8.微机的工作过程:取指令,将指令取出到CPU并且进行译码。
执行指令,由控制电路发出执行指令所需要的信号,控制CPU执行响应操作。
第二章数字的表示运算9.N进制到十进制:略。
十进制到N进制:整数部分为除n取余,商零为止,先低后高。
小数部分为乘2取整,到零为止,先高后低。
10.二进制数和十六进制数的运算:算术运算,进位和借位都存储在标志寄存器中。
11.无符号数:所有各位都表示数值大小,最高位无符号意义。
用于处理全部是正数的场合。
12.带符号数:用补码来表示带符号数。
求补运算:按位取反,最低位+1,相当于(0-该数)补码:正数的补码:全部为数字位(最高位是0)。
负数的补码:对该数正数进行求补运算(最高位为1)。
补码真值计算:最高位为0,等于二进制的数值。
最高位为1,先求补运算,再求数值大小。
430学习1
MSP430学习笔记之二:时钟模块MSP430系列单片机基础时钟主要是由低频晶体振荡器,高频晶体振荡器,数字控制振荡器(DCO),锁频环(FLL)及FLL+等模块构成。
由于430系列单片机中的型号不同,而时钟模块也将有所不同。
虽然不同型号的单片机的时基模块有所不同,但这些模块产生出来的结果是相同的.在MSP430F13、14中是有TX2振荡器的,而MSP430F11X,F11X1中是用LFXT1CLK 来代替XT2CLK时钟信号的.在时钟模块中有3个(对于F13,F14)时钟信号源(或2个时钟信号源,对于F11X、F11X1):1-LFXT1CLK: 低频/高频时钟源.由外接晶体振荡器,而无需外接两个振荡电容器.较常使用的晶体振荡器是32768HZ。
2-XT2CLK: 高频时钟源.由外接晶体振荡器。
需要外接两个振荡电容器,较常用的晶体振荡器是8MHZ。
3-DCOCLK: 数字可控制的RC振荡器。
1-ACLK: 辅助时钟信号.由图所示,ACLK是从FLXT1CLK信号由1/2/4/8分频器分频后所得到的.由BCSCTL1寄存器设置DIVA相应为来决定分频因子.ACLK可用于提供CPU外围功能模块作时钟信号使用.2-MCLK: 主时钟信号.由图所示,MCLK是由3个时钟源所提供的。
他们分别是LFXT1CLK,XT2CLK(F13、F14,如果是F11,F11X1则由LFXT1CLK代替),DCO时钟源信号提供.MCLK主要用于MCU和相关系统模块作时钟使用。
同样可设置相关寄存器来决定分频因子及相关的设置。
3-SMCLK: 子系统时钟,SMCLK是由2个时钟源信号所提供.他们分别是XT2CLK(F13、F14)和DCO,如果是F11、F11X1则由LFXT1CLK代替TX2CLK。
同样可设置相关寄存器来决定分频因子及相关的设置。
MSP430X1X1系列产品中,其中XT1时钟源引脚接法有如3种应用。
F13、14的XT1相同。
MSP430学习笔记
一,MSP430G2553单片机的各个功能模块(一),IO口模块,1,我们所用的MSP430G2553有两组IO口,P1和P2。
2,IO口的寄存器有:方向选择寄存器PxDIR,输出寄存器PxOUT,输入寄存器PxIN,IO口内部上拉或下拉电阻使能寄存器PxREN,IO口功能选择寄存器PxSEL和PxSEL2,IO口中断使能寄存器PxIE,中断沿选择寄存器PxIES,IO口中断标志寄存器PxIFG。
3,所有的IO都带有中断,其中所有的P1口公用一个中断向量,所有的P2口公用一个中断向量。
所以在使用中断时,当进入中断后,还要判断到底是哪一个IO口产生的中断,判断方法可以是判断各个IO口的电平。
4,中断标志PxIFG需要软件清除,也可以用软件置位,从而用软件触发一个中断。
注意:在设置PxIESx时根据PxINx有可能会引起相应的PxIFGx置位(具体的情况见用户指南),所以在初始化完IO口中断以后,正式使用IO中断前要先将对应的PxIFGx清零。
程序如下:void IO_interrupt_init()//IO中断初始化函数{P1REN|=BIT4+BIT5+BIT6+BIT7;//pullup内部上拉电阻使能//使用中断时,使能内部的上拉电阻这样当该脚悬空是,电平不会跳变,防止悬空时电平跳变不停的触发中断P1OUT=BIT4+BIT5+BIT6+BIT7;//当引脚上的上拉或下拉电阻使能时,PxOUT选择是上拉还是下来//0:下拉,1:上拉P1IE|=BIT4+BIT5+BIT6+BIT7;//interrupt enabled P13中断使能P1IES|=BIT4+BIT5+BIT6+BIT7;//Hi/lo edge下降沿中断//P1IES&=~BIT3;//上升沿触发中断P1IFG&=~(BIT4+BIT5+BIT6+BIT7);//中断标志位清零}5,PxOUT:如果引脚选择了内部的上拉或下拉电阻使能,则PxOUT设定电阻是上拉还是下拉,0:下拉,1:上拉6,当IO口不用时,最好不要设为输入,且为浮动状态(这是IO口的默认状态),因为当输入为浮动时,输入电压有可能会在VIL和VIH之间,这样会产生击穿电流。
msp430 学习笔记 - 定时器
// 停止看门狗WDT // 设置P1.0口方向为输出。 // 时钟源选择为SMCLK,选择计数模式,定时器中断开
_BIS_SR(LPM0_bits + GIE); }
//进入低功耗模式LPM0和开中断
// Timer_A3 中断向量(TAIV)处理 #pragma vector=TIMERA1_VECTOR __interrupt void Timer_A(void) {
2. 定时器相关寄存器 ................................................................................................................... 2 2.1. TACTL .......................................................................................................................... 3 2.2. TAR ............................................................................................................................. 4 2.3. TACCRx ....................................................................................................................... 4 2.4. TACCTLx ...................................................................................................................... 5 2.5. TAIV ............................................................................................................................ 6
msp430笔记1
中断Msp430单片机具有中断向量列表,位于Rom最高段512B中,事先要将中断服务程序入口地址装入中断向量表内。
中断发生后,如果改中断被允许,CPU会自动将当前程序地址和CPU的状态寄存器SR压入堆栈,然后跳转到改终端服务程序的入口。
中断向量种类:#define BASICTIMER_VECTOR#define PORT2_VECTOR#define PORT1_VECTOR#define TIMERA1_VECTOR#defineTIMERA0_VECTOR#define USART0TX_VECTOR#define USART0RX_VECTOR#define WDT_VECTOR#defineSD16_VECTOR#define NMI_VECTOR#define RESET_VECTORMsp430单片机的中断源数量很多,比如P1,P2口的每一个IO口都能产生中断,3个ADC 采样结束以及遇到错误都会产生中断,为了便于管理,msp430的中断管理机制把同类的中断合并成一个总的中断源,具体的中断需要由软件判断中断标志位来确定。
例如:P1口的任何一个IO发生中断,程序都会执行P1口中断服务程序,在P1口中断服务程序中,再根据P1IFG标志位来判断具体是哪一根IO口发生了中断。
内部函数标准c语言具有普遍适用性,但是每种cpu都有独特之处,对于某个cpu来说一个简单的操作,用标准c语言表达出来却很复杂,为了解决这个问题,编译器会提供一些内部函数:__low_power_mode_0();__low_power_mode_1();__low_power_mode_2();__low_power_mode_3();上述可以简化为:LPM0;LPM1;LPM2;LPM3__low_power_mode_off_on_exit();这个函数可以退出唤醒cpu__delay_cycles(long int sycles); 靠cpu空操作延迟cycles个时钟周期__enable_interrupt(); _EINT();开总中断__disable_interrupt(); _DINT();关总中断_nop(); 空操作文件管理初学者往往将所有的代码都写在一个c文件中,这是一种非常坏的习惯。
msp430学习经验总结
msp430学习经验总结最近学习MSP430,把自己的一些经验分享下,这是我在网上发现的一篇很不错的文章,归纳得很好,简洁明了。
1.MSP430开发环境建立1.安装IAR dor msp430 软件,软件带USB仿真器的驱动。
2.插入USB仿真器,驱动选择安装目录的/drivers/TIUSBFET3.建立一个工程,选择"option"选项,设置a、选择器件,在"General"项的"Target"标签选择目标器件b、选择输出仿真,在"Linker"项里的"Output"标签,选择输出"Debug information for C-SPY",以输出调试信息用于仿真。
c、若选择"Other",Output下拉框选择"zax-m"即可以输出hex 文件用以烧录,注意,此时仿真不了。
d、选择"Debugger"项的"Setup"标签,"Driver"下拉框选择"FET Debugger"e、选择"FET Debugger"项的"Setup"标签,"Connection"下拉框选择"Texas Instrument USB-I"4.仿真器的接口,从左到右分别为 " GND,RST,TEST,VCC"2.IO口数字输入/输出端口有下列特性:□每个输入/输出位都可以独立编程。
□允许任意组合输入、输出。
□ P1 和 P2 所有 8 个位都可以分别设置为中断。
□可以独立操作输入和输出数据寄存器。
□可以分别设置上拉或下拉电阻。
在介绍这四个I/O口时提到了一个“上拉电阻”那么上拉电阻又是一个什么东东呢?他起什么作用呢?都说了是电阻那当然就是一个电阻啦,当作为输入时,上拉电阻将其电位拉高,若输入为低电平则可提供电流源;所以如果P0口如果作为输入时,处在高阻抗状态,只有外接一个上拉电阻才能有效。
MSP430学习笔记
图和下方CCR2的框图是一样的。此处省略不写。在CCR中, 左上角为一个捕获源选择寄存器。可以从CCI2A、CCI2B、 GND或者VCC选择捕获源,选择捕获源后有一个选择捕获模 式寄存器Capture Mode,然后过来有一个捕获溢出状态寄 存器COV,SCS同步/异步捕获模式选择位,然后连接到捕获 比较寄存器。下方为模式选择寄存器,具体设置可以查看相 应的寄存器设置。 这里仅是大概介绍一下Timer0的寄存器,具体的设置使用还 看参考相应的寄存器并结合例程慢慢学习理解。
//以下为参考处理程序,不使用的端口应当删除其对于中断源的判断。 if((P1IFG&BIT0) == BIT0) { P2OUT&=~BIT0; //处理P1IN.0中断 P1IFG &= ~BIT0; //清除中断标志 //以下填充用户代码 } else if((P1IFG&BIT1) ==BIT1) { P2OUT&=~BIT1; //处理P1IN.1中断 P1IFG &= ~BIT1; //清除中断标志 //以下填充用户代码 } else if((P1IFG&BIT2) ==BIT2) { P2OUT&=~BIT2; //处理P1IN.2中断 P1IFG &= ~BIT2; //清除中断标志 //以下填充用户代码 } else if((P1IFG&BIT3) ==BIT3) { //处理P1IN.3中断 P1IFG &= ~BIT3; //清除中断标志 //以下填充用户代码 } else if((P1IFG&BIT4) ==BIT4) { P2OUT&=~BIT4; //处理P1IN.4中断 P1IFG &= ~BIT4; //清除中断标志 //以下填充用户代码 } else if((P1IFG&BIT5) ==BIT5) { //处理P1IN.5中断 P1IFG &= ~BIT5; //清除中断标志 //以下填充用户代码 } else if((P1IFG&BIT6) ==BIT6) { //处理P1IN.6中断 P1IFG &= ~BIT6; //清除中断标志 //以下填充用户代码
430学习经典笔记
1.键盘硬件连接看一看实验板上键盘的接法,如下图所示,可以看到,它与51键盘接法也没有什么区别。
以下程序功能是实现K1~K4分别被按下时,在数码管上分别显示1~4。
2.程序实现void main( void ){uchar temp,keyval = 0;WDTCTL = WDTPW + WDTHOLD; //关闭看门狗BoardConfig(0x88); //打开数码管,关闭流水灯和电平转换P1DIR = BIT7; //设置P1.0~P.3为输入状态,P.7为输出P1OUT = 0;P3DIR |= BIT4; //设置P3.4为输出状态P3OUT |= BIT4; //P3.4输出1P4DIR = 0xff;P5DIR = 0xff;P4OUT = 0x3f;P5OUT = 0xf7;while(1){if(keyin != 0x0f) //如果有键被按下{delay(); //延时消抖if(keyin != 0x0f) //再次检测按键状态{temp=keyin;while(keyin != 0x0f); //等待按键被放开 switch(temp) //转换键值{case 0x0e:keyval = 1;break;case 0x0d:keyval = 2;break;case 0x0b:keyval = 3;break;case 0x07:keyval = 4;break;default:keyval = 0;break;}P4OUT = scandata[keyval]; //用一位数码管显示}}}}看来,键盘处理程序与其他单片机键盘处理程序也没有什么区别。
主要就是来看一看设置。
3.一些符号的函义1.P1DIR查找这个符号,可以看到在msp430x14x.h中有这样的定义:#define P1DIR_ (0x0022) /* Port 1 Direction */DEFC( P1DIR , P1DIR_)再查找数据手册:这样,第1行就不难理解了。
学习笔记-CCS-MSP430F5529[快速入门篇二]
学习笔记-CCS-MSP430F5529[快速⼊门篇⼆] 由于2021的全国电赛延期了,从今天开始打算好好整理⼀下使⽤CCS编程的经验,本篇笔记会好好整理⼀下我备赛期间⽤CCS写的程序,包括外部中断,定时器部分的定时中断,定时器输⼊捕获,PWM波输出,UART,OLED(IIC),MPU6050,内容涵盖了硬件和软件部分。
鉴于笔者⽔平有限和能⼒不⾜,⽂中有不到之处还请看者多包涵,我的⼯程源代码链接会在⽂章末尾贴出。
先贴⼀张peripheral图,MSP430的外部引脚及其复⽤功能都可在图⾥查到。
⼀·外部中断 外部中断的操作⽅式与GPIO⼀样是使⽤寄存器操作,所以学习相关的寄存器是不可避免的,不过MSP430的寄存器不算太多,操作外部中断主要要⽤到以下寄存器:1.PxIV 中断向量表(字),P1端⼝的中断函数⼊⼝地址应该都放在⾥⾯,只是⼀个地址;2.PxIE 中断使能寄存器,相应引脚位置1表⽰允许产⽣中断;置0表⽰该引脚不产⽣中断;3.PxIES 中断触发⽅式选择寄存器,相应引脚位置1表⽰下降沿触发,置0表⽰上升沿触发;4.PxIFG 中断标志,由于MSP430的中断使能需要使能总中断,所以仅当总中断GIE和中断使能寄存器PxIE都打开后,PxIFG⾼电平表⽰有中断请求等待待响应,等中断服务函数结束时需要软件清该标志位; 这些寄存器在TI的msp430f5xx_6xxgeneric.h头⽂件有如下定义下⾯看⼀个外部中断程序,所⽤引脚为P2.1,对应MSP430F5529⽕箭板的板载按键S1,初始化为下降沿触发void EXTI_Init(){/*按键中断*/P2IE |= BIT1; //P2.1中断使能P2IES |= BIT1; //设置为下降沿触P2IFG &= ~BIT1; //清中断标志位P2REN |= BIT1; //上拉电阻P2OUT |= BIT1; //初始化置⾼}/*中断服务函数*/#pragma vector=PORT2_VECTOR__interrupt void P2_ISR(void){if(P2IFG & BIT1){delay(2); //延时2ms消抖动/*这⾥是函数算法部分*/}P2IFG &=~BIT1; //清空中断标志}⼆·定时器MSP430的定时器资源还算丰富,共有两类共四个定时器,分别是3个TimerA和1TimerB,由于我对TimerA使⽤较多,所以本⽂着重来讲TimerA,三个TimerA分别为Timer0_A(5个捕获/⽐较寄存器),Timer1_A(3个捕获/⽐较寄存器),Timer2_A(3个捕获/⽐较寄存器),下⾯是TimerA的结构图我们结合TimerA的寄存器讲解⼀下这张图上半部分是整个定时器的基础,整个上半部分可通过TACTL控制寄存器来编程,从功能⾓度来讲从左往右分别是,⾃⾝时钟源配置TASSEL,第⼀次分频选择ID,定时器清零位TACLR,计数值存放寄存器TAR,⼯作模式控制位MC,中断标志位TAIFG以及没有在结构图出现的定时器中断使能TAIE。
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学习笔记
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,程序从这个地址继续执行。