MSP430 IIC 程序驱动代码

合集下载

MSP430学习(五)——IAR下JTAG下载和调试

MSP430学习(五)——IAR下JTAG下载和调试

MSP430学习(五)——IAR下JTAG下载和调试BSL要使用专门的烧录软件,除了MSPFET之外,好象还有LSD-BSL,还有能够在网络上找得到的一些自己编写的烧录软件。

TI提供了自己编写烧录软件的API和资料。

但这肯定不是业余爱好者愿意接触的。

IAR是MSP430超强的工具,它本身就能通过JTAG进行烧录和调试,而不需要再使用别的外在的工具。

似乎有介绍也可以两线SBW 烧录。

太复杂了,还是学会最通用的内容再拓展吧。

IAR下使用JTAG,一个是要设定好JTAG硬件,另一个是各种调试窗口和信息的理解。

这儿只说IAR里面怎么粗略使用JTAG。

1、先创建一个工程,写点代码。

Create newproject/Project templates:C,main;接下来保存,增减文件等。

2、开始设置。

Project/options...2.1、芯片型号设置。

General Options/Device,MSP430F5529;2.2、仿真器设置。

Debugger/Driver/FET Debugger;Run to/main;2.3、设置TI仿真器硬件。

FETDebugger/Setup/Connection/Texas Instrument USB-IF,Automatic;Target VCC/Overridedefault,3.3;FETDebugger/Download/Flash erase/Erase main memory。

万万不可选Erase main and Information memory,说是会破坏内部DCO,然后MSP430就完蛋了。

2.4、生成用于BSL烧录的txt或a43等文件类型。

Linker/Output/Outputfile/Override default;用于调试。

Format/Debug information forC-SPY/With.../With...用于烧录的txt。

步进电机2相驱动控制方向与速度程序代码

步进电机2相驱动控制方向与速度程序代码

步进电机2相驱动控制方向与速度程序代码以下是一个示例的步进电机2相驱动控制方向与速度的程序代码:```pythonimport RPi.GPIO as GPIOimport time# 定义步进电机引脚IN1 = 11 # 输入1IN2 = 12 # 输入2IN3 = 13 # 输入3IN4 = 15 # 输入4# 设置GPIO模式为BOARDGPIO.setmode(GPIO.BOARD)# 设置步进电机引脚为输出GPIO.setup(IN1, GPIO.OUT)GPIO.setup(IN2, GPIO.OUT)GPIO.setup(IN3, GPIO.OUT)GPIO.setup(IN4, GPIO.OUT)# 定义步进电机旋转函数def rotate(delay, steps, clockwise=True):# 声明步进电机转动模式coil_A = [1, 0, 0, 1]coil_B = [0, 1, 1, 0]steps_per_rev = 4if not clockwise:steps = -stepsfor _ in range(steps):for i in range(4):# 设置步进电机输出状态GPIO.output(IN1, coil_A[i])GPIO.output(IN2, coil_B[i])GPIO.output(IN3, coil_A[steps_per_rev - i - 1])GPIO.output(IN4, coil_B[steps_per_rev - i - 1])# 延迟一定时间time.sleep(delay)# 控制步进电机旋转try:while True:rotate(0.01, 200, True) # 按顺时针方向旋转200步 time.sleep(1) # 停顿1秒rotate(0.01, 200, False) # 按逆时针方向旋转200步 time.sleep(1) # 停顿1秒except KeyboardInterrupt:GPIO.cleanup()```。

MSP430I2C通信

MSP430I2C通信

04
MSP430I2C通信模块的 应用实例
MSP430I2C通信模块与EEPROM的通信
总结词
实现数据存储与读取
详细描述
MSP430I2C通信模块通过与EEPROM进行通信,可以实现数据的存储和读取功能。在数据存储时,可以将需要 保存的数据通过I2C通信协议发送到EEPROM中;在数据读取时,可以从EEPROM中读取数据并通过I2C通信协 议返回给MSP430I2C通信模块。
要点三
解决方案
首先检查总线的负载情况,确保总线 上连接的设备数量和信号线的长度在 合理范围内。然后检查信号线的质量 ,排除信号干扰的可能性。此外,可 以尝试调整I2C通信的速率参数,以 找到最适合系统需求的通信速率。
THANKS
感谢观看
寄存器访问
通过读写寄存器的方式,实现数据的读取和 写入。
03
MSP430I2C通信模块的 使用
MSP430I2C通信模块的初始化
初始化I2C通信模块
启动I2C通信
在开始通信之前,需要先初始化I2C通 信模块,包括设置通信速率、数据位、 停止位等参数。
完成初始化后,通过发送起始信号启 动I2C通信。
I2C通信模块支持多主模式和从模式, 方便实现多机通信。
MSP430I2C通信模块具有硬件仲裁 功能,可自动处理多个主设备同时请 求的情况,保证数据传输的可靠性。
02
I2C通信协议
I2C通信协议概述
I2C通信是一种双线串行通信协 议,主要用于连接微控制器和 各种外围设备。
它由Philips公司开发,具有简 单、稳定、高速等优点,广泛 应用于各种嵌入式系统中。
模块的亮度和对比度等参数,从而实现数据显示和控制功能。
05

SHT11温湿度传感器MSP430源代码

SHT11温湿度传感器MSP430源代码
nop();
}
//等待响应
//SHT_DAT_OUT;
SHT_DAT_1;
SHT_DAT_IN;
nop();
SHT_SCK_1;
nop();
error=Read_SHT_Dat;
SHT_SCK_0;
nop();
//error=1时无响应
return error;
}
for(temp=0;temp<4294967295;temp++)
{
read_temp=Read_SHT_Dat;
uchar SHT_Rea_Byte(uchar ack)
{
uchar temp,val=0,read_temp;
//释放数据线
SHT_SCK_OUT;
SHT_DAT_OUT;
SHT_DAT_1;
nop();
SHT_DAT_IN;
for(temp=0x80;temp>0;temp/=2)
// reads the status register with checksum (8-bit)
uchar SHT_Rea_Sta(uchar *p_value,uchar *p_checksum)
{
uchar error=0;
SHT_Tra_Sta(); //transmission start
default:break;
}
/*准备接收*/
//数据线为输出
SHT_DAT_OUT;
SHT_DAT_1;
//数据线为输入
SHT_DAT_IN;
/*wait until sensor has finished the measurement or timeout (~2 sec.) is reached*/

MSP430的I2C模块寄存器

MSP430的I2C模块寄存器

本文为翻译的MSP430x1xx Family User's Guide家庭用户指南,且只有寄存器的翻译比较准确,其他地方阅读时请自行判断语句的准确性本文为翻译的MSP430x1xx Family User's Guide家庭用户指南,且只有寄存器的翻译比较准确,其他地方阅读时请自行判断语句的准确性本文为翻译的MSP430x1xx Family User's Guide家庭用户指南,且只有寄存器的翻译比较准确,其他地方阅读时请自行判断语句的准确性USART外围接口,I2C模式通用同步/异步接收/传输(USART)外设接口支持USART0 I2C通信。

本章介绍I2C模式。

在I2C模式在MSP430x15x和MSP430x16x器件上实现。

专题页面15.1 I2C模块简介..............................................15-215.2 I2C模块操作..............................................15-415.3 I2C模块寄存器............................................15-2015.3 I2C模块寄存器I2C模块寄存器如表15-4。

表15-4.I2C寄存器注册简称注册类型地址初始状态I2C中断使能 I2CIE 读/写 050hI2C中断标志 I2CIFG 读/写 051hI2C数据计数 I2CNDAT 读/写 052hUSART控制 U0CTL 读/写 070hI2C传输控制 I2CTCTL 读/写 071hI2C数据控制 I2CDCTL 只读 072hI2C预分频器 I2CPSC 读/写 073hI2C SCL高 I2CSCLH 读/写 074hI2C SCL低 I2CSCLL 读/写 075hI2C数据 I2CDRW/ I2CDRB 读/写 076hI2C自己的地址 I2COA 读/写 0118hI2C从地址 I2CSA 读/写 011AhI2C中断向量 I2CIV 只读 011ChU0CTL,UART0控制寄存器,I2C模式rw−0rw−0rw−0rw−0rw−0rw−0rw−0rw−1RXDMAEN 第7位接收DMA能。

MSP430系列汇编指令集

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 测试目的操作数

msp430用iic方式读取数据

msp430用iic方式读取数据

void iic_write_byte(uchar wdata)//函数功能:向I2C从机写入一个字节{uchar i,temp,temp1;temp1=wdata;for(i=0;i<8;i++){scl = 0;iic_delay();temp=temp1;temp=temp&0x80;if(temp==0x80)sda=1;elsesda=0;iic_delay();scl=1;iic_delay();scl=0;iic_delay();temp1=temp1<<1;}}char iic_read_byte(void) //函数功能:从I2C从机中读出一个字节{uchar x;char data_data;for(x=0;x<8;x++){data_data=data_data<<1;sda=1;iic_delay();scl=0;iic_delay();scl=1;iic_delay();if(sda==1)data_data|=0x01;}return data_data;}void iic_write(uchar byte_add,uchar wdata)//函数功能:按地址写入一字节数据{uchar t;t=(IIC_WRITE<<1);iic_write_byte(t);iic_write_byte(byte_add);iic_write_byte(wdata);}char iic_read(uchar byte_add) //函数功能:按地址读出一字节数据{uchar t;char x;t=(IIC_WRITE<<1);iic_write_byte(t);iic_write_byte(byte_add);t=((IIC_READ<<1)|0x01);iic_write_byte(t);x=iic_read_byte();return x;}#define IIC_READ 0x1D //定义读指令#define IIC_WRITE 0x1D //定义写指令void iic_write_byte(uchar wdata)//函数功能:向I2C从机写入一个字节{uchar i,temp,temp1;temp1=wdata;for(i=0;i<8;i++){scl = 0;iic_delay();temp=temp1;temp=temp&0x80;if(temp==0x80)sda=1;elsesda=0;iic_delay();scl=1;iic_delay();scl=0;iic_delay();temp1=temp1<<1;}}char iic_read_byte(void) //函数功能:从I2C从机中读出一个字节{uchar x;char data_data;for(x=0;x<8;x++){data_data=data_data<<1;sda=1;iic_delay();scl=0;iic_delay();scl=1;iic_delay();if(sda==1)data_data|=0x01;}return data_data;}void iic_write(uchar byte_add,uchar wdata)//函数功能:按地址写入一字节数据{uchar t;t=(IIC_WRITE<<1);iic_write_byte(t);iic_write_byte(byte_add);iic_write_byte(wdata);}char iic_read(uchar byte_add) //函数功能:按地址读出一字节数据{uchar t;char x;t=(IIC_WRITE<<1);iic_write_byte(t);iic_write_byte(byte_add);t=((IIC_READ<<1)|0x01);iic_write_byte(t);x=iic_read_byte();return x;}。

MSP430 EEPROM-24C512使用总结及代码说明

MSP430 EEPROM-24C512使用总结及代码说明
#ifndef __msp430x14x #include "msp430x14x.h" #endif #define __i2c #define I2C_DIR P5DIR #define I2C_OUT P5OUT #define I2C_IN P5IN #define SDA BIT1 #define SCL BIT2 #ifndef uchar #define uchar unsigned char #endif #ifndef uint #define uint unsigned int #endif //包含msp430x14x.h
6、发送1个字节
void I2C_SendByte(uchar data_临时数据
I2C_DIR |= SDA;
for(i=0;i<8;i++) { temp_ = data_ & 0x80; if(temp_==0x80) I2C_OUT |= SDA; else I2C_OUT &= ~SDA; I2C_delay(); I2C_OUT |= SCL; I2C_delay(); I2C_OUT &= ~SCL; I2C_delay(); data_ = data_<<1; }
//SDA设置为输出
//从最高位开始,一位一位发送
//SDA=1,发送位=1 //SDA=0,发送位=0
//SCL=1,把SDA送到I2C总线上
//SCL=0,拉回SCL
//准备下一位数据
} //使用进位标志位CY来取data_的每一位数据也可以,而且效率还高一些。
7、接收1个字节
uchar I2C_ReceiveByte(void) { uchar i,temp_; uchar data_=0x00; I2C_DIR &= ~SDA; for(i=0;i<8;i++) { I2C_OUT |= SCL; I2C_delay(); data_ = data_<<1; temp_ = (I2C_IN & SDA); if(temp_==SDA) data_ = data_ | 0x01; I2C_delay(); I2C_OUT &= ~SCL; I2C_delay(); } return(data_); } //返回接收到的数据 //SCL=0 //temp_用于保存临时数据 //data_用于保存接收数据 //SDA设置为输入

MSP430程序指南

MSP430程序指南

MSP4301.时钟控制:430三个时钟源:LFXT1CLK低频时钟源,XT2CLK,高频时钟源,DCOCLK数控RC 振荡器。

2.三种时钟源可提供三种时钟信号:1.ACLK辅助时钟:ACLK是LFXT1CLK信号经过1、2、4、8分频得到的。

ACLK可由软件选作外围器件的时钟信号。

2.MCLK系统主时钟:可由软件来设置来源于低频时钟源,高频,数控。

之后可再经过1、2、4、8分频得到。

MCLK主要用于CPU和系统。

3.SMCLK:可有软件选这高频时钟来源,用于高速外围设备。

其中P1.4/SMCLK, P2.0/ACLK, P5.5/SMCLK, P5.6/ACLK。

时钟信号输出,可由PnSEL|=0xXX,l来设置特殊功能端口。

4.三个振荡器的控制位:1.低频LFXT1:OscOff;2.高频XT2CLK:XT2OFF;3.DCO:SCG0;5.一、时钟模块主要由三个寄存器来进行控制。

1.DCOCTL DCO控制器高三位:DCO.2、DCO.1 DCO.0定义8种频率之一,相邻两位相差10%,第五位详细调整频率。

其中DCO为7时表示选择最高频率。

2.BCSCTL1基本时钟控制器1位数7(最高)---XT2OFF:控制XT2的开启与关闭,0:开启;1:关闭。

6---------XTS:控制LFXT1工作模式:0:低频工作模式32768HZ;1:高频工作模式(前提接了相应的高频晶振)。

5,4--------DIV.1、DIV.0:控制ACLK分频(ACLK时钟来源于LFXT1)0:不分;1: 2分;2: 4分;3:8分;3-------XT5V:此位设置为0;2,1,0-----Rsel.0~Rsel.2 :0~7:最低标频~最高标频。

3.BCSCTL27,6-------SELM.1,SELM.0:选择MCLK时钟源(系统主时钟)0,1:DCOCLK为时钟源2:XT2CLK为时钟源3:时钟源为LFXT1CLK5,4-------DIVM.0,DIVM.1 选择MCLK分频。

MSP430 IIC 程序驱动代码

MSP430 IIC 程序驱动代码

/开发平台;MSP430IIC总线驱动代码本人试用过,可以成功的调通/////////////////////////////////////////////////////////////iic.c#include <msp430x14x.h>typedef unsigned char uchar;typedef unsigned int uint;#define SCL_H P1OUT |= BIT2#define SCL_L P1OUT &= ~BIT2#define SDA_H P1OUT |= BIT3#define SDA_L P1OUT &= ~BIT3#define SDA_in P1DIR &= ~BIT3 //SDA改成输入模式#define SDA_out P1DIR |= BIT3 //SDA变回输出模式#define SDA_val P1IN&BIT3 //SDA的位值#define TRUE 1#define FALSE 0/*******************************************函数名称:delay功能:延时约15us的时间参数:无返回值:无********************************************/void delay(void){uchar i;for(i = 0;i < 15;i++)_NOP();}/*******************************************函数名称:start功能:完成IIC的起始条件操作参数:无返回值:无********************************************/void start(void){SCL_H;SDA_H;delay();SDA_L;delay();SCL_L;delay();}/******************************************* 函数名称:stop功能:完成IIC的终止条件操作参数:无返回值:无********************************************/ void stop(void){SDA_L;delay();SCL_H;delay();SDA_H;delay();}/******************************************* 函数名称:mack功能:完成IIC的主机应答操作参数:无返回值:无********************************************/ void mack(void){SDA_L;_NOP(); _NOP();SCL_H;delay();SCL_L;_NOP();_NOP();SDA_H;delay();}/******************************************* 函数名称:mnack功能:完成IIC的主机无应答操作参数:无返回值:无********************************************/ void mnack(void){SDA_H;_NOP(); _NOP();SCL_H;delay();SCL_L;_NOP(); _NOP();SDA_L;delay();}/**********检查应答信号函数******************/ /*如果返回值为1则证明有应答信号,反之没有*/ /******************************************* 函数名称:check功能:检查从机的应答操作参数:无返回值:从机是否有应答:1--有,0--无********************************************/ uchar check(void){uchar slaveack;SDA_H;_NOP(); _NOP();SCL_H;_NOP(); _NOP();SDA_in;_NOP(); _NOP();slaveack = SDA_val; //读入SDA数值SCL_L;delay();SDA_out;if(slaveack) return FALSE;else return TRUE;}/******************************************* 函数名称:write1功能:向IIC总线发送一个1参数:无返回值:无********************************************/void write1(void){SDA_H;delay();SCL_H;delay();SCL_L;delay();}/******************************************* 函数名称:write0功能:向IIC总线发送一个0参数:无返回值:无********************************************/ void write0(void){SDA_L;delay();SCL_H;delay();SCL_L;delay();}/******************************************* 函数名称:write1byte功能:向IIC总线发送一个字节的数据参数:wdata--发送的数据返回值:无********************************************/ void write1byte(uchar wdata){uchar i;for(i = 8;i > 0;i--){if(wdata & 0x80) write1();else write0();wdata <<= 1;}SDA_H;_NOP();}/******************************************* 函数名称:writeNbyte功能:向IIC总线发送N个字节的数据参数:outbuffer--指向发送数据存放首地址的指针n--数据的个数返回值:发送是否成功的标志:1--成功,0--失败********************************************/ uchar writeNbyte(uchar * outbuffer,uchar n){uchar i;for(i = 0;i < n;i++){write1byte(* outbuffer);if(check()){outbuffer++;}else{stop();return FALSE;}}stop();return TRUE;}/******************************************* 函数名称:read1byte功能:从IIC总线读取一个字节参数:无返回值:读取的数据********************************************/ uchar read1byte(void){uchar rdata = 0x00,i;uchar flag;for(i = 0;i < 8;i++){SDA_H;delay();SCL_H;SDA_in;delay();flag = SDA_val;rdata <<= 1;if(flag) rdata |= 0x01;SDA_out;SCL_L;delay();}return rdata;}//////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //iic.h#ifndef __IIC_h__#define __IIC_h__extern void delay(void);extern void start(void);extern void stop(void);extern void mack(void);extern void mnack(void);extern unsigned char check(void);extern void write1(void);extern void write0(void);extern void write1byte(unsigned char wdata);extern unsigned char writeNbyte(unsigned char * outbuffer,unsigned char n); extern unsigned char read1byte(void);extern void readNbyte(unsigned char * inbuffer,unsigned char n);#endif。

msp430最全的指令集

msp430最全的指令集

4)对应的SFR的中断位#define OFIFG 0x02#define OFIE 0x02九、SVSSVSCTL(0x0056) /* SVS Control */#define SVSFG (0x01) /* SVS Flag */#define SVSOP (0x02) /* SVS output (read only) */#define SVSON (0x04) /* Switches the SVS on/off */#define PORON (0x08) /* Enable POR Generation if Lo w Voltage */#define VLDON (0x10)#define VLDOFF (0x00)#define VLD_1_8V (0x10)十一、Timer A31)寄存器:TAIV (0x012E) 中断向量寄存器TACTL (0x0160) 控制寄存器CCTL0(0x0162) 捕获比较控制寄存器0CCTL1(0x0164) 捕获比较控制寄存器1CCTL2(0x0166) 捕获比较控制寄存器2TAR(0x0170) 寄存器CCR0(0x0172) 捕获比较寄存器0CCR1(0x0174) 捕获比较寄存器1CCR2(0x0176) 捕获比较寄存器22)TACTL中的各位SSEL1 SSEL0 输入信号TASSEL2 (0x0400) 未用0 0 TACLK(特定的外部信号)TASSEL1 (0x0200) 时钟选择0 1 ACLKTASSEL0 (0x0100) 时钟选择 1 0 MCLKID1 (0x0080) 输入信号分频:00 直通;01:2分频ID0 (0x0040) 与ID1一起:10 4分频11:8分频MC1 (0x0020) 两位一起:00 停止;01:增记数到CCR0;MC0 (0x0010) 模式控制:10 连续增记数,11 增记数到CCR0,减记数到0H;TACLR (0x0004) 定时器清除位TAIE (0x0002) 中断允许TAIFG (0x0001) 定时器溢出标志#define MC_0 (0*0x10u) /* Timer A mode control: 0 - Stop */#define MC_1 (1*0x10u) /* Timer A mode control: 1 - Up to C CR0 */#define MC_2 (2*0x10u) /* Timer A mode control: 2 - Continous up */#define MC_3 (3*0x10u) /* Timer A mode control: 3 - Up/Down */ #define ID_0 (0*0x40u) /* Timer A input divider: 0 - /1 */#define ID_1 (1*0x40u) /* Timer A input divider: 1 - /2 */#define ID_2 (2*0x40u) /* Timer A input divider: 2 - /4 */#define ID_3 (3*0x40u) /* Timer A input divider: 3 - /8 */#define TASSEL_0 (0*0x100u) /* Timer A clock source select: 0 - T ACLK */#define TASSEL_1 (1*0x100u) /* Timer A clock source select: 1 - ACLK */#define TASSEL_2 (2*0x100u) /* Timer A clock source select: 2 - SMCLK */#define TASSEL_3 (3*0x100u) /* Timer A clock source select: 3 - INCLK */3)捕获比较控制寄存器CCTLX对应的位CM1 (0x8000) 00 禁止01 上升沿捕获CM0 (0x4000) 10 下降沿捕获11 上升沿与下降沿都捕获CCIS1 (0x2000) CCIS0和CCIS1输入选择00 选择CCIXA;CCIS0 (0x1000) 01 选择CCIXB,10 GND 11 VCC SCS (0x0800) 0异步捕获 1 同步捕获SCCI (0x0400) 捕获比较输入信号与比较输出EQUX同步CAP (0x0100) 0 比较模式 1 捕获模式OUTMOD2 (0x0080)OUTMOD1 (0x0040)OUTMOD0 (0x0020)CCIE (0x0010) 1 允许中断 0 禁止中断CCI (0x0008) 捕获/比较输入信号选择OUT (0x0004)COV (0x0002)CCIFG (0x0001) 中断标志(与CCRX有关)#define OUTMOD_0 (0*0x20u) /* PWM output mode: 0 - output only */ #define OUTMOD_1 (1*0x20u) /* PWM output mode: 1 - set */#define OUTMOD_2 (2*0x20u) /* PWM output mode: 2 - PWM toggle/re set */#define OUTMOD_3 (3*0x20u) /* PWM output mode: 3 - PWM set/reset */#define OUTMOD_4 (4*0x20u) /* PWM output mode: 4 - toggle */#define OUTMOD_5 (5*0x20u) /* PWM output mode: 5 - Reset */#define OUTMOD_6 (6*0x20u) /* PWM output mode: 6 - PWM toggle/ set */#define OUTMOD_7 (7*0x20u) /* PWM output mode: 7 - PWM reset/s et */#define CCIS_0 (0*0x1000u) /* Capture input select: 0 - CCIxA */ #define CCIS_1 (1*0x1000u) /* Capture input select: 1 - CCIxB */ #define CCIS_2 (2*0x1000u) /* Capture input select: 2 - GND */#define CCIS_3 (3*0x1000u) /* Capture input select: 3 - Vcc */#define CM_0 (0*0x4000u) /* Capture mode: 0 - disabled */#define FSSEL_2 (0x0080) /* Flash clock select: 2 - SMCLK */#define FSSEL_3 (0x00C0) /* Flash clock select: 3 - SMCLK */#define BUSY (0x0001) /* Flash busy: 1 */#define KEYV (0x0002) /* Flash Key violation flag */#define ACCVIFG (0x0004) /* Flash Access violation flag */#define WAIT (0x0008) /* Wait flag for segment write */#define LOCK (0x0010) /* Lock bit: 1 - Flash is locked (read onl y) */#define EMEX (0x0020) /* Flash Emergency Exit */十三、比较器#define CACTL1 (0x0059) /* Comparator A Control 1 */#define CACTL2 (0x005A) /* Comparator A Control 2 */#define CAPD (0x005B) /* Comparator A Port Disable */#define CAIFG (0x01) /* Comp. A Interrupt Flag */#define CAIE (0x02) /* Comp. A Interrupt Enable */#define CAIES (0x04) /* Comp. A Int. Edge Select: 0:rising / 1: falling */#define CAON (0x08) /* Comp. A enable */#define CAREF0 (0x10) /* Comp. A Internal Reference Select 0 */ #define CAREF1 (0x20) /* Comp. A Internal Reference Select 1 */ #define CARSEL (0x40) /* Comp. A Internal Reference Enable */ #define CAEX (0x80) /* Comp. A Exchange Inputs */#define CAREF_0 (0x00) /* Comp. A Int. Ref. Select 0 : Off */ #define CAREF_1 (0x10) /* Comp. A Int. Ref. Select 1 : 0.25*Vcc */ #define CAREF_2 (0x20) /* Comp. A Int. Ref. Select 2 : 0.5*Vcc */ #define CAREF_3 (0x30) /* Comp. A Int. Ref. Select 3 : Vt*/#define CAOUT (0x01) /* Comp. A Output */#define CAF (0x02) /* Comp. A Enable Output Filter */#define P2CA0 (0x04) /* Comp. A Connect External Signal to C A0 : 1 */#define P2CA1 (0x08) /* Comp. A Connect External Signal to C A1 : 1 */#define CACTL24 (0x10)#define CACTL25 (0x20)#define CACTL26 (0x40)#define CACTL27 (0x80)#define CAPD0 (0x01) /* Comp. A Disable Input Buffer of Port Register .0 */#define CAPD1 (0x02) /* Comp. A Disable Input Buffer of Port Register .1 */#define CAPD2 (0x04) /* Comp. A Disable Input Buffer of Port Register .2 */#define CAPD3 (0x08) /* Comp. A Disable Input Buffer of Port Register .3 */#define CAPD4 (0x10) /* Comp. A Disable Input Buffer of Port Register .4 */#define CAPD5 (0x20) /* Comp. A Disable Input Buffer of Port Register .5 */#define CAPD6 (0x40) /* Comp. A Disable Input Buffer of Port Register .6 */#define CAPD7 (0x80) /* Comp. A Disable Input Buffer of Port Register .7 */十四、中断向量#define BASICTIMER_VECTOR (0 * 2u) /* 0xFFE0 Basic Timer */#define PORT2_VECTOR (1 * 2u) /* 0xFFE2 Port 2 */#define PORT1_VECTOR (4 * 2u) /* 0xFFE8 Port 1 */#define TIMERA1_VECTOR (5 * 2u) /* 0xFFEA Timer A CC1-2, TA */#define TIMERA0_VECTOR (6 * 2u) /* 0xFFEC Timer A CC0 */#define WDT_VECTOR (10 * 2u) /* 0xFFF4 Watchdog Timer */ #define COMPARATORA_VECTOR (11 * 2u) /* 0xFFF6 Comparator A */ #define NMI_VECTOR (14 * 2u) /* 0xFFFC Non-maskable */#define RESET_VECTOR (15 * 2u) /* 0xFFFE Reset [Highest Priori ty] */。

MSP430汇编语言介绍

MSP430汇编语言介绍

存储器地址编号 1101-1100 1103-1102 1105-1104 1107-1106 1109-1108 110B-110A
存储器内容 40 34 00 06 50 34 00 07 44 82 02 00
操作量 操作码 操作数 操作码 操作数 操作码 操作数
指令 MOV #n,R4 n=6H ADD #n,R4 n=7H MOV R4,&n n=200H
上一条是把立即数送至R4的指令,需要继续取操作数
① PC的内容1102H传至地址寄存器AR; ② PC的内容可靠送入AR后,PC的内容+2变 为1102H; ③ AR通过地址总线AB把地址信号1102H送 至存储器,经地址译码器选中存储器 1102H-1103H单元; ④ CPU通过控制总线CB向存储器发出读操作 控制指令; ⑤ 选中1102H-1103H存储单元的内容(00 06)读至数据总线DB上; ⑥ 读出的内容(00 06)经DB送至数据寄存 器DR; ⑦ 因为CPU处于取操作数阶段,取出为操作 数,执行该指令,则DR通过CPU内部总线 把数据(00 06)送入寄存器R4。
执行后 R10 0A125H R11 0FA00H 内存单元0A123H 1234H 内存单元0FA00H 1234H
汇编指令集中常用符号和缩写
八、MSP430指令系统
精简指令集(RISC)设计;
共有51条指令,包含27条硬件执行的内核 指令和24条基于现有硬件结构的高效率的 仿真指令;
数据传送类指令
1. 2. 3. 4. 5. 6. MOV CLR PUSH POP MOV SWPB MOV SXT ;将立即数234H传送到R5寄存器 ;将R5寄存器清零 ;保存状态寄存器,堆栈指针-2 ;从堆栈中恢复状态寄存器,堆栈指针+2 ;寄存器中的值为2345H ;执行后R5的内容为4523H ;寄存器中的值为2345H ;执行后R5的内容为0045H,因为低字节 符号位为0 MOV #2388H,R5 ;寄存器中的值为2388H SXT R5 ;执行后R5的内容为FF88H,因为低字节 符号位为1 (SXT:扩展符号位,低位字节符号扩展到高位字节) #234H,R5 R5 SR SR #2345H,R5 R5 #2345H,R5 R5

MSP430汇编指令集

MSP430汇编指令集

MSP430汇编指令集1000字MSP430是单片机系列的一种,其指令集为精简指令集(RISC)风格。

下面列出了MSP430汇编指令集的大致分类和一些具体指令,主要参考了TI官方的MSP430 Architecture Guide。

一、数据传送指令:1. MOV:将源操作数复制到目的操作数中;2. LPM:从程序存储器读取指定地址中的内容;3. SWPB:交换操作数(低字节和高字节互换)。

二、算术指令:1. ADD:将两个操作数相加并将结果存储到目的操作数中;2. SUB:将两个操作数相减并将结果存储到目的操作数中;3. INC:将操作数加1并将结果存在目的操作数中;4. DEC:将操作数减1并将结果存在目的操作数中;5. DADD:带进位加法;6. CMP:比较两个操作数,并将结果存储到程序状态字寄存器中。

三、逻辑指令:1. AND:将两个操作数进行按位与操作,并将结果存储到目的操作数中;2. OR:将两个操作数进行按位或操作,并将结果存储到目的操作数中;3. XOR:将两个操作数进行按位异或操作,并将结果存储到目的操作数中;4. RRA:将操作数右移一位,并将最高位存储到溢出位(程序状态字寄存器)中。

四、移位指令:1. RLC:将操作数左移一位,并将最高位的值存储到溢出位中;2. RRC:将操作数右移一位,并将最低位的值存储到溢出位中;3. SWAP:低字节和高字节互换;4. SXT:将操作数的最高位扩展到目的操作数的所有高位。

五、跳转和分支指令:1. JMP:无条件跳转到指定地址;2. RET:从子程序中返回到调用程序;3. CLR:将操作数清零;4. TEST:测试操作数的值是否为0,是则跳转到指定地址;5. JZ:操作数为0则跳转到指定地址;6. JNZ:操作数不为0则跳转到指定地址;7. JAE:无符号数操作数小于或等于指定无符号数则跳转到指定地址;8. JBE:无符号数操作数大于或等于指定无符号数则跳转到指定地址。

MSP430烧写程序

MSP430烧写程序

MSP430无论是仿真还是烧写程序,一般可以通过:JTAG、SBW、BSL接口进行。

1、JTAG是利用边界扫描技术,在430内部有逻辑接口给JTAG使用,内部有若干个寄存器连接到了430内部数据地址总线上,所以可以访问到430的所有资源,包括全地址FLASH、RAM及各种寄存器。

可以用于对430的仿真和编程,主要连接线有TMS、TCK、TDI、TDO,430还需要另两条线路RST、TEST来启动JTAG命令序列。

2、SBW是SPY-BI-WIRE,可以简称为两线制JTAG,主要有SBWTCK(连接到JTAG 接口的7脚TCK)与SBWTDIO(连接到JTAG接口的1脚TDO/TDI),该接口主要用于小于28脚的2系列单片机,因为28脚以内单片机的JTAG一般与IO口复用,为了给用于留有更多的IO资源,才推出SBW接口。

SBW同JTAG一样可以访问到430内部的所有资源。

注:目前MSP430F5XX系列中也有SBW接口,原理同2系列的SBW。

3、BSL是TI在430出厂时预先固化到MCU内部的一段代码,该代码用户不可读写,这有点类似与DSP的bootloader,但又与bootloader有明显的区别,BSL只能用于对MCU内部的FLASH访问,不能对其他的资源访问,所以只能用作编程器接口。

BSL通过UART协议与编程器连接通信。

编程器可以发送不同的通信命令来对MCU的存储器做不同的操作,可以把这种方式称为BSL接口。

BSL代码的启动有些特殊,一般430复位启动时PC指针指向FFFE复位向量,但可以通过特殊的启动方式可以使MCU在启动时让PC指向BSL内部固化的程序。

这种特殊的启动方式一般是由RST引脚与TEST(或TCK)引脚做一个稍复杂的启动逻辑后产生。

BSL启动后,就可以通过预先定义好的UART协议命令对MCU进行读写访问了。

4、一般的MCU都有代码加密功能,430是如何实现的呢?外部对430内部的代码读写只能通过上述的三种方式,只要把这三种方式都堵上,430的程序不就安全了吗?所以又引入了熔丝位,熔丝位只存在于JTAG、SBW接口逻辑内。

DAC8552驱动程序(MSP430)

DAC8552驱动程序(MSP430)

使用MSP430的DAC8552驱动程序,调试通过,不要感谢我!#include <msp430F5525.h>#include "DAC8552.h"void Clock_Init();int main( void ){// Stop watchdog timer to prevent time out resetWDTCTL = WDTPW + WDTHOLD;P1DIR = 0XFF;P1OUT = 0X00;P2DIR = 0XFF;P2OUT = 0X00;P3DIR = 0XFF;P3OUT = 0X00;P4DIR = 0XFF;P4OUT = 0X00;P5DIR = 0XFF;P5OUT = 0X00;P6DIR = 0XFF;P6OUT = 0X00;P7SEL = 0X80; //P7.7 MCLK输出P7DIR = 0X80;P1SEL = 0X01; //P1.0 ACLK输出P1DIR = 0X01;P2SEL = 0X04; //P2.2 SMCLK输出P2DIR = 0X04;Clock_Init();InitDAC8552();while (1){DAC8552();Delay1(); //max建立时间10usSYNC_H;}}//时钟初始化void Clock_Init(){// Initialize LFXT1unsigned int iq0;// Select XT1P5SEL |= 0x3C;UCSCTL6 &= ~(XT1OFF); // XT1 OnUCSCTL6 |= XCAP_3; // Internal load cap// Loop until XT1 fault flag is cleareddo{UCSCTL7 &= ~XT1LFOFFG; // Clear XT1 fault flagsfor (iq0 = 0xFF; iq0 > 0; iq0--);}while (UCSCTL7&XT1LFOFFG); // Test XT1 fault flagUCSCTL6 &= ~(XT2OFF); //XT2 ONUCSCTL6 |= XT2DRIVE0; //do{UCSCTL7 &= ~XT2OFFG; // Clear XT2 fault flagsfor (iq0 = 0xFF; iq0 > 0; iq0--);}while (UCSCTL7&XT2OFFG); // Test XT2 fault flagdo{UCSCTL7 &= ~(XT2OFFG + XT1LFOFFG + DCOFFG); // Clear XT2,XT1,DCO fault flagsSFRIFG1 &= ~OFIFG; // Clear fault flagsfor (iq0 = 0xFF; iq0 > 0; iq0--);}while (SFRIFG1&OFIFG); // Test oscillator fault flagUCSCTL4 = SELA_5 + SELM_5 + SELS_5;//UCSCTL5 = DIVA_3;}//头文件DAC8552.C#include <msp430F5525.h>#include "DAC8552.h"unsigned char shuju[3];/******************************Write_3_Byte************************************* ******/void Write_3_Byte(unsigned char xr[3]){int i;//P3OUT &=~0x08;SCLK_L;//P3OUT |= 0x10;SYNC_H;Delay1();//P3OUT &=~0x10;SYNC_L;Delay1();//P3OUT |= 0x08;SCLK_H;for (i = 0; i < 3 ; i++){Write_1_Byte(xr[i]);}Delay1();// SYNC_H;Delay1();}/******************************InitDAC8552************************************** *****/void InitDAC8552(void){//shuju[0] = 0x24; //OUTB//shuju[0] = 0x00;//shuju[0] = 0x34;//shuju[0] = 0x01;//shuju[0] = 0x36;//shuju[0] = 0x13;//shuju[0] = 0x27;shuju[0] = 0x10; //OUTA//shuju[0] = 0x24;shuju[1] = 0x80;shuju[2] = 0x00;}/******************************DAC8552***************************************** **/void DAC8552(void){Write_3_Byte(shuju);}/******************************Write_1_Byte************************************* ******/void Write_1_Byte(unsigned char date){int j;for( j = 0 ; j < 8 ; j++ ){Delay1();if( date & 0x80 ) //if((DataByte<<i)&0x80){//P3OUT |= 0x04;DIN_H;}else{//P3OUT &=~0x04;DIN_L;}Delay1();//P3OUT &=~0x08;SCLK_L;Delay1();//P3OUT |= 0x08;SCLK_H;Delay1();date <<= 1;}}/******************************Delay_10us*************************************** ****/void Delay_1us(unsigned int n){unsigned int i, j;for (j = 0; j < n; j++){for (i = 0 ; i < 8000; i++){_NOP();}}}/******************************Delay1 125ns 1/nMHZ S*******************************************/void Delay1(void){_NOP();}//头文件DAC8552.H#include <msp430F5525.h>#ifndef __DAC8552_H__#define __DAC8552_H__#define SYNC1 0x10#define SCLK 0x08#define DIN 0x04#define SYNC_SEL P3SEL &= ~SYNC1 // P3.4 IO#define SYNC_DDR_OUT P3DIR |= SYNC1 //P3.4输出#define SYNC_OUT P3OUT#define SYNC_H SYNC_OUT |= SYNC1 //SYNC置1#define SYNC_L SYNC_OUT &= ~SYNC1 //SYNC置0#define SCLK_SEL P3SEL &= ~SCLK // P3.3IO#define SCLK_DDR_OUT P3DIR |= SCLK //P3.3输出#define SCLK_OUT P3OUT#define SCLK_H SCLK_OUT |= SCLK //SCLK置1 #define SCLK_L SCLK_OUT &= ~SCLK //SCLK置0#define DIN_SEL P3SEL &= ~DIN //P3.2 #define DIN_DDR_OUT P3DIR |= DIN //DIN输出#define DIN_DDR_IN P3DIR &= ~DIN //DIN输入#define DIN_OUT P3OUT#define DIN_IN P3IN#define DIN_H DIN_OUT |= DIN#define DIN_L DIN_OUT &= ~DIN*///SYNC P3.4#define SYNC_H P3OUT |= 0x10; //1#define SYNC_L P3OUT &=~0x10; //0//SCLK P3.3#define SCLK_H P3OUT |= 0x08;#define SCLK_L P3OUT &=~0x08;//DIN P3.2#define DIN_H P3OUT |= 0x04;#define DIN_L P3OUT &=~0x04;extern unsigned char shuju[3];extern void Write_3_Byte(unsigned char xr[3]);extern void Write_1_Byte(unsigned char date);//extern void Delay_1ms(void);//extern void Delay(void);extern void Delay_10us(unsigned int q);extern void Delay1(void);extern void InitDAC8552(void);extern void DAC8552(void);#endif。

IARMSP430 使用指引

IARMSP430 使用指引

IARMSP430使用指引本指引是为配合推出的MSP430学习系统而写的,当然您也可以把它当成您使用IAR FOR MSP430(以下简写为EW430)的一个参考文档!本指引会按照建立一个项目的步骤来撰写,并且会插入附图以加快大家对IAR FOR MSP430的学习使用。

一、安装和运行EW430:EW430是IAR SYSTEMS SOFTWARE INC的产品,该公司的网站是,您可以到这个公司的网站下载到试用版的软件,它和正式版不同的是试用版可以免费使用一段时间而没有功能上的限制,超过这段试用期,如果您打算继续使用,那么您得购买此软件的授权。

下载了试用版后,点击安装包的SETUP.EXE,选择安装路径和安装方式或采用默认的安装,安装包会在目录下产生IAR的目录,并在”开始”菜单产生快捷方式,这一个工程对于经常使用软件的用户来说是非常简单的,因此不再AOSHU。

系统重启后,在系统栏会出现图1.1中的图标。

在这个图标上点击鼠标左键可以很方便的开启IAR FOR MSP和其它IAR系统软件(图1.2)。

图1.1图1.2运行后的界面如图1.3所示(以1.26A版为例)图1.3二、建立工程文件和添加文件我们习惯了在WINDOWS下的各种编程软件中以一个工程(PROJECT)来管理我们正在作的工作,EW430也不例外,因此第一步要作的就是新建一个工程或用其它方法来建立一个工程。

点击”File”菜单下的”New”菜单,出现图2.1中的框,选择”Project”后点击”确定”按键。

图2.1接下来会出现对话框,您得指定你的工程文件保存在哪个目录下图2.2我这此建立的是一个控制液晶模块1602A的工程,取名为lcm1602.prj。

然后点击”Create”按键生成这个项目。

图2.3图中的”Targets”一项中表示目前的这个工程的是用于调试的。

好了,工程文件已经建立完成了,现在可以把要用到的文件添加到工程中去。

要提醒您的是经常使用”File”菜单下的”Save all”保存您到目前完成的工作。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

/开发平台;MSP430IIC总线驱动代码本人试用过,可以成功的调通/////////////////////////////////////////////////////////////iic.c#include <msp430x14x.h>typedef unsigned char uchar;typedef unsigned int uint;#define SCL_H P1OUT |= BIT2#define SCL_L P1OUT &= ~BIT2#define SDA_H P1OUT |= BIT3#define SDA_L P1OUT &= ~BIT3#define SDA_in P1DIR &= ~BIT3 //SDA改成输入模式#define SDA_out P1DIR |= BIT3 //SDA变回输出模式#define SDA_val P1IN&BIT3 //SDA的位值#define TRUE 1#define FALSE 0/*******************************************函数名称:delay功能:延时约15us的时间参数:无返回值:无********************************************/void delay(void){uchar i;for(i = 0;i < 15;i++)_NOP();}/*******************************************函数名称:start功能:完成IIC的起始条件操作参数:无返回值:无********************************************/void start(void){SCL_H;SDA_H;delay();SDA_L;delay();SCL_L;delay();}/******************************************* 函数名称:stop功能:完成IIC的终止条件操作参数:无返回值:无********************************************/ void stop(void){SDA_L;delay();SCL_H;delay();SDA_H;delay();}/******************************************* 函数名称:mack功能:完成IIC的主机应答操作参数:无返回值:无********************************************/ void mack(void){SDA_L;_NOP(); _NOP();SCL_H;delay();SCL_L;_NOP();_NOP();SDA_H;delay();}/******************************************* 函数名称:mnack功能:完成IIC的主机无应答操作参数:无返回值:无********************************************/ void mnack(void){SDA_H;_NOP(); _NOP();SCL_H;delay();SCL_L;_NOP(); _NOP();SDA_L;delay();}/**********检查应答信号函数******************/ /*如果返回值为1则证明有应答信号,反之没有*/ /******************************************* 函数名称:check功能:检查从机的应答操作参数:无返回值:从机是否有应答:1--有,0--无********************************************/ uchar check(void){uchar slaveack;SDA_H;_NOP(); _NOP();SCL_H;_NOP(); _NOP();SDA_in;_NOP(); _NOP();slaveack = SDA_val; //读入SDA数值SCL_L;delay();SDA_out;if(slaveack) return FALSE;else return TRUE;}/******************************************* 函数名称:write1功能:向IIC总线发送一个1参数:无返回值:无********************************************/void write1(void){SDA_H;delay();SCL_H;delay();SCL_L;delay();}/******************************************* 函数名称:write0功能:向IIC总线发送一个0参数:无返回值:无********************************************/ void write0(void){SDA_L;delay();SCL_H;delay();SCL_L;delay();}/******************************************* 函数名称:write1byte功能:向IIC总线发送一个字节的数据参数:wdata--发送的数据返回值:无********************************************/ void write1byte(uchar wdata){uchar i;for(i = 8;i > 0;i--){if(wdata & 0x80) write1();else write0();wdata <<= 1;}SDA_H;_NOP();}/******************************************* 函数名称:writeNbyte功能:向IIC总线发送N个字节的数据参数:outbuffer--指向发送数据存放首地址的指针n--数据的个数返回值:发送是否成功的标志:1--成功,0--失败********************************************/ uchar writeNbyte(uchar * outbuffer,uchar n){uchar i;for(i = 0;i < n;i++){write1byte(* outbuffer);if(check()){outbuffer++;}else{stop();return FALSE;}}stop();return TRUE;}/******************************************* 函数名称:read1byte功能:从IIC总线读取一个字节参数:无返回值:读取的数据********************************************/ uchar read1byte(void){uchar rdata = 0x00,i;uchar flag;for(i = 0;i < 8;i++){SDA_H;delay();SCL_H;SDA_in;delay();flag = SDA_val;rdata <<= 1;if(flag) rdata |= 0x01;SDA_out;SCL_L;delay();}return rdata;}//////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //iic.h#ifndef __IIC_h__#define __IIC_h__extern void delay(void);extern void start(void);extern void stop(void);extern void mack(void);extern void mnack(void);extern unsigned char check(void);extern void write1(void);extern void write0(void);extern void write1byte(unsigned char wdata);extern unsigned char writeNbyte(unsigned char * outbuffer,unsigned char n); extern unsigned char read1byte(void);extern void readNbyte(unsigned char * inbuffer,unsigned char n);#endif。

相关文档
最新文档