在用MSP430G2553调试MLX90614红外测温传感器时,输出的值始终为-273.1,我认为应该是读取寄存器内容为0所致,我的程序使用STM32程序修改后进行调试的,原32程序输出正确,但误差较大。修改前后的程序时序相同,但就是无法使用MSP430进行调试,想请大神帮忙看看是哪里有问题。
原32程序详见:https://blog.csdn.net/qq_39400113/article/details/107099944?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-6.add_param_isCf&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-6.add_param_isCf
以下为430程序,求指教:
#define MCLK 8000000
#define CPU_F ((double)MCLK)
#define delay_us(x) __delay_cycles((long)(CPU_F*(double)x/1000000.0)) // MS级延时函数
#define delay_ms(x) __delay_cycles((long)(CPU_F*(double)x/1000.0)) // US级延时函数
#define delay_s(x) __delay_cycles((long)(CPU_F*(double)x/1.0)) // S级延时函数
#define ACK 0
#define NACK 1 //不应答或否定的应答
#define SA 0x5A //从机地址,单个MLX90614时地址为0x00,多个时地址默认为0x5a
#define RAM_ACCESS 0x00 //RAM access command
#define EEPROM_ACCESS 0x20 //EEPROM access command
#define RAM_TOBJ1 0x07 //To1 address in the eeprom
#define SDA_OUT P2DIR|=BIT3
#define SDA_H P2OUT|=BIT3
#define SDA_L P2OUT&=~BIT3
#define SDA_IN P2DIR&=~BIT3
#define SDA ((P2IN&BIT3)>>1)
#define SCL_OUT P2DIR|=BIT4 //SCL低电平时,SDA管脚上数据发生改变;SCL上升沿,MD和SD读取数据
#define SCL_H P2OUT|=BIT4
#define SCL_L P2OUT&=~BIT4
volatile unsigned int x=2;
unsigned char PEC; //错误代码包
unsigned char TEMPL;
unsigned char TEMPH;
void SMBus_StartBit(void);
void SMBus_StopBit(void);
void SMBus_SendBit(unsigned char);
unsigned char SMBus_SendByte(unsigned char);
unsigned char SMBus_ReceiveBit(void);
unsigned char SMBus_ReceiveByte(unsigned char);
unsigned short SMBus_ReadMemory(unsigned char, unsigned char);
unsigned char PEC_Calculation(unsigned char*);
float SMBus_ReadTemp(void);
void mlx09614_init() //传感器初始化
{
SDA_OUT;
SCL_OUT;
P2REN|=BIT3+BIT4;
P2OUT &= ~ BIT3 + BIT4;
}
/*******************************************************************************
- 函数名: MLX90614MLX90614 发起始位 SMBus_StartBit
- 功能 : MLX90614 发起始位 产生起始位
- Input : None
- Output : None
- Return : None
*******************************************************************************/
void SMBus_StartBit(void