第二讲 MSP430单片
学习MSP430单片机推荐参考书
《MSP430系列超低功耗16位单片机接口技术及系
统设计实例》 北航出版社 魏小龙 编著
《MSP430系列单片机C语言程序设计与开发》
北航出版社 胡大可 编著
《MSP430单片机C程序设计与实践》
北航出版社 曹磊 编著
《MSP430系列FLASH型超低功耗16位单片机》
北航出版社 胡大可 编著
第二讲 MSP430单片第二讲 MSP430单片机软件
1、 CPU内核组成: 16位的(ALU)算术运算单元
16个寄存器(PC、SP、SR、R4~R15)
指令控制单元
2、存储器组织结构
3、外围模块寄存器地址
它们被分配在相应的字模块或字节模块当中。分配在00-FFH中
为字节,分配在100-1FFH中为字。
4、寻址模式:
5、指令格式:
1)书写格式 标号 指令助记符 源操作数,目的操作数;注释
2)共有51条指令,其中有24条是模拟仿真指令。27条硬件指令
6、指令集说明:1)数据传送指令 2)数据运算指令 3)逻辑位
操作指令 4)跳转与程序流程控制类指令 5)多个指令仿真的宏
令 6)堆栈指针寻址
一、 MSP430单片机指令系统
第二讲 MSP430单片一、 MSP430单片机指令系统
4个特殊功能寄存器,12个通用寄存器。特殊功
能可操作的只有SR和SP
SR:CPU状态寄存器
第二讲 MSP430单片
SR:CPU状态寄存器
一、 MSP430单片机指令系统
C 进位标志
Z 零标志
N 负标志
GIE 中断标志 它可以用指令改变
CPUOff CPU控制位
OscOff 晶振控制位 控制CPU的工作模式SCG0 控制系统时钟
SCG1 控制系统时钟
第二讲 MSP430单片一、 MSP430单片机指令系统
EXIT
第二讲 MSP430单片一、 MSP430单片机指令系统
#define C (0x0001)
#define Z (0x0002)
#define N (0x0004)
#define V (0x0100)
#define GIE (0x0008)
#define CPUOFF (0x0010)
#define OSCOFF (0x0020)
#define SCG0 (0x0040)
#define SCG1 (0x0080)
/* Low Power Modes coded with Bits 4-7 in SR */
#ifndef __IAR_SYSTEMS_ICC /* Begin #defines for assembler */
#define LPM0 (CPUOFF)
#define LPM1 (SCG0+CPUOFF)
#define LPM2 (SCG1+CPUOFF)
#define LPM3 (SCG1+SCG0+CPUOFF)
#define LPM4 (SCG1+SCG0+OSCOFF+CPUOFF)
/* End #defines for assembler */
第二讲 MSP430单片一、 MSP430单片机指令系统
第二讲 MSP430单片一、 MSP430单片机指令系统
堆栈指针SP:
它是在系统调用子程序或进入中断服务程序时,保护
程序计数器PC。堆栈指针SP总是指向堆栈的顶部。
系统在压栈时,总是先将SP减2。然后在将要压栈的
容写入该单元中(RAM)。
系统弹栈时正好相反。
在对堆栈操作上有两中模式:隐式和显示模式。
一是系统对它操作;一是用户程序对它操作。
堆栈指针的起始地址是有高向低进行,不同的芯片其地
是不同的。
通用工作寄存器:
它是应用在大部分场合。它可以实现算术逻辑运算,
也可实现临时的暂存单元,可实现字操作和字节操作。
第二讲 MSP430单片一、 MSP430单片机指令系统
数据存储器:这是一个使用频率非常高的操作环境区域,
不同的芯片 他的可使用大小不同。一般称这
个区域叫做RAM区。
程序存储器:它是存放用户程序代码的区域,它分有三个
区域,中断向量区、用户程序代码区、引导程序
代码区。
在使用功能模块时的服务程序入口地址是已经安排好
的,只要用户根据需要使用了它,就将使用的中断入口地
址放在这里。而引导程序是芯片出厂后由厂家确定的,它
由JATG去访问,客户不能调用。而程序区可连续存放用
户程序或不连续存放用户程序,也存放用户数据。
第二讲 MSP430单片一、 MSP430单片机指令系统
指令格式:操作码 源操作数,目的操作数 ;注释
MSP430单片机的寻址方式:
例:MOV #1234H,R11 ;目的操作数寄存器寻址
MSP430的源操作数的访问可有7种方式。其中源
操作数可用全部的7种寻址方式,而目的操作数只有4种
寻址方式。
所谓寻址就是在操作的过程中是如何使用不同的方
式来确定操作数的地址,它包扩源操作数和目的操作数。
7种寻址方式分别是:
寄存器寻址、变址寻址、符号寻址、绝对寻址、间
接寄存器寻址、间接增量寻址、立即寻址。
第二讲 MSP430单片一、 MSP430单片机指令系统
MSP430单片机的寻址方式:
1、寄存器寻址:操作数存放在通用寄存器中。
例:MOV #1234H,R11 ;目的操作数寄存器寻址
MOV R9,R11 ;源、目的操作数寄存器寻址
MOV R9,&220H ;源操作数寄存器寻址
2、变址寻址:通用寄存器中存放的源操作数的相对地址
指令: MOV[.B] X(Rn),Y(Rn) ;
例:MOV 2(R8),R11 ;源操作数变址寻址
MOV R9, 4(R8) ;目的操作数变址寻址
ADD @R9, 4(R10) ;目的操作数寄存器寻址
MOV 2(R9), 4(R8) ;源、目的操作数变址寻址
第二讲 MSP430单片一、 MSP430单片机指令系统
MSP430单片机的寻址方式:
3、符号模式寻址,它的地址是通过编译后系统安排,这
种指令在使用上也可以对固定的符号(如外部模块定义
的符号也可使用)该标号的地址是紧跟在上一个语句之
后。一般用于指令跳转,也可用于数据操作。
指令: MOV EDE,TONI ;
例:MOV.B R8,LOOP0 ;目的操作数符号寻址
MOV TAB,R8 ;源操作数符号寻址
ADD TAB,&410H ;源操作数符号寻址
第二讲 MSP430单片一、 MSP430单片机指令系统
MSP430单片机的寻址方式:
4、绝对寻址: 它不同于上面的标号,它使用绝对地址
符号ASEG地址或固定的外围模块地址。
指令: MOV &EDE,&TONI ;
例1:MOV #1234H,&LOOP0 ;目的操作数符号寻
MOV &TAB,R8 ;源操作数符号寻址
ADD TAB,&410H ;目的操作数符号寻址
MOV.B &220H, R5 ;源操作数符号寻址
例2:
Reset MOV #1234H,R6
AAA MOV R5 ,R8
SUB &AAA,&Reset
第二讲 MSP430单片一、 MSP430单片机指令系统
MSP430单片机的寻址方式:
5、间接寻址: 它与寄存器寻址很相似,不同的是寄存
器存放的不是操作数而存放操作数的地址。使用时用@表
示是间接寻址。这种寻址模式只对源操作数有效。
指令: MOV @R10,2(R11) ;
例:MOV.B @R8,&220H
MOV @R5 ,4(R8)
ADD @R5 ,&AAA
MOV @R5 ,R8
第二讲 MSP430单片一、 MSP430单片机指令系统
MSP430单片机的寻址方式:
6、间接增量寻址:与上述基本一致,但对目的操作数
不能用。
指令: MOV @R10+,2(R11) ;
指令按间接寻址执行后,R10自动指向下一数据
(R10+2→R10)。加1还是加2,需根据执行的是字操作还
是字节操作。
例: SUB.B @R8+,&220H
MOV @R5+ ,4(R8)
MOV @R5 +,&AAA
ADD @R5+ ,R8
第二讲 MSP430单片一、 MSP430单片机指令系统
MSP430单片机的寻址方式:
7、立即寻址:又叫立即数寻址。但对目的操作数不能用
指令: MOV #1234H,2(R11) ;
例:MOV.B #12H,&220H
MOV #1234 ,4(R8)
ADD #2345H ,&AAA
MOV #2345H ,R8
第二讲 MSP430单片一、 MSP430单片机指令系统
中断向量地址
第二讲 MSP430单片一、 MSP430单片机指令系统
指令传送方向
第二讲 MSP430单片一、 MSP430单片机指令系统
汇编指令:
1. 数据传送指令:
例: MOV #1234,R5
MOV #EDE, R10 ; 注:要事先对EDE定义才能用
CLR R6
CLR.B &EDE ; 对字节操作
MOV #8912H, R10
MOV #8912H, 210H
SWPB R7
PUSH R9
POP R13
MOV 数据传送
CLR 清除目的
POP 从目的弹出到目的中
PUSH 将字压入堆栈
SWPB 字节交换
第二讲 MSP430单片一、 MSP430单片机指令系统
汇编指令:
2.数据运算指令:加法指令: ADC 进位位加目的ADD 源加目的
ADDC 带进位位源加目的
DADC、DADD 十进制
INC 、INCD、
减法指令:SUB、SUBC、DEC、DECD
SBC 、CMP、TST
注意:减法没有十进制运算指令。
例: ADD @R13, 0(R12)
ADC 2(R12)
注意:当运算后都会引起SR中的某些标志位变化,你可
以用判断这些标志位来控制程序的去向.
第二讲 MSP430单片一、 MSP430单片机指令系统
汇编指令:
3.逻辑运算与位操作类指令
逻辑运算:AND 源与目的与
BIC 对位清零
BIS 对位置位
BIT 测试位
XOR 源与目的异或
RLA 算术左移 RRA 算术右移
RLC 通过进位位算术左移
RRC 通过进位位算术右移
INV 目的求反
位操作: CLRC、CLRN、CLRZ、DINT、EINT
SETC、SETZ、SETN
第二讲 MSP430单片一、 MSP430单片机指令系统
汇编指令:
4. 跳转与程序流程的控制指令:
BR 无条件在64K空间的长转移指令
CALL 子程序调用
JC/JHS
JZ/JEQ
JGE、JL、JMP JLO
JN、JNC、JNE/JNZ
RET、RETI、NOP
注:以上的控制要根据不同的条件来进行(如根据测试或
运算指令,比较指令等。)
第二讲 MSP430单片一、 MSP430单片机指令系统
汇编指令:
4. 跳转与程序流程的控制指令:
例: BR EXEC ;转移到EXEC包含的地址中
BR @R5 ;转移到R5指向的地址中
CALL R5
CALL EXEC
CMP #15,R5
JHS LABEL
BIT #10H,&P0IN
JC PROGA
第二讲 MSP430单片二、 MSP430单片机汇编程序
源语句格式:
它包括汇编伪指令、汇编指令、宏伪指令、以及注释。
书写格式
[标号] [:] (伪)指令助记符 [操作数1], [操作数2] [;注释
解释:标号是可选项,最多32个字符,它适用所有汇编语
言和大多数汇编语言伪指令 。
助记符,它紧跟标号后面,它不能写在第一列。它包括
(机器指令助记符、汇编伪指令等)
操作数:前缀符号&、#、@、常数(二进制 B、八进制
十六进制 H、十进制)字符常数(用单引号,8位ASCI
码),表达式常数,符号。
第二讲 MSP430单片二、 MSP430单片机汇编程序
汇编伪指令:
作用:1、将代码和数据汇编到
的段中
2、在存储器中为未初始化的变量保留空间
3、控制汇编后列表文件的格式
4、初始化存储器
5、汇编条件块
6、定义全局变量
7、规定汇编器可以从中获得宏的库
8、产生符号化的调试信息
常用的汇编伪指令有:
模块控制伪指令、段控制伪指令、
数值分配伪指令、数据定义伪指令
第二讲 MSP430单片二、 MSP430单片机汇编程序
汇编伪指令:
1. 模块控制伪指令
模块的含义是功能不同,在模块内部可以定义不同
变量, 他们可以只是在内部有效,在外部失效。
模块要用一对说明的符号来定义,如:
NAME ADD1 注:ADD1为模块的名子
┇
ENDMOD 注:结束模块定义
上述只是定义一个模块。如果要定义一个集合的模块
参考书介绍。一般这种定义不常用。只有定义局部变量时
才用到它。
第二讲 MSP430单片
汇编伪指令:
2. 数值分配伪指令
它主要用语对符号的数值定义。以下是常见的定义:
EQU 在当前模块中赋予一个永久的值。
= 意义同上
DEFINE 在多个模块环境下,定义一个在整个文
件中都有效的值。
sfrb和sfrw 是老的版本对功能模块寄存器的定义
DEFC 是新的版本对功能模块寄存器的定义
#define
READ_ONLY DEFC 是新的版本定义只读功能模
寄存器使用方法: HHH EQU 200H
HHH 标志符 200H 标志符值
二、 MSP430单片机汇编程序
第二讲 MSP430单片
汇编伪指令:
3. 段控制伪指令
它主要说明代码和数据的生成的位置,你以规定一个
段、设置特定的定位指针。你也可以插入一些填充字节用
以校准程序指针,和将程序指针定义对准偶地址上。
常用的有:ASEG 一个绝对段的开始
STACK 定义堆栈段
COMMON 定义公共段
ORG 设置特定的定位指针
ALIGN 插入一些填充字节用以校准程序指针
EVEN 插入对准偶地址
例如:有的汇编程序在头一条写:
ORG 03000H
意思是它下下面的代码从3000H开始生成汇编代码。
二、 MSP430单片机汇编程序
第二讲 MSP430单片
汇编伪指令:
4. 数据定义伪指令
该指令可以在代码段空间内的任意位置上定义一些
预留空间,也可以将一些需要查表的数据定义在某个区
域上。注意的是这种定义都是一些常数值。下面是它的
指令含义: DL 定义一个32位常数
DW 定义一个16位常数
DB 定义一个8位常数
DF 定义一个32位符点常数
DS 定义一个N个字节单元
二、 MSP430单片机汇编程序
例如:定义10字节单元
table DS 0xA
第二讲 MSP430单片
汇编程序设计方法技巧:
二、 MSP430单片机汇编程序
汇编语言程序设计是一个综合性很强的一门艺术,它
许需要掌握芯片性能和使用方法,更多的要掌握一些外围
电子电路以及开发的目的和意图等多方面的知识,限于篇
幅 ,在这里只介绍有关如何优化程序结构和组织指令和
编写方面的技巧。
用汇编语言编写程序的几大步骤:
1、确定算法和思路,一般思路可用流程图去体会能
否实现。
2、确定数据量,主要是工作单元的数据量,以确定
分配存放的单元。这里对芯片的选型很重要。
3、确定使用的功能模块,主要根据实现的目标而定。
4、确定使用的符号变量,标注符号的含义。
5、按汇编指令要求编写汇编指令
第二讲 MSP430单片二、 MSP430单片机汇编程序
编写程序的原则:
尽量节省RAM,缩短指令长度,提高运行效率。常
见的汇编指令结构:
1、顺序结构
2、散转结构
3、循环结构
4、选择结构
除此之外,熟悉有关外围电路的特性也是必要的。
第二讲 MSP430单片
顺序结构:所谓顺序结构就是CPU执行完了一条指令再
执行紧挨着的下一条指令。它是没有跳转指
令,一般是连续的MOV指令。
编写程序的原则:
二、 MSP430单片机汇编程序
散转指令:它是一些查询判断后执行一些相应功能后又
返回到入口,一般它根据执行的一些运算或执
行一些事件(如中断)等。一般这种结构是一
些在主程序的大的循环。
循环结构:循环结构在程序设计中占有相当重要的地位。
它的结构类似高级语言的WHILE和DO WHILE
中的循环语句相同,在循环结构常使用判断语
句来确定程序的走向,当不满足或满足时可进
入循环主体或离开循环主体。
第二讲 MSP430单片
编写程序的原则:
二、 MSP430单片机汇编程序
循环结构:下面的一段循环结构是一个延时子程序:
MOV #60000,R5
LOOP DEC R5
JNZ LOOP
注:每个指令为1个周期,共用60000*3个指令周期
选择结构:这是对某个条件,或多个条件进行测试后去执
行一个指定的流程。在这个结构中一般常自定
一些标志位,它代表一定的物理含义,通过对
它的改变来决定程序执行对应的功能。也可能
通过运算表达式的结果来选择处理功能。
第二讲 MSP430单片
编程基础:
三、 MSP430单片机程序设计
1、C语言的数据类型
常使用8位、16位、32位、64位,同时分有无符号之
例如:特殊功能寄存器变量sfrb、sfrw,它直接定义在
片内。要大写。
无符号整数 char 、unsigned int、 unsigned long
有符号整数 int 、long ;
浮点数 float 。
2、C430的配置
由于430各芯片上的差异430要进行特性配置。你也
可根据需要去修改这些配置文件。
第二讲 MSP430单片
编程技巧:
1、主函数的建立
2、变量类型的定义
3、程序设计结构 1)条件语句 2)开关语句 3)循环语句
4)返回语句
4、常用的MSP430 C语言
库函数
数 学 类: math.h
字符串处理类:string.h
使用举例: void *memmove(void *s1,const void
*s2,size_t n)
s1: 目的指针,也可做返回值(内部有返回指针)
s2: 源指针 n:复制个数
5、混合编程技巧
三、 MSP430单片机程序设计
第二讲 MSP430单片
混合程序模块设计:
1、汇编文件名后缀为.s43
一般为了提高运行效率,提高代码效率或直接控制外
围芯片接口,可采用一段汇编指令来完成。这就需要采
在C语言嵌套汇编语言混合编程,在混合编程中,不同的
MSP430编译环境使用的方法不同,参数的传递也不一样
这里介绍的IAR的环境参见设计实例。
2、 C程序文件名后缀为.c
为了提高程序的可读性或在程序调试上的方便,往往
将一些功能相类姒的子程序放到一个文件中供主程序调用
例如:程序初始化,功能模块,常用的运算子程序,对这
些子程序有些不涉及外围芯片时还可生成库函数(如特殊
的功能计算),这样对编程维护修改都有好处,有些工作
也避免重复。 参见设计实例
三、 MSP430单片机程序设计
第二讲 MSP430单片
混合程序模块设计:
3、包含文件名后缀为.h
对程序使用的大量的常数、变量、数组、数据结构以
及函数的定义一般放在这里,一般对程序修改、对照检查
很方便。但注意:他们使用的局限性。参见设计实例。
三、 MSP430单片机程序设计
第二讲 MSP430单片
#include
void main(void)
{
WDTCTL = WDTPW + WDTHOLD; // Stop WDT
IE2 |= BTIE; // Enable BT interrupt
BTCTL = BTSSEL+BTIP2+BTIP1+BTIP0;
P5DIR |= 0x02; // Set P5.1 to output direction
_EINT(); // Enable interrupts
for (;;)
{
_BIS_SR(CPUOFF); // Enter LPM0
_NOP(); // Required only for C-spy
}
}
interrupt[BASICTIMER_VECTOR] void basic_timer(void)
{
P5OUT ^= 0x02; // Toggle P5.1 using exclusive-OR
}
三、 MSP430单片机程序设计
第二讲 MSP430单片
三、 MSP430单片机程序设计
C文件
unsigned int varword;
char varbyte;
汇编文件
PUBLIC ?
EXTERN varword
EXTERN varbyte
? MOV.B #00011H, varbyte
MOV #01111H, varword
注意它们的长度!
第二讲 MSP430单片
三、 MSP430单片机程序设计
#include
extern unsigned int Swap(unsigned int);
unsigned int result;
void main(void)
{ WDTCTL=WDTPW+WDTHOLD;
result=Swap(0x1234);
while(1);
}
在写一段由C调用的源程序
unsigned int Swap(unsigned int x)
{
return x;
}
注:在编译时将Project/Options中ICC430/Iist/Assembly output
file选中
学习MSP430单片机推荐参考书
第二讲 MSP430单片机软件