请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
部件号:MSP430G2553 工具/软件:Code Composer Studio
大家好,我已经将MSP430与mpu6050进行了交互,但当它到达注释“问题行”的行时,我的代码停止运行。 如果有人对代码在达到该线时为什么不继续存在有任何想法,那将是非常有帮助的。
#define use_clock #define use_I2C_USCI #define use_MPU6050 #define use_UART ////////////////////////////////////////////// #include <wchar.h> #include "stdio.h" //#include "string.h" #include "Library/mybuf.h" #include <match.h> #include "msp430g2553.h" #include "Library/Global.h" #include "Library/UART.h" #include "Library/Clock.h"#include "Library/Clock.h=50; I2c=50; //Chu y Gyro bi Sai So Tinh Khong dong Nhat KHI Goc quay thay doi // Khong Tinh Duoc vi Phan Cua gyro void main() { WDTCTL = WDTPW | WDTHOLD; select_Clock (DCO_16MHz); _delay_cycles (10万); // Khoi tao Ngat timer // TAO timer 0.5 s //TACCR0 = 1万; //TACCTL0 = CCIE; //TACTL = tassel_2 + MC_1 + ID_0; // SMCLK/8,UP模式 P1DIR|=BIT0; UART_Init(); //UART_Write_Char(10); //Ky tu xuong dong //UART_Write_String ("Ket noi Thanh Cong"); //UART_Write_Char(10); //Ky tu xuong dong //UMP50_UMP50_UMP50/ UMP50_UMP50_寄存 器 //Calibrate_Gyros (); _Delay_Cycles (32万); Get_Accel_Values(); Get_Gyro_values(); ACCEL_XOUT = 0; Accel_oout = 0; ACCEL_ZOUT = 0; ACCEL_XOUT_OST=0; // ACCEL_OUT_OSTE=0; ACCEL_ZOUT_OST=0; Accel_XA =0; ACCEL_YA =0; ACCEL_ZA =0; ACCEL_XV =0; ACCEL_YV =0; Accel_ZV = 0; ACCEL_XDECAC=0; ACCEL_YDECAC=0; ACCEL_ZDECAC=0; _DELAY周期(100万); //__bis_sr_register(GIE); //cho phep Ngat hoat dong while 2 % (1){//Get_Gyro_values();P1OUT^=BIT0;//sprintf (buff,"gx:%d GY:%d GZ:%d:%d:%d:%d:%d:%d:%d:%d_extru_1';5 % ACXout_1' 1 % 4 % ;AC1'写入;ACXout_1';AC_1' 3 % 6 % //_Delay_Cycles (1万); UART_Write_Char ('2'); Sprintf (buff,"%d",ACCEL_UYD); UART_Write_String (buff); UART_Write_Char ('); //_DELAY周期(1万); UART_Write_Char ('3'); Sprintf (buff,"%d",ACCEL_ZOUT); UART_Write_String (buff); UART_Write_Char ('); _delay_cycles(1万); Get_Accel_values(); }// 计时器A0中断服务例程 #pragma vector=TIMER0_A0_vector __interrupt void Timer_A0 (void){ }
#ifdef use_I2C_USCI
#define MPU6050_address 0x68
#define DS1307_address 0x68
#define LM92_address 0x48
/********************************************************************** \
* 原型(Nguyen Mau Ham) *
******************** /
void Init_I2C_USCI (unsigned char addr);
void set_Address (unsigned char addr);
unsigned char ByteRead_I2C_USCI (unsigned
char address,unsigned char Data);unsigned
char Read_unsigned_USCI (unsigned char Addr_Data,*************************************************************************Data,unsigned char_/unsigned
\
* 函数(noi dung ham) *
******************** /
void Init_I2C_USCI (无符号字符地址)
{
P1SEL || BIT6 + BIT7; //将I2C引脚分配给USI_B0
P1SEL2|= BIT6 + BIT7; //将I2C引脚分配给USI_B0
UCB0CTL1 |= UCSWRST; //启用软件重置
UCB0CTL0 = UCCMST+UMODE_3+UCSYNC; // I2C主控,同步模式
UCB0CTL1 = UCSSEL_2+UCSWRST; //使用SMCLK,保持软件重置
UCB0BR0 =40; // fSCL = SMCLK/40 =~400kHz
UCB0BR1 = 0;
UCB0I2CSA =地址; //设置从属地址
UCB0CTL1 &=~UCSWRST; //清除软件重置,恢复操作
}
void set_Address(unsigned char addr)
{
UCB0CTL1 |= UCSWRST;
UCB0I2CSA =地址; //设置从属地址
UCB0CTL1 &=~UCSWRST; //清除SW复位,恢复操作
}
unsigned char ByteRead_I2C_USCI (unsigned char地址)
{
while (UCB0CTL1 & UCTXSTP); // Cho Tin Hieu I2C STT Duoc GUI di
UCB0CTL1 || UCTR + UCTXSTT; // I2C TX,启动
时间(!(IFG2和UCB0TXIFG)); //问题行
UCB0TXBUF =地址; // Dia chi Luu Gia三秒
时间(!(IFG2和UCB0TXIFG)); //问题行
UCB0CTL1 &=~UCTR; // I2C RX
UCB0CTL1 || UCTXSTT; // I2C重新启动
IFG2 &=~UCB0TXIFG; // XOA CO Ngat USI_B0 TX
while (UCB0CTL1和UCTXSTT); // Cho den KHI I2C STT Duoc GUI di
UCB0CTL1 || UCTXSTP; // GUI位停止
返回UCB0RXBUF;
}//doc
1 mang tu DS
unsigned char WordRead_I2C_USCI (unsigned char Addr_Data,unsigned char *Data, unsigned char Length)
{
unsigned char I=0;
while (UCB0CTL1 & UCTXSTP); //循环直到I2C STT被发送
UCB0CTL1 |= UCTR + UCTXSTT; // I2C TX,启动条件
,同时(!(IFG2和UCB0TXIFG));
IFG2 &=~UCB0TXIFG; //清除USI_B0 TX int标志
IF (UCB0STAT和UCNACKIFG)返回UCB0STAT; //Neu bao loi
UCB0TXBUF = Addr_Data; // Dia chi Luu Gia三秒
时间(!(IFG2和UCB0TXIFG));
IF (UCB0STAT和UCNACKIFG)返回UCB0STAT; //Neu bao loi
UCB0CTL1 &=~UCTR; // I2C RX
UCB0CTL1 || UCTXSTT; // I2C启动条件
IFG2 &=~UCB0TXIFG; // Clear USI_B0 TX int flag
while (UCB0CTL1 & UCTXSTT); //循环直至I2C STT被发送
(I=0;I<(Length-1);I++)
{
while (!(IFG2和UCB0RXIFG));
IFG2 &=~UCB0TXIFG; // Clear USI_B0 TX int flag
Data[i]= UCB0RXBUF;
}
While (!(IFG2&UCB0RXIFG));
IFG2 &=~UCB0TXIFG; // Clear USI_B0 TX int flag
UCB0CTL1 || UCTXSTP; //第一个TX
数据后的I2C停止条件[Length-1]= UCB0RXBUF;
IFG2 &=~UCB0TXIFG; // clear USI_B0 tx int标志
返回0;
}
unsigned char ByteWrite_I2C_USCI (unsigned char address,unsigned char data)
{
while (UCB0CTL1 & UCTXSTP); // Cho den KHI Tin Hieu STT Duoc GUI xong
UCB0CTL1 |= UCTR + UCTXSTT; // I2C TX,GUI位启动
时(!(IFG2&UCB0TXIFG)); // cho cho bit start GUI xong
if(UCB0STAT & UCNACKIFG) Return UCB0STAT; //Neu bao loi thì thoat Khoi HAM
UCB0TXBUF = address; // GUI gi Thanh ackifghi can/ UCB0ghi
(UCB0gi
) // neu bao loi thì thoat Khoi Ham
UCB0TXBUF = data; // gui du reeale, while
(!(IFG2&UCB0TXIFG)); // Cho gui xong
if(UCB0STAT & UCNACKIFG) return UCB0STAT; //Neu dothoi thì STP at Khoi HAM
UCB0XL1;UCB0; UCB0CTXL1 = // GUI位停止
IFG2 &=~UCB0TXIFG; // XOA co USI_B0 TX
返回0;
}
unsigned int read_LM92()
{
unsigned char A;
while (UCB0CTL1 & UCTXSTP); //循环直到I2C STT被发送
UCB0CTL1 |= UCTR + UCTXSTT; // I2C TX,启动条件
,同时(!(IFG2和UCB0TXIFG));
UCB0TXBUF = 0x00; // Dia chi Luu Gia三秒
时间(!(IFG2&UCB0TXIFG));
UCB0CTL1 &=~UCTR; // I2C RX
UCB0CTL1 || UCTXSTT; // I2C启动条件
IFG2 &=~UCB0TXIFG; // Clear USI_B0 TX int flag
while (UCB0CTL1 & UCTXSTT); //循环直到I2C STT被发送
A = UCB0RXBUF;
而(UCB0CTL1 & UCTXSTT); //循环直到I2C STT被发送
UCB0CTL1 || UCTXSTP; //第一
个TX返回后的I2C停止条件(A<<8)|UCB0RXBUF);
}
#endif