编辑: 戴静菡 | 2013-04-11 |
第二章 MSP430单片机基本实践 2.1 MSP430程序设计基础 MSP430单片机的程序设计可以使用汇编语言,也可以使用C语言,这一部分将讲述这 些内容.如果使用汇编语言,需要了解汇编机器指令;
如果使用C语言,需要了解C语言的 相关知识.无论汇编还是C语言,都需要掌握MSP430微处理器的结构,原理,接口等才可 以进行软件与硬件的设计.设计的基本过程可以用图2.1.1所示的流图来说明.在这一部分不 讲解接口方面的知识. 图2.1.1 项目设计开发简要流图 MSP430 的内核CPU 结构是按照精简指令集和高透明的宗旨来设计的,使用的指令有硬件 编写源代码 修改程序 硬件准备 结束 仿真调试 满意 修改硬件 软件不满意 硬件不满意 满意 作者 魏小龙 南航MSP430选修课 试用教材 第7页执行的内核指令(只有
27 条)和基于现有硬件结构的高效率的仿真指令.仿真指令使用内核 指令及芯片内额外配置的常数发生器CG1,CG2.在讲解指令系统之前首先分析MSP430与指令 系统相关的CPU结构与存储器系统. 2.1.1 MSP430的16位CPU MSP430 系列采用的是 冯-诺依曼 结构,ROM,RAM 在同一地址空间,使用一组地址数 据总线.中央处理单元采用了精简的,高透明的,高效率的正交设计,它包括一个
16 位的 ALU(算术逻辑运算单元),16个寄存器,一个指令控制单元,16个寄存器中有4个为特殊用 途,扮演重要角色,分别是:程序计数器,堆栈指针,状态寄存器,常数发生器.程序流程 通过程序计数器控制,而程序执行的现场状态体现在程序状态字中.在表2.1中对16个寄存 器作了简要说明. 表2.1 MSP430 CPU中的16个寄存器 简写 功能 R0 程序计数器PC,指示下一条将要执行的指令的地址 R1 堆栈指针SP,指向堆栈的栈顶 R2 状态寄存器SR/常数发生器CG1 R3 常数发生器CG2 R4 工作寄存器R4 …… …… R15 工作寄存器R15
1 程序计数器PC MSP430 的指令根据其操作数的多少,其指令长度分别为 1,2 或3字长.程序计数器指 示出下一条即将执行的指令的地址.因此程序计数器PC的内容总是偶数,指向偶字节地址. 其内容在调试程序时,可以通过寄存器窗口查看. 2.1.2 系统堆栈指针SP 系统堆栈是在系统调用子程序或进入中断服务程序时,保护程序计数器PC.而堆栈指针 SP 总是指向堆栈的顶部.系统在进行将数据压入堆栈操作时,总是先将堆栈指针SP 的值减 2,然后再将数据送到SP所指的RAM单元.将数据从堆栈中弹出正好相反:先将数据从SP所 指示的内存单元取出,再将SP的值加2.堆栈的操作有两种情况:隐式与显示.系统对堆栈 的操作为隐式,主要为自动保存PC的数值.在用户程序中也可对SP操作.下面举例说明. 图2.1(a)表示进行堆栈操作之前的RAM情况;
图2.1(b)表示执行PUSH #8H操作之后的 情况;
图2.1(c)表示执行POP R15之后的情况.在后面将会详细讲解. 地址 操作之前RAM内容 PUSH #08H POP R15 300H 211H SP 300H 0008H 300H 008H SP 2FEH 322H 2FEH 322H SP 2FEH 322H 2FCH 433H 2FCH 433H 2FCH 433H (a) (b) (c ) 图2.1 对堆栈的操作
2 状态寄存器SR 状态寄存器记录程序执行过程中的现场情况,在程序设计中有相当重要的地位.MSP430 作者 魏小龙 南航MSP430选修课 试用教材 第8页的状态寄存器为16位,目前只用到前9位,其结构如下: 15…9
8 7
6 5
4 3
2 1
0 保留 V SCG1 SCG0 OSCOff CPUOff GIE N Z C Bit0 C 进位标志 当运算结果产生进位时置位,否则复位. Bit1 Z 零标志 当运算结果为0时置位,否则复位. Bit2 N 负标志 当运算结果为负时置位,否则复位. Bit3 GIE 中断控制位 置位允许中断,复位禁止所有的中断.该位由中断复位,RETI 指令置位,也可以用指令改变. Bit4 CPUOff CPU 控制位 置位使 CPU 进入关闭模式,此时除了 RAM 内容,端口,寄存器 保持外,CPU 处于停止状态,可用所有允许的中断将 CPU 从此 状态唤醒. Bit5 OSCOff 晶振控制位 置位使晶体振荡器处于停止状态,CPU从此状态唤醒只有在GIE 置位的情况下由外部中断或NMI唤醒,要设置OSCOff=1必须同 时设置CPUOff=1. Bit6 SCG0 此位与位7一起控制系统时钟发生器的4种活动状态. Bit7 SCG1 此位与位6一起控制系统时钟发生器的4种活动状态. SCG1 SCG0 时钟发生器的状态