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设置为输入
  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。

相关文档
最新文档