MSP430汇编指令集(中文)+详解带实例

合集下载

第3章MSP430指令系统

第3章MSP430指令系统

1
1 0 0 1 1 0 0 1 1 0
0
1 0 1 0 1 0 1 0 1 0
JEQ/JZ,JNE/JNZ,JC,JNC
JN,JGE,JL,JMP MOV ADD ADDC SUBC SUB CMP DADD BIT BIC
Double Operand Instruction
1
1 1
1
1 1
0
1 1
1
0 1
BIS
XOR AND
D15 D14 D13 D12
/Y0 /Y1 /Y2 /Y3 /Y4 /Y5 第1级 /Y6 指令 /Y7 译码器 /Y8 /Y9 /Y10 /Y11 /Y12 /Y13 /Y14 G /Y15
/Y0 /Y1 /Y2 /Y3 第2级 /Y4 指令 /Y5 译码器 /Y6 /G /Y7
Double Operand Instruction (12条指令)
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
op-code
0 0 1 1 0 0 0 1
S-Reg
MOV(.B) ADD (.B)
Ad B/W
As
D-Reg
src , dst src , dst
0
0 1 1 1 1 1
子程1子程2子程中断的返回地址cpu自动完成需要保护的重要数据自动编程主要用于保存和恢复保护返回地址1保护返回地址2保护返回地址2主程序返回地址1返回地址2调用1保护返回地址1返回1恢复返回地址1先进后出调用2保护返回地址2返回2恢复返回地址2恢复返回地址2恢复返回地址1sppush返回地址1返回地址1返回地址2sppush初始态态pop返回地址1sp返回地址2popsp返回地址1sp正确使用堆栈堆栈是一重要的内存区应正确使用堆栈

MSP430寄存器的中文解释,熟知这些写起程序来很方便

MSP430寄存器的中文解释,熟知这些写起程序来很方便

#define P5DIR_ sfrb P5DIR
#define P5SEL_ sfrb P5SEL
#define P6IN_ const sfrb P6IN #define P6OUT_ sfrb P6OUT
0x0034 /* P6 输入寄存器 */ = P6IN_; 0x0035 /* P6 输出寄存器*/ = P6OUT_; 0x0036 /* P6 方向选择寄存器*/ = P6DIR_; 0x0037 /* P6 功能选择寄存器*/ = P6SEL_;
#define P4DIR_ sfrb P4DIR
#define P4SEL_ sfrb P4SEL
/************************************************************ * DIGITAL I/O Port5/6 I/O口寄存器定义PORT5和6 无中断功能
************************************************************/
#define P5IN_ const sfrb P5IN #define P5OUT_ sfrb P5OUT
0x0030 /* P5 输入寄存器 */ = P5IN_; 0x0031 /* P5 输出寄存器*/ = P5OUT_; 0x0032 /* P5 方向选择寄存器*/ = P5DIR_; 0x0033 /* P5 功能选择寄存器*/ = P5SEL_;
#define MPY_
0x0130 /* 无符号乘法 */
sfrw
MPY
= MPY_; 0x0132 /* 有符号乘法*/ = MPYS_; 0x0134 /* 无符号乘加 */ = MAC_; 0x0136 /* 有符号乘加 */ = MACS_; 0x0138 /* 第二乘数 */ = OP2_; 0x013A /* 低6位结果寄存器 */ = RESLO_; 0x013C /* 高6位结果寄存器 */ = RESHI_; 0x013E /*结果扩展寄存器 */ = SUMEXT_;

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架构,具有高度的应用开发透明性。

MSP430F2XX中文手册(加了标签) 10.通用串口

MSP430F2XX中文手册(加了标签) 10.通用串口

MSP430F2系列16位超低功耗单片机模块原理第10章通用串口界面Universal Serial Interface 版本: 1.5日期: 2007.5.原文: TI MSP430x2xxfamily.pdf翻译: 陈安都湖南长沙-中南大学编辑: DC 微控技术论坛版主注:以下文章是翻译TI MSP430x2xxfamily.pdf 文件中的部分内容。

由于我们翻译水平有限,有整理过程中难免有所不足或错误;所以以下内容只供参考.一切以原文为准。

详情请密切留意微控技术论坛。

Page 1 of 15通用串行接口模块(USI)提供与硬件模块的SPI和I2C串行通信。

本章讨论这两种模式。

USI模块包含在MSP420X20XX系列中。

主题10.1 USI的介绍10.2 USI的使用10.3 USI的寄存器10.1 USI的介绍USI模块提供支持同步串行通信的基本功能。

一般地,一个8、16位移位寄存器能用来输出数据流,少许的几条指令就可以执行串行通信。

另外,USI包含的内置硬件可以模拟SPI和I2C通信。

USI模块还包括中断,可以进一步减少串行通信的通用程序并且保持MSP430的低功耗特性。

USI模块的特性包括:支持三线SPI模式支持I2C模式可变的数据长度在LPM4方式下不需要内部时钟MSB或LSB指令可选在I2C模式下能控制SCL打开、停止监测在主机模式下的仲裁丢失监测可编程的时钟发生器可选择的钟极性和相位控制Page 2 of 15表10-1展示了SPI模式下的USI模块Page 3 of 15表10-2展示了I2C模式下的USI模块10.2 USI的操作USI模块主要由移位寄存器和位计数器组成,通过逻辑控制来支持SPI和I2C 通信。

USI的移位寄存器为USISR,通过软件直接控制数据的移入和移出。

位计数器计算采样位的数目以及在USICNTX位写零时设置USI中断标志位Page 4 of 15USIIFG。

超详细msp430示例程序汇编

超详细msp430示例程序汇编

一、基础_实验【10个】1、入门试验:LED闪烁(1个)2、时钟实验:设置MCLK、ACLK、SMCLK(1个)3、低功耗实验:设置低功耗模式(1个)4、IO端口试验:IO端口寄存器设置(1个)5、定时器:看门狗定时器、TimerA寄存器设置(2个)6、比较器:比较器A寄存器(1个)7、Flash:flash读写(1个)8、异步通信:异步通信寄存器设置(1个)9、ADC:ADC12寄存器设置(1个)二、开发板模块简单程序【56个】1、LED流水灯实验(红、黄、绿)(1)LED1:检测开发板(2)LED2:普通IO控制闪烁(3)LED3:PWM信号控制闪烁2、蜂鸣器实验(1)蜂鸣器1:单频音(步进变音调)(2)蜂鸣器2:奏乐(祝你平安)3、数码管实验(1)数码管1(显示123456)(2)数码管2(动态显示0~F)(3)数码管3(流动光圈)(4)数码管4(来回光标)4、4×1独立按键实验(1)4×1键盘1:扫描数码管显示(2)4×1键盘2:中断数码管显示(3)4×1键盘3:控制LED(4)4×1键盘4:控制蜂鸣器5、4×4矩阵键盘实验(1)4×4键盘1:行列扫描数码管显示(2)4×4键盘2:行列扫描1602液晶显示(3)4×4键盘3:控制LED蜂鸣器6、1602液晶实验(1)1602液晶1:动态字符显示(2)1602液晶2:静态字符显示(3)1602液晶3:内部时钟显示7、3.3V-5V电平转换实验(1)电平转换1:输出5V方波(2)电平转换2:输出不同占空比的方波(3)电平转换3:MCLK,SMCLK,ACLK8、RS232接口实验(1)RS232接口1:MCU发送数据PC机显示(2)RS232接口2:按键控制MCU发送数据PC机显示(3)RS232接口3:PC机发送数据MCU液晶显示(4)RS232接口4:MCU回发接收到的PC机数据(5)RS232接口5:RS232控制蜂鸣器9、RS485接口实验(1)RS485接口1:发送程序(2)RS485接口2:接收程序10、USB接口实验(1)USB接口1:简单连接测试(2)USB接口2:USB接收数据(3)USB接口3:USB发送数据11、PS2接口实验(1)PS2接口1:PS2控制1602显示(2)PS2接口2:PS2控制数码管显示(3)PS2接口3:PS2控制LED和蜂鸣器12、12-Bit高精度温度传感器实验(1)温度传感器1:DS18B20在数码管显示(2)温度传感器2:DS18B20在液晶显示13、RTC实时时钟实验(1)实时时钟1:DS1302测试(2)实时时钟2:DS1302电子钟14、2k Bit EEPROM实验(1)EEPROM1:AT24C02测试(2)EEPROM2:读出数据通过串口在PC机显示15、12-Bit模数转换器(ADC)接口实验(1)模数转换器1:ADC在数码管显示(2)模数转换器2:ADC在1602液晶在显示(3)模数转换器3:ADC通过串口在PC机显示16、8-Bit数模转换器(DAC)实验(1)数模转换器1:DAC控制LED(2)数模转换器2:DAC输出电压,ADC采样转换并在液晶上显示17、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:综合演示18、射频模块CC1000实验(1)射频模块1:发送数据(2)射频模块2:接收数据19、ucos移植注:17、18程序随模块赠送三、开发板综合程序【30】1、键盘综合实验(1)4×4键盘+蜂鸣器+LED+数码管显示(2)4×4键盘+蜂鸣器+LED+1602液晶显示(3)4×4键盘+蜂鸣器+LED+PC机显示(4)PS2键盘+UART+PC机显示(5)PS2键盘+USB+PC机显示2、接口综合实验(1)USB UART(2)UART USB(3)RS232 RS485(4)RS485 RS2323、温度时间综合实验(1)DS18B20 + DS1302 + 数码管(2)DS18B20 + DS1302 + USB(3)DS18B20 + DS1302 + UART(4)DS18B20 + DS1302 + 16024、AD DA综合实验(1)ADC + 1602(2)ADC + UART(3)ADC + USB(4)DAC + LED + KEY(5)DAC + UART(6)DAC + USB(7)ADC + UART + DS1302(8)ADC + DAC + 1602 + KEY(9)ADC + DAC + UART + KEY5、其他综合实验(1)AT24C02高级应用(搜索,擦除,读出全部)(2)DS1302高级应用(内部RAM存取数据)6、12864液晶综合实验(1)汉字库(2)图形库7、3.2寸TFT触摸屏实验(1)静态图片(2)动画/***************************************************程序功能:BoardConfig.h 头文件---------------------------------------------------***************************************************/ typedef unsigned char uchar;typedef unsigned int uint;//控制位的宏定义#define Ctrl_Out P3DIR |= BIT3 + BIT6 + BIT7;#define Ctrl_0 P3OUT &= ~(BIT3 + BIT6 + BIT7) #define SRCLK_1 P3OUT |= BIT7#define SRCLK_0 P3OUT &= ~BIT7#define SER_1 P3OUT |= BIT6#define SER_0 P3OUT &= ~BIT6#define RCLK_1 P3OUT |= BIT3#define RCLK_0 P3OUT &= ~BIT3//板上资源配置函数void BoardConfig(uchar cmd){uchar i;Ctrl_Out;Ctrl_0;for(i = 0; i < 8; i++){SRCLK_0;if(cmd & 0x80) SER_1;else SER_0;SRCLK_1;cmd <<= 1;}RCLK_1;_NOP();RCLK_0;}/***************************************************程序功能:控制8个LED闪烁,用于测试下载功能是否正常---------------------------------------------------测试说明:观察LED闪烁***************************************************/#include <msp430x14x.h>//#include "BoardConfig.h"/****************主函数****************/void main(void){WDTCTL = WDTPW + WDTHOLD; //关闭看门狗// BoardConfig(0xf0); //关闭数码管和电平转换,打开流水灯CCTL0 = CCIE; //使能CCR0中断CCR0 = 2047; //设定周期0.5STACTL = TASSEL_1 + ID_3 + MC_1; //定时器A的时钟源选择ACLK,增计数模式P6DIR = 0xff; //设置P6口方向为输出P6OUT = 0xff;_EINT(); //使能全局中断LPM3; //CPU进入LPM3模式}/*******************************************函数名称:Timer_A功能:定时器A的中断服务函数参数:无返回值:无********************************************/#pragma vector = TIMERA0_VECTOR__interrupt void Timer_A (void){P6OUT ^= 0xff; //P2口输出取反}/***********************************************程序功能:实现流水灯以三种流动方式和四种流动速度的不同组合而进行点亮"流动"------------------------------------------------测试说明:观察流水灯流动顺序和速度的变化************************************************//***********************************************程序功能:实现流水灯以三种流动方式和四种流动速度的不同组合而进行点亮"流动"------------------------------------------------测试说明:观察流水灯流动顺序和速度的变化************************************************/#include <msp430x14x.h>#include "BoardConfig.h"uint i = 0,j = 0,dir = 0;uint flag = 0,speed = 0; //flag--灯光流动方式,speed--灯光流动速度/****************主函数****************/void main(void){WDTCTL = WDTPW + WDTHOLD; //关闭看门狗// BoardConfig(0xf0);CCTL0 = CCIE; //使能CCR0中断CCR0 = 50000;TACTL = TASSEL_2 + ID_3 + MC_1; //定时器A的时钟源选择SMCLK,8分频增计数模式P6DIR = 0xff; //设置P2口方向为输出P6OUT = 0xff;_EINT(); //使能全局中断LPM0; //CPU进入LPM0模式}/*******************************************函数名称:Timer_A功能:定时器A的中断服务函数,在这里通过标志控制流水灯的流动方向和流动速度参数:无返回值:无********************************************/#pragma vector = TIMERA0_VECTOR__interrupt void Timer_A (void){if(flag == 0){P6OUT = ~(0x80>>(i++)); //灯的点亮顺序D8 -> D1}else if(flag == 1){P6OUT = ~(0x01<<(i++)); //灯的点亮顺序D1 -> D8}else{if(dir) //灯的点亮顺序D8 -> D1,D1 -> D8,循环绕圈{P6OUT = ~(0x80>>(i++));}else{P6OUT = ~(0x01<<(i++));}}if(i == 8){i = 0;dir = ~dir;}j++;if(j == 40){i = 0;j = 0;flag++;if(flag == 4) flag = 0;switch(speed){case 0:TACTL &=~ (ID0 + ID1);TACTL |= ID_3;break;case 1:TACTL &=~ (ID0 + ID1);TACTL |= ID_2;break;case 2:TACTL &=~ (ID0 + ID1);TACTL |= ID_1;break;case 3:TACTL &=~ (ID0 + ID1);TACTL |= ID_0;break;default:break;}if(flag != 3) speed++;if(speed == 4) speed = 0;}}/*******************************************************程序功能:用从P2.3和P2.4输出的PWM波形驱动LED闪烁P2.3口输出方波的占空比为75%P2.4口输出方波的占空比为25%-------------------------------------------------------测试说明:观察LED的亮灭的时间长短用来连2.3到6.1口看*******************************************************/#include <msp430x14x.h>//#include "BoardConfig.h"void main(void){WDTCTL = WDTPW + WDTHOLD; // 关狗//BoardConfig(0xb0); // 关闭数码管和电平转换,打开流水灯P2DIR = 0xff; // P2端口设置为输出P2OUT = 0xff; // 关闭其他LEDP2SEL |= BIT3 + BIT4; // P2.3和P2.4连接内部模块CCR0 = 4096-1; // PWM周期为1SCCTL1 = OUTMOD_7; // CCR1 reset/setCCR1 = 3072; // CCR1 PWM duty cycleCCTL2 = OUTMOD_7; // CCR2 reset/setCCR2 = 1024; // CCR2 PWM duty cycleTACTL = TASSEL_1 + ID_3 + MC_1; // ACLK/8, up mode_BIS_SR(LPM3_bits); // Enter LPM3}//****************************************************************************** // MSP-FET430P140 Demo - Basic Clock, Output Buffered SMCLK, ACLK and MCLK//// Description: Output buffered MCLK, SMCLK and ACLK.// ACLK = LFXT1 = 32768, MCLK = DCO Max, SMCLK = XT2// //* XTAL's REQUIRED - NOT INSTALLED ON FET *//// //* Min Vcc required varies with MCLK frequency - refer to datasheet *//内部已经连好了的//// MSP430F149// -----------------// /|\| XIN|-// | | | 32k// --|RST XOUT|-// | |// | XT2IN|-// | | XTAL (455k - 8Mhz)// |RST XT2OUT|-// | |// | P5.4|-->MCLK = DCO Max// | P5.5|-->SMCLK = XT2// | P5.6|-->ACLK = 32kHz//// M. Buccini// Texas Instruments Inc.// Feb 2005// Built with IAR Embedded Workbench Version: 3.21A//******************************************************************************#include <msp430x14x.h>#include "BoardConfig.h"void main(void){BoardConfig(0xb8);WDTCTL = WDTPW +WDTHOLD; // Stop Watchdog Timer DCOCTL = DCO0 + DCO1 + DCO2; // Max DCOBCSCTL1 = RSEL0 + RSEL1 + RSEL2; // XT2on, max RSELBCSCTL2 |= SELS; // SMCLK = XT2P5DIR |= 0x70; // P5.6,5,4 outputsP5SEL |= 0x70; // P5.6,5,5 optionswhile(1){}}//****************************************************************************** // MSP-FET430P140 Demo - Basic Clock, LPM3 Using WDT ISR, 32kHz ACLK//// Description: This program operates MSP430 normally in LPM3, pulsing P3.4// at 4 second intervals. WDT ISR used to wake-up system. All I/O configured// as low outputs to eliminate floating inputs. Current consumption does// increase when LED is powered on P3.4. Demo for measuring LPM3 current.// ACLK= LFXT1/4= 32768/4, MCLK= SMCLK= default DCO// //* External watch crystal on XIN XOUT is required for ACLK *////暗久才亮一下和亮暗和时钟没关系啊// MSP430F149// ---------------// /|\| XIN|-// | | | 32kHz// --|RST XOUT|-// | |// | P3.5|-->LED//// Dasheng// LiTian Electronic Inc.// Feb 2008// Built with IAR Embedded Workbench Version: 3.42A//******************************************************************************#include <msp430x14x.h>#include "BoardConfig.h"void main(void){BoardConfig(0xb8);//BCSCTL1 |= DIVA_2; // ACLK/4WDTCTL = WDT_ADL Y_1000; // WDT 1s/4 interval timerIE1 |= WDTIE; // Enable WDT interruptP1DIR = 0xFF; // All P1.x outputsP1OUT = 0; // All P1.x resetP2DIR = 0xFF; // All P2.x outputsP2OUT = 0; // All P2.x resetP3DIR = 0xFF; // All P3.x outputsP3OUT = 0x30; // All P3.x resetP4DIR = 0xFF; // All P4.x outputsP4OUT = 0; // All P4.x resetP5DIR = 0xFF; // All P5.x outputsP5OUT = 0; // All P5.x resetP6DIR = 0xFF; // All P6.x outputsP6OUT = 0x80; // All P6.x resetwhile(1){uint i;_BIS_SR(LPM3_bits + GIE); // Enter LPM3P3OUT &= ~BIT5; // Set P3.5 LED on亮for (i = 18000; i>0; i--); // DelayP3OUT |= BIT5; // Clear P3.5 LED off暗}}#pragma vector=WDT_VECTOR__interrupt void watchdog_timer (void){_BIC_SR_IRQ(LPM3_bits); // Clear LPM3 bits from 0(SR)}//******************************************************************************* // MSP-FET430P140 Demo - Software Toggle P3.4//// Description: Toggle P3.4 by xor'ing P3.4 inside of a software loop.// ACLK= n/a, MCLK= SMCLK= default DCO ~800k//// MSP430F149// -----------------// /|\| XIN|-// | | |// --|RST XOUT|-// | |// | P3.4|-->LED//// Dasheng// LiTian Electronic Inc.// Feb 2008// Built with IAR Embedded Workbench Version: 3.42A//******************************************************************************#include <msp430x14x.h>#include "BoardConfig.h"void main(void){BoardConfig(0xb8);WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timerP3DIR |= BIT4; // Set P3.4 to output directionfor (;;){volatile unsigned int i;P3OUT ^= BIT4; // Toggle P3.4 using exclusive-ORi = 50000; // Delaydo (i--);while (i != 0);}}//****************************************************************************** // MSP-FET430P140 Demo - WDT, Toggle P3.4, Interval Overflow ISR, DCO SMCLK//P3.4使用软件WDT中断时间。

MSP430指令集

MSP430指令集

1.数据传送指令MOV 源操作数移至目的操作数MOV.B scr,dst /MOV[.W] scr,dst CLR 清除目的操作数CLR.B dst /CLR[.W] dstPOP 字从堆栈弹出至目的操作数POP.B dst /POP[.W] dstPUSH 将字压进堆栈PUSH.B src /PUSH[.W] src SWPB 交换字节SWPB dstSXT 扩展符号SXT dst2.数据运算指令ADC 将进位位加至目的操作数ADC.B dst /ADC dst或ADC[.W] dst ADD 源操作数加至目的操作数ADD src,dst /ADD[.W] src,dst ADDC 原操作数和进位加至目的操作数ADDC.B src,dst /ADDC[.W] src,dst DADC 加上十进制的进位位DADC.B dst /DADC [.W] src,dst DADD 将十进制的进位位和源操作数加至目的操作数DADD.B src,dst /DADD[.W] src,dst INC 目的操作数加1 INC.B dst /INC[.W] dstINCD 目的操作数加2 INCD.B dst /INCD[.W] dstSUB 从目的操作数中减去源操作数SUB src,dst /SUB[.W] src,dst SUBC 从目的操作数中减去源操作数和借位/非进位SUBC src,dst /SUBC[.W] src,dst DEC 目的操作数减1 DEC.B dst /DEC[.W] dstDECD 目的操作数减2 DECD.B dst /DECD[.W] dstSBC 从目的操作数减去借位SBC.B dst /SBC[.W] dstCMP 比较源操作数和目的操作数CMP.B src,dst /CMP[.W] src,dst TST 测试目的操作数TST.B dst /TST[.W] dst3.逻辑运算和位操作类指令AND 源操作数和目的操作数与AND.B src,dst /AND[.W] src,dstBIC清除目的操作数的各位BIC.B src,dst /BIC [.W] src,dstBIS 设置目的操作数的各位BIS.B src,dst /BIS[.W] src,dstBIT 测试目的操作数的各位BIT.B src,dst /BIT[.W] src,dstXOR 源操作数和目的操作数异或XOR.B src,dst /XOR[.W] src,dstINV 目的操作数求反INV.B dst /INV[.W] dstRLA 算数左移RLA.B dst /RLA[.W] dstRLC 通过进位位左移RLC.B dst /RLC[.W] dstRRA 算数右移RRA.B dst /RRA[.W] dstRRC 通过进位位右移RRC.B dst /RRC[.W] dstCLRC 清除进位位CLRCCLRN 清除负位CLRNCLRZ 清除零位CLRZSETC 设置进位位SETCSETN 设置负位SETNSETZ 设置零位SETZDINT 禁止(一般)中断DINTEINT 使能(一般)中断EINT4.跳转与程序流程的控制类指令BR 转移至目的操作数BR dstCALL 调用子程序CALL dstJC/JHS JC 设置进位位时程序跳转JC 标号JHS 大于和等于时程序跳转JHS 标号JEQ/JZ JEQ 等于时程序跳转JEQ 标号JZ 为零时程序跳转JZ标号JGE 大于等于时程序跳转JGE 标号JL 小于时程序跳转JL 标号JMP 程序无条件跳转JMP 标号JN 为负时程序跳转JN标号JNC/JLO JNC 进位未设置时程序跳转JNC 标号JLO 小于时程序跳转JLO 标号JNE/JNZ JNE 不等时程序跳转JNE 标号JNZ 不为零时程序跳转JNZ 标号RET 从子程序返回RETRETI 从中断返回RETINOP 空操作NOP。

MSP430汇编指令集

MSP430汇编指令集

/ 2001-08-06版权所有©2001 广州单片机网站1MSP430 系列汇编指令集简介MSP430 的内核CPU 结构是按照精简指令集和高透明指令的宗旨来设计的使用的指令有硬件执行的内核指令和基于现有硬件结构的高效率的仿真指令仿真指令使用内核指令及芯片额外配置的常数发生器CG1 CG2MSP430 指令的寻址方式包括立即寻址索引寻址符号寻址和绝对寻址这四种方式均可用于源操作数而索引符号和绝对寻址方式只可用于目的操作数源操作数的指令集需占用代码存储器中的1~3个字寻址方式寻址方式源操作数目标操作数语法As Ad说明寄存器寻址Yes Yes MOV Rs, Rd 00 0 寄存器内容是操作数索引寻址Yes Yes MOV x(Rn), y(Rm) 01 1 (Rn+x)指向操作数x 储存在下一个字中符号寻址Yes Yes MOV EDE, TON1 01 1 (PC+x)指向操作数x 储存在下一个字中绝对寻址Yes Yes MOV &MEM, &TCDAT 01 1 跟随在指令后的字包含绝对地址间接寻址Yes MOV @Rn, y(Rm) 10 Rn 用作指向操作数的指针间接自动增量Yes MOV @Rn+, Rm 11 Rn 用作指向操作数的指针,其后Rn 被增量立即数寻址Yes MOV #x, TON1 11 跟随在指令后的字包含立即数x 使用间接自动增量模式@PC+Rn n=0~15 Rs 源寄存器Rd 目标寄存器寻址方式例子操作寄存器寻址MOV R10, R11 R10 → R11索引寻址MOV 2(R5), 6(R6) M(2+R5) → M(6+R6)符号寻址MOV EDE, TON1 M(EDE) → M(TON1)绝对寻址MOV &MEM, &TCDAT M(MEM) → M(TCDAT)间接寻址MOV @R10, Tab(R6) M(R10) → M(Tab+R6)间接自动增量MOV @R10+, R11 M(R10) → R11, R10+2 →R10立即数寻址MOV #0AAH, TON1 #0AAH → M(TON1)指令概述共51 条指令状态位操作码操作V N Z CADC[.W]; ADC.B dst dst + C -> dst * * * *ADD[.W]; ADD.B src, dst src + dst -> dst * * * *ADDC[.W]; ADDC.B src, dst src + dst + C -> dst * * * *AND[.W]; AND.B src, dst src .and. dst -> dst 0 * * *BIC[.W]; BIC.B src, dst .not.src .and. dst -> dst - - - -BIS[.W]; BIS.B src, dst src .or. dst -> dst - - - -BIT[.W]; BIT.B src, dst src .and. dst 0 * * *BR dst 转移到- - - -CALL dst PC + 2 ->堆栈, dst -> PC - - - -CLR[.W];CLR.B dst 清除目的操作数- - - -CLRC 清除进位位- - - 0CLRN 清除负位- 0 - -CLRZ 清除零位- - 0 -CMP[.W];CMP.B dst dst - src * * * */ 2001-08-06版权所有©2001 广州单片机网站2DADC[.W];DADC.B dst dst + C -> dst (十进制) * * * *DADD[.W];DADD.B src, dst src + dst + C -> dst (十进制) * * * * DEC[.W];DEC.B dst dst - 1 -> dst * * * *DECD[.W];DECD.B dst dst - 2 -> dst * * * *DINT 禁止中断- - - -EINT 使能中断- - - -INC[.W];INC.B dst dst + 1 -> dst 目的操作数增1 * * * * INCD[.W];INCD.B dst dst + 2 -> dst 目的操作数增2 * * * * INV[.W];INV.B dst 目的操作数求反* * * *JC/JHS 标号进位位被置时转移到标号语句- - - -JEQ/JZ 标号零位被置时转移到标号语句- - - -JGE 标号N .xor. V = 0 时转移到标号语句- - - -JL 标号N .xor. V = 0 时转移到标号语句- - - -JMP 标号无条件转移到标号语句- - - -JN 标号负位被置时转移到标号语句- - - -JNC/JLO 标号进位位复位时转移到标号语句- - - -JNE/JNZ 标号零位复位时转移到标号语句- - - -MOV[.W];MOV.B src, dst src -> dst - - - -NOP 空操作- - - -POP[.W];POP.B dst 项目从堆栈弹出, SP + 2 -> SP - - - - PUSH[.W];PUSH.B src SP – 2 -> SP , src -> @SP - - - -RETI 从中断返回TOS -> SR SP + 2 -> SPTOS -> PC SP + 2 -> SZP - - - -RET 从子程序返回TOS -> SR SP + 2 -> SP - - - -RLA[.W];RLA.B dst 算术左移* * * *RLC[.W];RLC.B dst 带进位位左移* * * *RRA[.W];RRA.B dst 算术右移0 * * *RRC[.W];RRC.B dst 带进位位右移* * * *SBC[.W];SBC.B dst 从目的操作数减去借位* * * *SETC 置进位位- - - 1SETN 置负位- 1 - -SETZ 置零位- - 1 -SUB[.W];SUB.B src, dst dst + .not. src + 1 -> dst * * * *SUBC[.W];SUBC.B src, dst dst + .not. src + C -> dst * * * *SWAP dst 交换字节- - - -SXT dst dst 位7 -> 位8......位15 0 * * *TST[.W];TST.B dst 测试目的操作数0 * * 1XOR[.W];XOR.B src, dst src .xor. dst -> dst * * * *注状态位中* 表示影响- 表示不影响0 表示清零1 表示置位指令格式双操作数指令由4 个域组成共有16 位代码● 操作码域 4bit 操作码/ 2001-08-06版权所有 2001 广州单片机网站3● 源域 6bit 源寄存器 + As (4 位寄存器数0~15 + 2 个寻址位)● 字节操作识别符 1bit B/W B/W=1 以字节形式执行B/W=0 以字形式执行● 目的域 5bit 目的寄存器 + Ad (4 位寄存器数0~15 + 1 个寻址位)15 12 11 8 7 6 5 4 3 0操作码源寄存器Ad B/W As 目的寄存器单操作数指令由2 个域组成共有16 位代码● 操作码域 9bit 操作码● 字节操作识别符 1bit B/W (B/W=1 以字节形式执行B/W=0 以字形式执行● 目的域 6bit 目的寄存器 + Ad (4 位寄存器数0~15 + 1 个寻址位)15 12 7 6 5 4 3 00 0 0 1 x x x x x x B/W Ad 目的寄存器条件转移和无条件转移指令由2 个域组成共有16 位代码● 操作码域 6bit● 转移偏转域 10bit B/W (B/W=1 以字节形式执行B/W=0 以字形式执行15 13 12 10 9 00 0 1 x x x x x x x x x x x x x操作码转移码符号偏移条件转移使指令可转移到相对于当前地址范围在–512 ~ +512 字之间的地址指令集说明( 51 条指令以字母为序)ADC[.W] 将进位加至目的操作数语法ADC dst 或ADC.W dst操作dst + C -> dst仿真ADDC #0.dst说明进位C 加至目的操作数操作数以前的内容丢失状态位N 结果为负时置位为正时复位Z 结果为零时置位其它情况时复位C dst 从0FFFFH 增至0000 时置位其它情况复位V 发生算术溢出时置位其它情况时复位方式位OscOff CPUOff 和GIE 不受影响例子R13 指向的16 位数值加到R12 指向的32 位数值ADD @R13, 0(R12) ;加LSDsADC 2(R12) ;将进位加至MSDADC.B 将进位加至目的操作数语法ADC.B dst操作dst + C -> dst仿真ADDC.B #0.dst说明进位C 加至目的操作数操作数以前的内容丢失状态位N 结果为负时置位为正时复位Z 结果为零时置位其它情况时复位C dst 从0FFFFH 增至0000 时置位其它情况复位V 发生算术溢出时置位其它情况时复位/ 2001-08-06版权所有 2001 广州单片机网站4方式位OscOff CPUOff 和GIE 不受影响例子R13 指向的8 位数值加到R12 指向的16 位数值ADD.B @R13, 0(R12) ;加LSDsADC.B 1(R12) ;将进位加至MSDADD[.W] 源操作数加至目的操作数语法ADD src, dst 或ADD.W src, dst操作src + dst -> dst说明源操作数加至目的操作数源操作数不受影响目的操作数以前的内容丢失状态位N 结果为负时置位为正时复位Z 结果为零时置位其它情况时复位C 结果产生进位时置位否则复位V 发生算术溢出时置位其它情况时复位方式位OscOff CPUOff 和GIE 不受影响例子R5 加上10 由一个进位使程序转移到TONIADD #10, R5 ;JC TONI ;产生进位...... ;无进位ADD.B 源操作数加至目的操作数语法ADD.B src, dst操作src + dst -> dst说明源操作数加至目的操作数源操作数不受影响目的操作数以前的内容丢失状态位N 结果为负时置位为正时复位Z 结果为零时置位其它情况时复位C 结果产生进位时置位否则复位V 发生算术溢出时置位其它情况时复位方式位OscOff CPUOff 和GIE 不受影响例子R5 加上10 由一个进位使程序转移到TONIADD #10, R5 ;将近10 加至R5 的低位字节JC TONI ;若(R5)>=246[0AH + 0F6H] 则产生进位...... ;无进位ADDC[.W] 源操作数加至目的操作数语法ADDC src, dst 或ADDC.W src, dst操作src + dst + C -> dst说明源操作数和进位C 加至目的操作数源操作数不受影响目的操作数以前的内容丢失状态位N 结果为负时置位为正时复位Z 结果为零时置位其它情况时复位C 结果的MSB产生进位时置位否则复位V 发生算术溢出时置位其它情况时复位方式位OscOff CPUOff 和GIE 不受影响例子R13 指向的32 位数值加至R13 中的指针之上11 个字(20/2 +2/2)的32 位计数器ADD @R13+, 20(R13) ;无进位加LSDsADDC @R13+, 20(R13) ;带进位加MSDs...... ;ADDC.B 源操作数加至目的操作数语法ADDC.B src, dst操作src + dst + C -> dst说明源操作数和进位C 加至目的操作数源操作数不受影响目的操作数以前的内容丢失/ 2001-08-06版权所有 2001 广州单片机网站5状态位N 结果为负时置位为正时复位Z 结果为零时置位其它情况时复位C 结果的MSB产生进位时置位否则复位V 发生算术溢出时置位其它情况时复位方式位OscOff CPUOff 和GIE 不受影响例子R13 指向的24 位数值加至R13 中的指针之上11 个字的24 位计数器ADD.B @R13+, 10(R13) ;无进位加LSDsADDC.B @R13+, 10(R13) ;带进位加中间位ADDC.B @R13+, 10(R13) ;带进位加MSDs...... ;AND.[W] 源操作数和目的操作数与语法AND src, dst 或AND.W src, dst操作src .AND. dst -> dst说明源操作数和目的操作数逻辑与结果放入目的操作状态位N 结果为MSB为1 时置位为0 时复位Z 结果为零时置位其它情况时复位C 结果不为0 时置位其它情况时复位(= .NOT. Zero)V 复位方式位OscOff CPUOff 和GIE 不受影响例子R5 中被置的位用作TOM 寻址字的一个标志(#0AA55H) 如果结果为0 程序转到TON1 处MOV #0AA55H, R5 ;将标志装入R5 寄存器AND R5, TOM ;TOM 用R5 寻址标志字JZ TON1 ;...... ;结果为非0;或AND #0AA55H, TOMJZ TON1AND.B 源操作数和目的操作数与语法AND.B src, dst操作src .AND. dst -> dst说明源操作数和目的操作数逻辑与结果放入目的操作状态位N 结果为MSB为1 时置位为0 时复位Z 结果为零时置位其它情况时复位C 结果不为0 时置位其它情况时复位(= .NOT. Zero)V 复位方式位OscOff CPUOff 和GIE 不受影响例子标志位#0A5H 和低位字节的TOM 逻辑与如果结果为0 程序转移到标号TON1 处AND.B #0A5H, TOM ; 用R5 标记低位字节TOMJZ TON1 ;...... ;结果为非0BIC[.W] 清0 目的操作数的各位语法BIC src, dst 或BIC.W src, dst操作.NOT. src .AND. dst -> dst说明求反后的源操作数和目的操作数逻辑与结果放入目的操作源操作数不变状态位N 不影响Z 不影响C 不影响/ 2001-08-06版权所有 2001 广州单片机网站6V 不影响方式位OscOff CPUOff 和GIE 不受影响例子RAM 字LEO 的6 个MSBs 被清0BIC #0FC00H, LEO ; 清0MEM LEO 中的6 个MSBsBIC.B 清0 目的操作数的各位语法BIC.B src, dst操作.NOT. src .AND. dst -> dst说明求反后的源操作数和目的操作数逻辑与结果放入目的操作源操作数不变状态位N 不影响Z 不影响C 不影响V 不影响方式位OscOff CPUOff 和GIE 不受影响例子(1) RAM 字LEO 的5 个MSBs 被清0BIC.B #0F8H, LEO ; 清0 RAM LEO 中的5 个MSBs(2) 清0 端口引脚P0 和P1P0OUT .equ 011H ;定义端口地址P0 .equ 01HP1 .equ 02HBIC.B #P0+P1, $P0OUT ;置P0 和P1 为低电平BIS[.W] 设置目的操作数的各位语法BIS src, dst 或BIS.W src, dst操作src .OR. dst -> dst说明源操作数和目的操作数逻辑或结果放入目的操作源操作数不变状态位N 不影响Z 不影响C 不影响V 不影响方式位OscOff CPUOff 和GIE 不受影响例子1 RAM 字TOM 的6 个MSBs 被置位BIS #003FH, TOM ; 设置RAM 区域TOM 中的6 个LSBs2 启动一个A/D 转换器ASOC .equ 1 ;开始转换位ACTL .equ 114H ;ADC 控制寄存器BIS #ASOC, &ACTL ;启动A/D 转换BIS.B 设置目的操作数的各位语法BIS.B src, dst操作src .OR. dst -> dst说明源操作数和目的操作数逻辑或结果放入目的操作源操作数不变状态位N 不影响Z 不影响C 不影响V 不影响方式位OscOff CPUOff 和GIE 不受影响例子1 RAM 字TOM 的3 个MSBs 被置位BIS.B #0E0H, TOM ; 设置RAM 区域TOM 中的3 个MSBs(2) 设置端口引脚P0 和P1 为高电平/ 2001-08-06版权所有 2001 广州单片机网站7P0OUT .equ 011H ;定义端口地址P0 .equ 01HP1 .equ 02HBIS.B #P0+P1, $P0OUT ;置P0 和P1 为高电平BIT[.W] 测试目的操作数的各位语法BIT src, dst 或BIT.W src, dst操作src .AND. dst -> dst说明源操作数和目的操作数逻辑与其结果只影响状态位目的操作数和源操作数不变状态位N 结果为MSB为1 时置位为0 时复位Z 结果为零时置位其它情况时复位C 结果不为0 时置位其它情况时复位(= .NOT. Zero)V 复位方式位OscOff CPUOff 和GIE 不受影响例子1 如果R8 中的位9 被置位程序转移到标号语句TOM 处BIT #0200H, R8 ; R8 的位9 是否被置JNZ TOM ;是转换到TOM2 确定哪一个A/D 通道由MUX 配置ACTL .equ 114H ;ADC 控制寄存器BIT #4, &ACTL ;通道0 是否被选择JNZ END ;是则程序转移到ENDBIT.B 测试目的操作数的各位语法BIT.B src, dst操作src .AND. dst -> dst说明源操作数和目的操作数逻辑与其结果只影响状态位目的操作数和源操作数不变状态位N 结果为MSB为1 时置位为0 时复位Z 结果为零时置位其它情况时复位C 结果不为0 时置位其它情况时复位(= .NOT. Zero)V 复位方式位OscOff CPUOff 和GIE 不受影响例子如果R8 中的位3 被置位程序转移到标号语句TOM 处BIT.B #8H, R8 ; R8 的位3 是否被置JC TOM ;是转换到TOM2 确定哪一个A/D 通道由MUX 配置ACTL .equ 114H ;ADC 控制寄存器BIT #4, &ACTL ;通道0 是否被选择JNZ END ;是则程序转移到ENDBR, BRANCH 转换到目的操作数语法BR dst操作dst -> PC仿真MOV dst, PC说明无条件转移到64K 地址空间的任一地址处可使用所有的源寻址方式转换指令是一个字指令状态位不影响状态位方式位OscOff CPUOff 和GIE 不受影响例子所有寻址方式示例BR #EXEC ;转换到标号EXEC 或直接转换例#0A4H;内核指令MOV @PC+, PCBR EXEC ;转换到标号EXEC 包含的地址/ 2001-08-06版权所有 2001 广州单片机网站8;内核指令MOV x(PC), PC 间接寻址BR &EXEC ;转换到绝对地址包含的地址;内核指令MOV x(0), PC 间接寻址BR R5 ;转换到R5 包含的地址;内核指令MOV R5, PC 用R5 间接寻址BR @R5 ;转换到R5 指向的字的包含的地址;内核指令MOV @R5, PC 用R5 间接寻址BR @R5+ ;转换到R5 指向的字的包含的地址R5 中的指针加1;内核指令MOV @R5, PC 用R5 间接寻址R5 增1BR x(R5) ;转换到R5+1 指向的地址包含的地址例从x 开始的地址表;x 可以是一个地址或一个标号;内核指令MOV x(R5), PC 用R5+x 间接寻址CALL 调用子程序语法CALL dst操作dst -> tmpSP – 2 -> SPPC -> @SP 将PC 更新至TOStmp -> PC 将dst 保存至PC说明调用64K 地址空间中任一地址处的子程序可使用所有的寻址方式返回地址(后续指令的地址)储存在堆栈中调用指令是一个字指令状态位不影响状态位例子所有寻址方式示例CALL #EXEC ;调用标号EXEC 或直接调用例#0A4H; SP – 2 -> SP, PC + 2 -> @SP, @PC+ -> PCCALL EXEC ;调用EXEC 包含的地址; SP – 2 -> SP, PC + 2 -> @SP, x(PC)+ -> PC;间接寻址CALL &EXEC ;调用绝对地址EXEC 中包含的地址; SP – 2 -> SP, PC + 2 -> @SP, x(PC)+ -> PC;间接寻址CALL R5 ;调用R5 包含的地址; SP – 2 -> SP, PC + 2 -> @SP, R5 -> PC;用R5 间接寻址CALL @R5 ;调用R5 指向的字的包含的地址; SP – 2 -> SP, PC + 2 -> @SP, @R5 -> PC;用R5 间接寻址CALL @R5+ ;调用 R5 指向的字的包含的地址R5 中的指针加1; SP – 2 -> SP, PC + 2 -> @SP, @R5 -> PC;用R5 间接寻址然后R5 自动加1CALL x(R5) ;调用R5+1 指向的地址包含的地址例从x 开始的地址表; SP – 2 -> SP, PC + 2 -> @SP, @R5 -> PC;用R5+x 间接寻址CLR[.W] 清除目的操作数语法CLR dst 或CLR.W dst操作0 -> dst仿真MOV #0, dst说明清除目的操作数/ 2001-08-06版权所有 2001 广州单片机网站9状态位不影响状态位例子(1) RAM 字TONI 被清除CLR TONI ;0 -> TONI(2) 寄存器R5 被清除CLR R5CLR.B 清除目的操作数语法CLR.B dst操作0 -> dst仿真MOV.B #0, dst说明清除目的操作数状态位不影响状态位例子RAM 字TONI 被清除CLR.B TONI ;0 -> TONICLRC 清除目的操作数语法CLRC操作0 -> C仿真BIC #1, SR说明进位位被清零清除进位位指令是一个字指令状态位N 不影响Z 不影响C 清零V 不影响方式位OscOff CPUOff 和GIE 不受影响例子R13 指向的16 位十进制数值加至R12 指向的32 位数值CLRC ;C = 0DADD @R13, 0(R12) ;16 位数值加至32 位数值的低位字DADC 2(R12) ;进位加至32 位数值的高位字CLRN 清除负位语法CLRN操作0 -> N 或 ( .NOT. src .AND. dst -> dst )仿真BIC #4, SR说明常数#04H 求反后(0FFFBH)和目的操作数逻辑与结果放入目的操作数清除负位指令是一个字指令状态位N 复位至 0Z 不影响C 不影响V 不影响方式位OscOff CPUOff 和GIE 不受影响例子状态寄存器中的负位被清零这样可以避免用负数调用子程序时的特殊处理CLRN ;CALL SUBR......SUBR: JN SUBRET ;如果输入为负无操作并返回......SUBRET: RETCLRZ 清除零位语法CLRZ/ 2001-08-06版权所有2001 广州单片机网站10操作0 -> Z 或( .NOT. src .AND. dst -> dst )仿真BIC #2, SR说明常数#02H 求反后(0FFFDH)和目的操作数逻辑与结果放入目的操作数清除负位指令是一个字指令状态位N 不影响Z 复位至0C 不影响V 不影响方式位OscOff CPUOff 和GIE 不受影响例子状态寄存器中的零位被清零CLRZ ;CMP[.W] 比较源操作数和目的操作数语法CMP src, dst 或CMP.W src, dst操作dst + .NOT. src + 1 或dst - src说明从目的操作数中减去源操作数方法是将源操作数求反再加1 源操作数和目的操作数不受影响不保存结果只影响状态位状态位N 结果为负时置位为正时复位(src >= dst )Z 结果为零时置位其他情况时复位(src = dst )C 结果为MSB产生进位时置位否则复位V 发生算术溢出时置位其他情况时复位方式位OscOff CPUOff 和GIE 不受影响例子(1) 比较R5 和R6 如果相等程序继续从标号EQUAL 处运行CMP R5, R6 ;R5 = R6 ?JEQ EQUAL ;是程序跳转(2) 比较两个RAM 块如果不等程序转移到标号ERRORMOV #NUM, R5 ;被比较的字数L$1: CMP &BLOCK1, &BLOCK2 ;两个字相等吗JNZ ERROR ;不等则转移到ERRORDEC R5 ;被比较字数减1JNZ L$1 ;下一次比较CMP.B 比较源操作数和目的操作数语法CMP.B src, dst操作dst + .NOT. src + 1 或dst - src说明从目的操作数中减去源操作数方法是将源操作数求反再加1 源操作数和目的操作数不受影响不保存结果只影响状态位状态位N 结果为负时置位为正时复位(src >= dst )Z 结果为零时置位其他情况时复位(src = dst )C 结果为MSB产生进位时置位否则复位V 发生算术溢出时置位其他情况时复位方式位OscOff CPUOff 和GIE 不受影响例子(1) 比较EDE 和TONI 寻址的RAM 字节如果相等程序继续从标号EQUAL 处运行CMP.B EDE, TONI ;MEM(EDE) = MEM(TONI) ?JEQ EQUAL ;是程序跳转(2) 检查连至端口引脚P0 和P1 的两个键如果按下键1 程序转移到标号MENU1 如果按下键2 程序转移到标号MENU2P0IN .EQU 010HKEY1 .EQU 01H/ 2001-08-06版权所有2001 广州单片机网站11KEY2 .EQU 02HCMP.B #KEY1, &P0INJEQ MENU1CMP.B #KEY2, &P0INJEQ MENU2DADC[.W] 加上十进制的进位位语法DADC dst 或DADC.W dst操作dst + C -> dst (十进制)仿真DADD #0, dst说明进位位C 作为十进制加至目的操作数状态位N MSB为1 时置位Z dst 为零时置位其他情况时复位C 目的操作数从9999 增至时置位其他情况时复位V 不确定方式位OscOff CPUOff 和GIE 不受影响例子R5 中的4 位十进制数加至R8 指向的8 位十进制数CLRC ;复位进位位DADD R5, 0(R8) ;加LSDs + CDADC 2(R8) ;将进位位加至MSDsDADC.B 加上十进制的进位位语法DADC.B dst操作dst + C -> dst (十进制)仿真DADD.B #0, dst说明进位位C 作为十进制加至目的操作数状态位N MSB为1 时置位Z dst 为零时置位其他情况时复位C 目的操作数从9999 增至时置位其他情况时复位V 不确定方式位OscOff CPUOff 和GIE 不受影响例子R5 中的2 位十进制数加至R8 指向的4 位十进制数CLRC ;复位进位位DADD.B R5, 0(R8) ;加LSDs + CDADC.B 1(R8) ;将进位位加至MSDsDADD[.W] 将十进制的进位位和源操作数加至目的操作数语法DADD src, dst 或DADD.W src, dst操作src + dst + C -> dst (十进制)说明源操作数和目的操作数被当作4 个带有正符号的二-十进制BCD 数十进制的源操作数和进位C 被加至目的操作数源操作数不受影响目的操作数以前的内容丢失些结果对于非二- 十进制数是不确定的状态位N MSB为1 时置位其他情况时复位Z 结果为零时置位其他情况时复位C 结果大于9999 增至时置位V 不确定方式位OscOff CPUOff 和GIE 不受影响例子R5 和R6 中的8 位二-十进制数加至R3 和R4 中的8 位二-十进制数(R3 和R4 含有MSDs)CLRC ;清进位位DADD R5, R3 ;加LSDs/ 2001-08-06版权所有2001 广州单片机网站12DADD R6, R4 ;带进位位加MSDsJC OVERFLOW ;若产生进位转移至错误处理子程序DADD.B 将十进制的进位位和源操作数加至目的操作数语法DADD.B src, dst操作src + dst + C -> dst (十进制)说明源操作数和目的操作数被当作4 个带有正符号的二-十进制BCD 数十进制的源操作数和进位C 被加至目的操作数源操作数不受影响目的操作数以前的内容丢失些结果对于非二- 十进制数是不确定的状态位N MSB为1 时置位其他情况时复位Z 结果为零时置位其他情况时复位C 结果大于9999 增至时置位V 不确定方式位OscOff CPUOff 和GIE 不受影响例子RAMbyte CNT 中的2 位十进制数值增1CLRC ;复位进位位DADD.B #1, CNT ;十进制数值增1或SETCDADD.B #0, 1(R8) ;相当于DADC.B CNTDEC[.W] 目的操作数减1语法DEC dst 或DEC.W dst操作dst - 1 -> dst仿真SUB #1, dst说明目的操作数减1 以前的内容丢失状态位N 结果为负时置位为正时复位Z dst 包含1 时置位其他情况时复位C dst 包含0 时置位其他情况时复位V 产生算术溢出时置位其他情况时复位目的操作数的初始值为08000H 时置位其他情况时复位方式位OscOff CPUOff 和GIE 不受影响例子R10 减1DEC R10 ;R10 减1;将从EDE 开始的255 字节存储区块移到从TONI 开始的存储区;地址表不能重叠目的地址TONI 的起始点不能位于EDE 至EDE + 0FEH 的范围内;MOV #EDE, R6,MOV #255, R10L$1: MOV.B @R6+, TONI-EDE-1(R6)DEC R10JNZ L$1DEC.B 目的操作数减1语法DEC.B dst操作dst - 1 -> dst仿真SUB #1, dst说明目的操作数减1 以前的内容丢失状态位N 结果为负时置位为正时复位Z dst 包含1 时置位其他情况时复位/ 2001-08-06版权所有2001 广州单片机网站13C dst 包含0 时置位其他情况时复位V 产生算术溢出时置位其他情况时复位目的操作数的初始值为08000H 时置位其他情况时复位方式位OscOff CPUOff 和GIE 不受影响例子地址LEO 处的存储器字节减1DEC.B LEO ;MEM(LEO)减1;将从EDE 开始的255 字节存储区块移到从TONI 开始的存储区;地址表不能重叠目的地址TONI 的起始点不能位于EDE 至EDE + 0FEH 的范围内;MOV #EDE, R6,MOV #255, R10L$1: MOV.B @R6+, TONI-EDE-1(R6)DEC.B LEOJNZ L$1DECD[.W] 目的操作数减2语法DECD dst 或DECD.W dst操作dst - 2 -> dst仿真SUB #2, dst说明目的操作数减2 以前的内容丢失状态位N 结果为负时置位为正时复位Z dst 包含2 时置位其他情况时复位C dst 包含0 或1 时置位其他情况时复位V 产生算术溢出时置位其他情况时复位目的操作数的初始值为08001H 或08000H 时置位其他情况时复位方式位OscOff CPUOff 和GIE 不受影响例子R10 减2DECD R10 ;R10 减2;将从EDE 开始的255 字节存储区块移到从TONI 开始的存储区;地址表不能重叠目的地址TONI 的起始点不能位于EDE 至EDE + 0FEH 的范围内;MOV #EDE, R6,MOV #255, R10L$1: MOV.B @R6+, TONI-EDE-2(R6)DEC R10JNZ L$1DECD.B 目的操作数减2语法DECD.B dst操作dst - 2 -> dst仿真SUB #2, dst说明目的操作数减2 以前的内容丢失状态位N 结果为负时置位为正时复位Z dst 包含2 时置位其他情况时复位C dst 包含0 或1 时置位其他情况时复位V 产生算术溢出时置位其他情况时复位目的操作数的初始值为081H 或080H 时置位其他情况时复位方式位OscOff CPUOff 和GIE 不受影响例子地址LEO 处的存储器字节减2/ 2001-08-06版权所有 2001 广州单片机网站14DECD.B LEO ;MEM(LEO)减2状态字节STATUS 减2DECD.B STATUSDINT 禁止(一般) 中断语法DINT操作0 -> GIE 或 (0FFF7H .AND. SR -> SR / .NOT. src .AND. dst -> dst ) 仿真BIC #8, SR说明禁止所有中断状态位N 不影响Z 不影响C 不影响V 不影响方式位OscOff CPUOff 不受影响 GIE 复位例子状态寄存器中的一般中断使能位GIE 清零可允许非中断移动一个32 位数值这样可保证在任何中断移动期间该数值不会被修改DINT ;所有使用GIE 位的中断事件被禁止MOV COUNTHI, R5 ;复制数值MOV COUNTHO, R6EINT ; 所有使用GIE 位的中断事件被使能注意禁止中断---- 在DINT 执行期间当中断请求生效时才能执行禁止中断指令DINT 后面的指令如果任何代码顺序需要保护自身不被中断则至少应该在些代码之前一个指令时执行DINT 指令EINT 使能( 一般) 中断语法EINT操作1 -> GIE 或 (0008H .OR. SR -> SR / .NOT. src .OR. dst -> dst )仿真BIS #8, SR说明使能所有中断常数08H 与状态寄存器SR 逻辑或其结果放入SR状态位N 不影响Z 不影响C 不影响V 不影响方式位OscOff CPUOff 不受影响 GIE 置位例子状态寄存器中的一般中断使能位GIE 被置P0IFG 是可锁存所有中断事件的寄存器地址PUSH.B &P0INBIC.B @SP, &P0IFG ;仅复位接收到的标记EINT ;预置保存在堆栈中的口0 中断标记允许其它中断BIT #Mask, @SPJEQ MaskOK ;现有的标记与标志相同程序跳转......MaskOK: BIC #Mask, @SP......INCD SP ;在中断子程序开始时倒回PUSH 指令修改堆栈指针RETI注意使能中断---任何情况下都可执行使能中断指令EINT 后面的指令甚至在中断服务请求悬而未决时INC[.W] 目的操作数加1语法INC dst 或INC.W dst操作dst + 1 -> dst仿真ADD #1, dst/ 2001-08-06版权所有 2001 广州单片机网站15说明目的操作数加1 以前的内容丢失状态位N 结果为负时置位为正时复位Z dst 包含0FFFFH 时置位其他情况时复位C dst 包含0FFFFH 时置位其他情况时复位V dst 包含07FFFH 时置位其他情况时复位方式位OscOff CPUOff 和GIE 不受影响例子软件堆栈( 不是系统堆栈)顶部的字节数据被子移动SSP .EQU R4INC SSP ;通过给目的操作数据加1 来移动TOSS(SW 堆栈的顶部) ;SSP 是一个字寄存器所以不要使用INC.BINC.B 目的操作数加1语法INC.B dst操作dst + 1 -> dst仿真ADD #1, dst说明目的操作数加1 以前的内容丢失状态位N 结果为负时置位为正时复位Z dst 包含0FFH 时置位其他情况时复位C dst 包含0FFH 时置位其他情况时复位V dst 包含07FH 时置位其他情况时复位方式位OscOff CPUOff 和GIE 不受影响例子过程STATUS 的状态字节加1 当它等于11 时程序转移到OVFL INC.B STATUSCMP.B #11, STATUSJEQ OVFLINCD[.W] 目的操作数加2语法INCD dst 或INCD.W dst操作dst + 2 -> dst仿真ADD #2, dst说明目的操作数加2 以前的内容丢失状态位N 结果为负时置位为正时复位Z dst 包含0FFFEH 时置位其他情况时复位C dst 包含0FFFEH 或0FFFFH 时置位其他情况时复位V dst 包含07FFEH 或0FFFFH 时置位其他情况时复位方式位OscOff CPUOff 和GIE 不受影响例子无需使用寄存器即可移动堆栈顶部的项SUB......PUSH R5 ;R5 是计算的结果保存在堆栈中INCD SP ;通过给目的操作数加2 从堆栈中移走TOS;SP 是一个字寄存器所以不要使用INC.BINCD.B 目的操作数加2语法INCD.B dst操作dst + 2 -> dst仿真ADD.B #2, dst说明目的操作数加2 以前的内容丢失状态位N 结果为负时置位为正时复位Z dst 包含0FEH 时置位其他情况时复位/ 2001-08-06版权所有 2001 广州单片机网站16C dst 包含0FEH 时置位其他情况时复位V dst 包含07EH 时置位其他情况时复位方式位OscOff CPUOff 和GIE 不受影响例子堆栈顶部的字节加2INCD.B 0(SP) ;TOS 处的字节加2INV[.W] 目的操作数求反语法INV dst 或INV.W dst操作.NOT.dst -> dst仿真XOR #0FFFFH, dst说明目的操作数取反以前的内容丢失状态位N 结果为负时置位为正时复位Z dst 包含0FFFFH 时置位其他情况时复位C 结果不为零时置位其他情况时复位 ( = .NOT.Zero ) V 初始目的操作数为负时置位其他情况时复位方式位OscOff CPUOff 和GIE 不受影响例子R5 的内容被取消(2 的补码)MOV #00AEH, R5 ; R5=00AEHINV R5 ;R5 求反 R5=0FF51HINC R5 ;取消R5 R5=0FF52HINV.B 目的操作数求反语法INV dst 或INV.W dst操作.NOT.dst -> dst仿真XOR #0FFH, dst说明目的操作数取反以前的内容丢失状态位N 结果为负时置位为正时复位Z dst 包含0FFH 时置位其他情况时复位C 结果不为零时置位其他情况时复位 ( = .NOT.Zero ) V 初始目的操作数为负时置位其他情况时复位方式位OscOff CPUOff 和GIE 不受影响例子存储字节LEO 的内容被取消MOV #0AEH, LEO ; MEM(LEO)=0AEHINV.B LEO ;LEO 求反 MEM(LEO)=051HINC.B LEO ;取消LEO MEM(LEO)=052HJC 进位位为1 时程序跳转JHS 大于或等于时程序跳转语法JC 标号JHS 标号。

mps430G2553中文资料

mps430G2553中文资料

时钟
I/O 封装类型
16
512 2x TA3
8
8
512 2x TA3
8
4
256 2x TA3
8
2
256 2x TA3
8
1
256 2x TA3
8
24
32 引脚 QFN 封装
28 引脚
24 TSSOP 封
LF,

-
1
DCO,
VLO
20 引脚
16 TSSOP 封

16
20 引脚 PDIP 封装
24
32 引脚 QFN 封装
引导加 载器 (BSL)
嵌入式 仿真模
块 (EEM)
1
1
1
1
1
1
1
1
1
1
表 1. 提供的选项(1)(2) (接下页)
ZHCS178E – APRIL 2011 – REVISED JANUARY 2012
闪存 (KB)
RAM (B)
Timer_A
COMP_A+ 通道
10 通道 ADC
USCI A0/B0
典型应用包括低成本传感器系统,此类系统负责捕获模拟信号、将之转换为数字值、随后对数据进行处理以进行显 示或传送至主机系统。
1
Please be aware that an important notice concerning availability, standard warranty, and use in critical applications of Texas Instruments semiconductor products and disclaimers thereto appears at the end of this data sheet.
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第 w Z 结果为零时置位 其它情况时复位
C dst 从 0FFFFH 增至 0000 时置位 其它情况复位
ww V 发生算术溢出时置位 其它情况时复位
方式位 OscOff CPUOff 和 GIE 不受影响
例子
R13 指向的 16 位数值加到 R12 指向的 32 位数值
ADD @R13, 0(R12)
寻址方式
寻址方式
源 操 目标操




作数 作数
As Ad
寄存器寻址
Yes Yes
MOV Rs, Rd
00 0 寄存器内容是操作数
索引寻址
Yes Yes
MOV x(Rn), y(Rm)
01 1 (Rn+x)指向操作数 x 储存在下一个字中
符号寻址
Yes Yes
MOV EDE, TON1
01 1
(PC+x)指向操作数 x 储存在下一个字中
Z 结果为零时置位 其它情况时复位
方式位 例子
C 结果的 MSB 产生进位时置位 否则复位 V 发生算术溢出时置位 其它情况时复位 OscOff CPUOff 和 GIE 不受影响 R13 指向的 32 位数值加至 R13 中的指针之上 11 个字(20/2 +2/2)的 32 位计数器 ADD @R13+, 20(R13) ;无进位加 LSDs ADDC @R13+, 20(R13) ;带进位加 MSDs
0 ** * ------------0 -0---0-
CMP[.W];CMP.B
dst
dst - src
* ** *
DADC[.W];DADC.B dst
dst + C -> dst (十进制)
DADD[.W];DADD.B src, dst
src + dst + C -> dst (十进制)
DEC[.W];DEC.B
. ......
;无进位
第 w ADDC[.W] 源操作数加至目的操作数
w 语法
ADDC
src, dst 或 ADDC.W
src, dst
w 操作
src + dst + C -> dst
说明
源操作数和进位 C 加至目的操作数 源操作数不受影响 目的操作数以前的内容丢失
状态位 N 结果为负时置位 为正时复位
dst + .not. src + C -> dst 交换字节 dst 位 7 -> 位 8......位 15 测试目的操作数
XOR[.W];XOR.B
src, dst
src .xor. dst -> dst
注 状态位中 * 表示影响 - 表示不影响 0 表示清零 1 表示置位
* ** * * ** * * ** * * ** * ------* ** * * ** * * ** * -------------------------------
----
BIS[.W]; BIS.B
src, dst
src .or. dst -> dst
----
BIT[.W]; BIT.B BR CALL CLR[.W];CLR.B CLRC CLRN CLRZ
src, dst dst dst dst
src .and. dst 转移到 PC + 2 ->堆栈, dst -> PC 清除目的操作数 清除进位位 清除负位 清除零位
M(R10) à R11, R10+2 #0AAH à M(TON1)
作 àR10
第 w.9 指令概述 共 51 条指令 ww 操 作 码
操作
状态位 V NZC
ADC[.W]; ADC.B
dst
dst + C -> dst
* ** *
ADD[.W]; ADD.B
src, dst
src + dst -> dst
机 om 寻址方式 c 寄存器寻址 片 索引寻址 . 符号寻址 u 绝对寻址 单 c 间接寻址
间接自动增量
九 m 立即数寻址


MOV R10, R11
MOV 2(R5), 6(R6)
MOV EDE, TON1
MOV &MEM, &TCDAT
MOV @R10, Tab(R6)
MOV @R10+, R11
INV[.W];INV.B
dst
目的操作数求反
JC/JHS
标号
进位位被置时转移到标号语句
JEQ/JZ
标号
零位被置时转移到标号语句
JGE JL JMP JN JNC/JLO JNE/JNZ MOV[.W];MOV.B NOP POP[.W];POP.B PUSH[.W];PUSH.B RETI
RET
RLA[.W];RLA.B RLC[.W];RLC.B RRA[.W];RRA.B RRC[.W];RRC.B SBC[.W];SBC.B SETC SETN
* ** *
ADDC[.W]; ADDC.B src, dst
src + dst + C -> dst
* ** *
AND[.W]; AND.B
src, dst
src .and. dst -> dst
0 ** *
BIC[.W]; BIC.B
src, dst
.not.src .and. dst -> dst
片 c C 结果产生进位时置位 否则复位
. V 发生算术溢出时置位 其它情况时复位
u 方式位 OscOff CPUOff 和 GIE 不受影响
单 c 例子
R5 加上 10 由一个进位使程序 转移 到 TONI
m ADD #10, R5
;将近 10 加至 R5 的低位字节
九 9 JC
TONI
;若(R5)>=246[0AH + 0F6H] 则产生进位
算术右移
. dst
带进位位右移
第 w dst
从目的操作数减去借位
w 置进位位
w 置负位
SETZ
置零位
SUB[.W];SUB.B
src, dst
dst + .not. src + 1 -> dst
SUBC[.W];SUBC.B SWAP SXT TST[.W];TST.B
src, dst dst dst dst
方式位 OscOff CPUOff 和 GIE 不受影响
例子
R13 指向的 8 位数值加到 R12 指向的 16 位数值
ADD.B @R13, 0(R12)
;加 LSDs
ADC.B 1(R12)
;将进位加至 MSD
ADD[.W] 源 操 作 数 加 至 目 的 操 作 数
语法
ADD
src, dst 或 ADD.W
src
SP – 2 -> SP , src -> @SP
机 m 从中断返回
o TOS -> SR SP + 2 -> SP
片 c TOS -> PC SP + 2 -> SZP . 从子程序返回
u TOS -> SR SP + 2 -> SP
单 c dst
算术左移
m dst
带进位位左移
九 9 dst
ADD #10, R5
;
JC
TONI
;产生进位
ADD.B
...... 源操作数加至目的操作数
;无进位

语法
ADD.B src, dst
论 操作
src + dst -> dst
说明
源操作数加至目的操作数 源操作数不受影响 目的操作数以前的内容丢失
机 m 状态位 N 结果为负时置位 为正时复位
o Z 结果为零时置位 其它情况时复位
单操作数指令
由 2 个域组成 共有 16 位代码
l 操作码域
9bit 操作码
l 字节操作识别符 1bit B/W
(B/W=1 以字节形式执行 B/W=0 以字形式执行
l 目的域
6bit 目的寄存器 + Ad (4 位寄存器数 0~15 + 1 个寻址位)
15
12
7 6 5 43
0
0 0 0 1 x x x x x x B/W Ad 目的寄存器
MSP430 系列汇编指令集
简介
MSP430 的内核 CPU 结构是按照精简指令集和高透明指令的宗旨来设计的 使用的指令有硬件执行的 内核指令和基于现有硬件结构的高效率的仿真指令 仿真指令使用内核指令及芯片额外配置的常数发生器 CG1 CG2
MSP430 指令的寻址方式包括立即寻址 索引寻址 符号寻址和绝对寻址 这四种方式均可用于源操 作数 而索引 符号和绝对寻址方式只可用于目的操作数 源操作数的指令集需占用代码存储器中的 1~3 个字
src, dst
Hale Waihona Puke 操作src + dst -> dst
说明
源操作数加至目的操作数 源操作数不受影响 目的操作数以前的内容丢失
状态位 N 结果为负时置位 为正时复位
Z 结果为零时置位 其它情况时复位
C 结果产生进位时置位 否则复位
方式位 例子
V 发生算术溢出时置位 其它情况时复位 OscOff CPUOff 和 GIE 不受影响 R5 加上 10 由一个进位使程序 转移 到 TONI
机论 om 指令集说明( 51 条指令以字母为序)
相关文档
最新文档