第2章2节430寻址方式
MSP430使用

微机原理实验报告4&5程序与EW430 上测试通过实验班号:周五下午第二节;座位号:43目录实验目的 (2)实验任务 (2)1. 了解MSP430F1xx实验板结构,掌握MSP430F1xx实验板检测方法 (2)2. EW430开发工具的初步使用 (4)3. 掌握查看和修改寄存器、存储器、外围模块端口寄存器的方法 (4)4. 了解端口P1~P6的选择PxSEL、方向PxDIR、输入PxIN、输出PxOUT各寄存器功能 (4)5. 了解程序计数器PC(即R0寄存器)的变化规律 (5)6. 了解MSP430F149单片机结构 (6)7. (选做)学习工程空间管理项目的方法 (7)8. 学习寻址方式和指令系统 (7)9. 指令格式学习 (8)10. 调试程序练习 (9)11. 比较step into和step over的不同 (10)12. 掌握计算机中数的表示和编码 (10)13. (选做)理解计算机取指令执行指令的工作原理、以及取非法指令的结果 (10)14. (选做)理解CPU对存储器进行字操作遵循的“对准偶地址”原则 (11)实验总结与思考 (11)实验目的1.了解MSP430F1xx实验板结构,掌握MSP430F1xx实验板检测方法;2.了解MSP430单片机开发工具EW430的基本使用方法;3.掌握EW430下常用的View和DEBUG命令;4.了解MSP430F149单片机结构;5.掌握P1~P6基本输入/输出有关寄存器功能;6.学习MSP430的寻址方式和指令系统;7.了解计算机取指令、执行指令的工作过程;8.掌握DEBUG下的运行命令;9.掌握在EW430下调试程序的方法;10.掌握计算机中数的表示和编码。
实验任务1.了解MSP430F1xx实验板结构,掌握MSP430F1xx实验板检测方法电源电路:对于+3V和+5V电源,采用万用表测量,发现电压稳定,测试通过。
发光二极管:由于发光二极管是共阳极接法,所以低电平点亮。
第2章第1节MSP430概述

……
CMP x , y JC less …… …… ;x-y ;若 C=1 , x<y , 转至 less处运行 ;否则x>=y 运行此指令
less: ……
……
;less处的指令
Z:零标志(Zero Flag) 若运算结果为 0 时,则Z=1,否则Z=0 例:CMP指令与Z标志结合测试两个操作数是否相等: ……
计算机的基本组成和工作原理
输 入 设 运算器ALU
存储器
输 出 设
备 控制器
CPU
备
1.以二进制表示数据和指令(程序)
? ? ?
要 点
2. “存储程序” 3. 五大组成部分
+
“程序控制”
冯· 诺依曼计算机
微机的基本结构
输入/输出 设备1 输入/输出 设备n
CPU
运算器 + 控制器 + 寄存器
第2章第2节MSP430寻址方式

任一操作数都有明确的寻址方式
既可作为源操作 数的寻址方式, 又可作为目的操 作数的寻址方式
只能作为源操作 数的寻址方式, 不能作为目的操 作数的寻址方式
X(Rn) X(PC) X(SR)
仅从As和 Ad 无法区分不同 的寻址方式
@Rn+
@PC+
由 As 和 S-Reg 共同决定源操作数的寻址方式 由 Ad 和 D-Reg 共同决定目的操作数的寻址方式
寄存器间接寻址方式
(R10)
(R11+0)
举例:MOV.B
@R10 , 0(R11)
code data data
R10 R11+0
指针(地址)
R10 R11+0
寄存器间接增量寻址方式
(R10)
(R11+0)
R10=R10+1 or 2
举例:MOV @R10+ , 0(R11)
code data data
通常为常数或常量
举例:MOV 2(R5) , 6(R6)
code data data
R6+6 R5+2
指针(地址)
R6+6 R5+2
符号寻址方式——
机器指令:PC 寄存器相对寻址 效果上:直接寻址方式
(EDE)
(TONI)
注意:代码重定位后(此时PC值改变了),实际的操作数 可能已经不是原来的操作数了(RAM操作数) !
op-code
B/W As/Ad S/D-Reg
跳转指令(Jump Instruction)
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
op-code
微机原理-MSP430体系结构

MSP430 CPU寄存器
• R2:状态寄存器(SR):
– 存储状态位和控制位; – CPU自动改变系统标志位;
– 保留位用来支持常量发生器.
15 14 13 12 11 10 9 8
7
Reserved for CG1
V SCG1
6 SCG0
5 OSCOFF
4 CPUOFF
3
210
GIE N Z C
• R1:堆栈指针(SP):
– 第一,用户可以使用堆栈存储数据,以便未来使用。(指令: 用 PUSH指令来存数据,POP指令来取数据);
– 第二,用户和编译器均可以使用堆栈为子函数传递参数 (PUSH、 POP用于调用函数,被调用的函数使用SP来计算偏移);
MSP430 CPU寄存器
• R1: 堆栈指针(SP) (续):
– 第三,系统进入子函数之前,把PC的值存储到堆栈中,从子函数 返回时,再取出堆栈中的值,重新赋值给PC;
– 第四,系统堆栈在系统进入中断服务程序时,首先保护程序计数 器(PC),然后将中断矢量地址送入程序计数器,再执行中断服务 程序。中断服务程序执行完毕,遇到返回指令时,将堆栈的内容 送到程序计数器中,程序又回到原来的地方,继续执行。在函数 调用之前保存的寄存器变量、局部变量和参数都不会变。
所谓“集成开发环境”就是处理器的所有开发都在一个软 件里完成,包括工程管理、程序编译、代码下载、调试 等功能。
CCS支持所有TI公司推出的处理器,包括MSP430、ARM Cortex系列、C2000和DSP。
对于MSP430的开发,用的最多的是IAR公司的EW430。
TI公司在CCSV5之后的版本里,对MSP430的支持达到了全 新的高度。
MSP430中文数据手册

MSP430混合信号微控制器数据手册产品特性●低电压范围:2.5V~5.5V●超低功耗——活动模式:330μA at 1MHz, 3V——待机模式:0.8μA——掉电模式(RAM数据保持):0.1μA●从待机模式唤醒响应时间不超过6μs●16位精简指令系统,指令周期200ns●基本时钟模块配置——多种内部电阻——单个外部电阻——32kHz晶振——高频晶体——谐振器——外部时钟源●带有三个捕获/比较寄存器的16位定时器(Timer_A)●串行在线可编程●采用保险熔丝的程序代码保护措施●该系列产品包括——MSP430C111:2K字节ROM,128字节RAM——MSP430C112:4K字节ROM,256字节RAM——MSP430P112:4K字节OTP,256字节RAM●EPROM原型——PMS430E112:4KB EPROM, 256B RAM●20引脚塑料小外形宽体(SOWB)封装,20引脚陶瓷双列直插式(CDIP)封装(仅EPROM)●如需完整的模块说明,请查阅MSP430x1xx系列用户指南(文献编号:SLAU049产品说明TI公司的MSO43O系列超低功耗微控制器由一些基本功能模块按照不同的应用目标组合而成。
在便携式测量应用中,这种优化的体系结构结合五种低功耗模式可以达到延长电池寿命的目的。
MSP430系列的CPU采用16位精简指令系统,集成有16位寄存器和常数发生器,发挥了最高的代码效率。
它采用数字控制振荡器(DCO),使得从低功耗模式到唤醒模式的转换时间小于6μs.MSP430x11x系列是一种超低功耗的混合信号微控制器,它拥有一个内置的16位计数器和14个I/0引脚。
典型应用:捕获传感器的模拟信号转换为数据,加以处理后输出或者发送到主机。
作为独立RF传感器的前端是其另一个应用领域。
DW封装(顶视图)可用选型功能模块图管脚功能简介:1.CPUMSP430的CPU采用16位RISC架构,具有高度的应用开发透明性。
msp430 再说位运算

再说位运算本篇为CLOUD430自学笔记的杂项篇,相对自学笔记正文篇要专业一些,本文中将会涉及相关430的基础知识,不懂的可以参看CLOUD自学笔记正文篇,另外Cloud学识有限难免有疏漏望大家毫不留情地指出。
CLOUD一直认为MSP430单片机的IO口是不可以位寻址的,相关手册和代码大量的位与运算、位或运算都很好滴证明了这一点。
用惯了C51中的“sbit”的孩子们刚开始总是有点苦恼,总是被大量的位运算蒙蔽了很多。
虽然位运算拥有很多按位寻址操作所不可比拟的优势(比如大量位的操作),但是Cloud还是对于“单个位”操作有很大的研究兴趣。
一次偶然机会,看到430引用的头文件io430.h所引用的相关芯片头文件(这里Cloud用的是io430g2553.h)内部对io口的相关定义,产生了IO口单独位操作的实现方法,本文就将对这一过程进行说明并研究不同操作方式的优劣。
G2553单片机拥有P1口和P2口,对P1口的输出操作是P1OUT寄存器,我们查看P1OUT 的相关声明,出现如下代码:__no_init volatile union{unsigned char P1OUT; /* Port 1 Output */struct{unsigned char P0 : 1; /* */unsigned char P1 : 1; /* */unsigned char P2 : 1; /* */unsigned char P3 : 1; /* */unsigned char P4 : 1; /* */unsigned char P5 : 1; /* */unsigned char P6 : 1; /* */unsigned char P7 : 1; /* */}P1OUT_bit;} @0x0021;可以看到,P1OUT的数据类型是一个无符号字符型,占1个字节。
然而这个P1OUT并不是孤单的,它是在一个大括号内部定义的,大括号前面有这样一条语句:__no_init volatile union这条代码由三个关键字组成,下面分别解释这三个关键字:①__no_init:这个关键字表示不会在单片机初始化时就配置该变量。
第2章MSP430单片机软件工程开发基础

MSP430单片机原理与应用
/msp430
第2章 MSP430单片机软件工程开发基础
MSP430单片机的CPU属于RISC(精简指令集)处理器,RISC处理器基本上是为高级语 言所设计的,因为精简指令系统很大程度上降低了编译器的设计难度,有利于产生高效紧 凑的代码。初学者完全可以在不深入了解汇编指令系统的情况下,直接开始C语言的学习。 本章介绍MSP430单片机软件工程的开发基础,主要讲解MSP430单片机C语言编程基础、 MSP430单片机的软件编程方法及软件集成开发环境的基本操作。通过本章的讲解,旨在 使读者对MSP430单片机的编程思想有一定的了解。
逗号运算符的作用是把几个表达式串在一起,成为逗号表达式,其格式为“表达式1,表
达式2,……,表达式n”,运算顺序为从左到右,整个逗号表达式的值是最右边表达式的值。 强制类型转换运算符的作用是将一个表达式或变量转换成所需类型,符号为“()”。例如 ,(int)a是将a转换为整型;(float)(a+b)是将a+b的结果转换为浮点数。
注意:在C430中,标识符的命名应该做到简洁明了、含义清晰,这样便于程序的阅读和维护。例
如,在比较最大值时,最好使用max来定义该标识符;在片内模块初始化函数部分,函数命名后面尽
量加上_init,如ADC12_init()表示ADC12模块初始化函数。
2.1 MSP430单片机C语言基础
2.关键字 关键字是一种具有特定含义的标识符,由于系统已经对这些标识符进行了定义,程序 就不能再次定义,需要加以保留。用户不能将关键字用作自己定义的标识符。 C语言中,关键字主要有以下3类。 ① 数据类型关键字:auto,char,const,double,enum,extern,float,int,long, register,sizeof,short,static,typedef,union,unsigned,void,volitile。 ② 程序控制关键字:break,case,continue,default,do,else,for,goto,if,return, switch,whlie。 ③ 预处理功能关键字:define,endif,elif,ifdef,ifndef,include,line,undef。
MSP430系列汇编指令集

Rn n=0~15
寻址方式 寄存器寻址 索引寻址 符号寻址 绝对寻址 间接寻址 间接自动增量 立即数寻址
Rs
源寄存器
Rd 目标寄存器
子 R11 6(R6) TON1 &TCDAT Tab(R6) R11 TON1 操 R10 à R11 M(2+R5) à M(6+R6) M(EDE) à M(TON1) M(MEM) à M(TCDAT) M(R10) à M(Tab+R6) M(R10) à R11, R10+2 #0AAH à M(TON1) 作
dst src, dst dst dst
dst dst dst 标号 标号 标号 标号 标号 标号 标号 标号 src, dst dst src
dst + C -> dst ( 十进制) src + dst + C -> dst ( 十进制) dst - 1 -> dst dst - 2 -> dst 禁止中断 使能中断 dst + 1 -> dst 目的操作数增 1 dst + 2 -> dst 目的操作数增 2 目的操作数求反 进位位被置时转移到标号语句 零位被置时转移到标号语句 N .xor. V = 0 时转移到标号语句 N .xor. V = 0 时转移到标号语句 无条件转移到标号语句 负位被置时转移到标号语句 进位位复位时转移到标号语句 零位复位时转移到标号语句 src -> dst 空操作 项目从堆栈弹出, SP + 2 -> SP SP – 2 -> SP , src -> @SP 从中断返回 TOS -> SR SP + 2 -> SP TOS -> PC SP + 2 -> SZP 从子程序返回 TOS -> SR SP + 2 -> SP 算术左移 带进位位左移 算术右移 带进位位右移 从目的操作数减去借位 置进位位 置负位 置零位 dst + .not. src + 1 -> dst dst + .not. src + C -> dst 交换字节 dst 位 7 -> 位 8...... 位 15 测试目的操作数
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
例:将地址为2000H和 2001H 的 两 内 存 单 元 内容相加,结果存在 地址2002H单元中。
……
var3 = var1 + var2; ……
data ends
Code segment Assume cs:code,ds:data
一一对应 机器语言程序
A0 00 20 02 06 01 20 A2 02 20 AL , var2
操作数
存储器 操作数
间 接 寻 址
寄存器寻址:寄存器的值就是操作数 直接寻址: 使用符号或数字直接给出操作数的地址 间接寻址: 寄存器中的值或含有寄存器的表达式的值 是操作数的地址 立即数寻址:使用符号(常量)或数字直接给出操作数
存储器操作数寻址方式
直接寻址: 指令中直接给出存储器操作数的地址 (常数或地址符号) 寄存器间接寻址 : 存储器操作数的地址=寄存器的值 寄存器相对寻址 : 存储器操作数的地址=寄存器的值+相对量 通常相对量是一个常数或常量 基址加变址寄存器 :存储器操作数的地址= (基址)寄存器的值+变址寄存器的值 相对基址加变址寄存器 :存储器操作数的地址=
#100 , R7 #0 , R8
#50 , array(R8) ;变址寻址 X(Rn) R8 R7 array_init
#0 , R6 #100 , R7 #array , R9
;???
@R9+ , R6 R7 accumulate
;采用间接增量寻址 方式可简化程序
MOV MOV MOV MOV MOV MOV MOV
R5 , R4 R5 , EDE(R4) R5 , EDE R5 , &EDE @R5 , R4 @R5+ , R4 #10h , R4
;R5 ;R5 ;R5 ;R5 ;(R5) ;(R5) ;10h
R4 (EDE+R4) (EDE) (EDE) R4 R4,R5=R5+1 or 2 R4
( expr ) : 地址为 expr 的内存单元(字节/字) 变址寻址/相对 Rn 寻址 符号寻址/相对 PC 寻址 存储器操作 绝对寻址/相对 SR(0) 寻址 数寻址方式 Rn 寄存器间接寻址 Rn 寄存器间接增量寻址 立即数寻址/PC寄存器间接增量寻址 Rn : n=4~15
不同寻址方式的主要用法
原则上,一条指令中允许组合任何有效的源操作数寻址方式 (7种)和目的操作数寻址方式(4种),但实际编程时, 不同的寻址方式有其主要的用途: 符号寻址:主要用于FLASH中的常量和RAM中的变量的寻址 绝对寻址:主要用于硬件外设寄存器和RAM中的变量的寻址 变址寻址:主要用于FLASH中的常量表和RAM中的数组的寻址 寄存器间接(增量)寻址:主要用于FLASH中的常量表和RAM中
……
按功能 指令分类
2) 操作数:指明参与操作的数据或数据所在的地方。
在汇编语言中需指明
操作数所在的地方
寻址方式
操作数能够放在何处?
计算机中哪些地方可以存放操作数? CPU如何使用不同的操作数?
地址总线 AB
CPU
寄存器0 寄存器1 …… 寄存器15 存 储 器 I/O 接 口
输 入 设 备
I/O 接 口
;0 ;4 ;8 ;C
1 5 9 D
2 6 A E
3 7 B F
R9 = 0 1 2 3 4 5 6 7 8 9 A B C D E F LED显示: 0 1 2 3 4 5 6 7 8 9 A B C D E F
举例:数组定义及其使用
…… array DS16 …… MOV MOV array_init: MOV INC DEC JNZ …… MOV MOV MOV accumulate: ADD DEC JNZ …… 100 ; 定义一个含有100个字类型数组元素的数组
相对寻址
X(Rn) 变址寻址 X(PC) 符号寻址 X(SR) 绝对寻址
与
寄存器间接寻址
@Rn @Rn+ @PC+ 立即数寻址
寄存器间接寻址与 X=0 的相对寻址具有相同的功能, 但寄存器间接寻址的指令中不需要 X, 因此寄存器间接寻址的指令长度更短。 因此,从功能上看,除了寄存器寻址方式外的其余 6 种寻 址方式都可以看成为相对寻址方式,其中寄存器的内容是 存储器操作数的地址的全部或一部分 ,相对寻址是寄存器 间接寻址方式的扩展。
MSP430 的 3 种指令格式
双操作数指令(Double Operand Instruction)
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
op-code
S-Reg
Ad B/W
As
D-Reg
单操作数指令(Single Operand Instruction)
15 14 13 12 11 10 9 8 7 6
第2章
MSP430微控制器概述
与寻址方式
第二节
MSP430 CPU的寻址方式
一、概述
1. 程序语言简介 2. 指令的基本构成
二、寻址方式
程序语言
高级语言程序
int example1( )
{ int var1,var2,var3;
汇编语言程序
data segment var1 db ? var2 db ? var3 db ?
输 出 设 备
数据总线 DB
控制总线 CB
操作数的来源
……
指令1
代 码 段
指令2 指令3 指令4
立即数 常数表
CPU I/O端口 操作数 I/O端口
……
常数1 常数2 ……
RAM 操作数
寄存器操作数
数 据 段
数据1 数据2 数据3 ……
操作数与寻址方式
寄存器 操作数
假定:I/O与存储器统一编址
寄存器寻址 直接寻址 寄存器间接寻址 寄存器相对寻址 基址加变址寄存器寻址 相对基址加变址寄存器寻址 立即数寻址
B/W
5
4
3
2
1
0
op-code
As/Ad
S/D-Reg
跳转指令(Jump Instruction)
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
op-code
C
10-Bit PC Offset
MSP430 寻址方式详解
寄存器寻址方式
ቤተ መጻሕፍቲ ባይዱ
变址寻址方式
(R5+2)
(R6+6)
code
data
R10
指针(地址)
R10 R11+0
data
R11+0
实验验证:R10自增操作何时进行?
提示: MOV @R10+, 100(R10)
读取存储器操作数 (R10); R10=R10+2; 将读取得到的数据写入(R10+100)中。 读取存储器操作数 (R10); 将读取得到的数据写入(R10+100)中; R10=R10+2
绝对寻址方式——
机器指令:SR(0)寄存器相对寻址 效果上:直接寻址方式
(EDE)
(TONI)
举例:MOV &EDE , &TONI
;EDE=0F016h ;TONI=01114h
code
y=TONI x=EDE
data
EDE
操作数的地址 EDE TONI
data
TONI
思考: 比较符号与绝对寻址方式相同点和不同点
Start: ……
MOV AL , var1 ADD …… MOV var3 , AL Code ends end start
}
区别?
为什么 要学汇编?
学习汇编语言的意义:
汇编语言程序反应机器运行的详细过程,通过学习汇编语 言程序,可以加深对计算机工作过程的理解;
在直接控制硬件和有严格时间要求的场合,使用汇编语言 比高级语言反而更容易。 汇编语言特点: 1.步骤更加细化,细化到CPU的基本操作(指令) 2.直接操作硬件(寄存器、内存、I/O端口)
2. 指令的基本构成
操作码
ADD MOV
操作数
src,dst src, dst
Start: ……
MOV &var1, R6
ADD &var2, R7 MOV R7, &var3
1) 操作码:指明CPU要执行什么样的 操作。是一条指令必不可少的部分, 在汇编语言中用助记符表示
数据传送 算术运算 逻辑运算 移位操作 控制转移 ……
任一操作数都有明确的寻址方式
既可作为源操作 数的寻址方式, 又可作为目的操 作数的寻址方式
只能作为源操作 数的寻址方式, 不能作为目的操 作数的寻址方式
X(Rn) X(PC) X(SR)
仅从As和 Ad 无法区分不同 的寻址方式
@Rn+ @PC+
由 As 和 S-Reg 共同决定源操作数的寻址方式 由 Ad 和 D-Reg 共同决定目的操作数的寻址方式
(基址)寄存器的值+变址寄存器的值+相对量
通常相对量是一个常数或常量
MSP430 操作数的来源示意图
立即数
代码 常数表 RAM 操作数
CPU 执行部件
R4 R5
RAM
数据与堆栈
寄存器 操作数
R15
PC SP SR
I/O端口 操作数
寄存器操作数
SFR操作数
存储器操作数
二、MSP430 CPU的 7 种寻址方式 以 MOV 指令为例: MOV
Rn (n=4~15) 寄存器相对寻址 X , Y 为相对量 通常为常数或常量
举例:MOV 2(R5) , 6(R6)