找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2448|回复: 15
打印 上一主题 下一主题
收起左侧

求助!各位大神帮我看看哪里错误

  [复制链接]
跳转到指定楼层
楼主
错误提示如下:




程序如下:

//#include "NUC505Series.h"
//#include "PressureSensor.h"
//#define PSESNOR_ADDR 0x6D
volatile uint8_t i2c1_read = 0;
volatile uint8_t i2c1_addr = 0;
volatile uint8_t i2c1_reg = 0;
volatile uint8_t i2c1_data;
volatile uint8_t i2c1_done = 0;
uint8_t gpu8Pressure[5] = {0};


void I2C1_IRQHandler(void)
{
    uint32_t u32Status;

    u32Status = I2C_GET_STATUS(I2C1);

    if (I2C_GET_TIMEOUT_FLAG(I2C1))
    {
        I2C_ClearTimeoutFlag(I2C1);
    }
    else
    {
        if (i2c1_read)
        {
         switch (u32Status)
{
case 0x08:
//Write SLA+W to Register I2CDAT
I2C_SET_DATA(I2C1, (i2c1_addr << 1));
I2C_SET_CONTROL_REG(I2C1, I2C_SI);
break;
case 0x18:
//SLA+W has been transmitted and ACK has been received
I2C_SET_DATA(I2C1, i2c1_reg);
I2C_SET_CONTROL_REG(I2C1, I2C_SI);
break;
case 0x20:
//SLA+W has been transmitted and NACK has been received
I2C_SET_CONTROL_REG(I2C1, I2C_STA | I2C_STO | I2C_SI);
break;
case 0x28:
I2C_SET_CONTROL_REG(I2C1, I2C_STA | I2C_SI);
break;
case 0x10:
//Repeat START has been transmitted and prepare SLA+R
I2C_SET_DATA(I2C1, (i2c1_addr << 1) | 0x01);  //Write SLA+R to Register I2CDAT
I2C_SET_CONTROL_REG(I2C1, I2C_SI);
break;
case 0x40:
//SLA+R has been transmitted and ACK has been received
I2C_SET_CONTROL_REG(I2C1, I2C_SI);
break;
case 0x58:
//DATA has been received and NACK has been returned

i2c1_data = I2C_GET_DATA(I2C1);
I2C_SET_CONTROL_REG(I2C1, I2C_STO | I2C_SI);
i2c1_done = 1;
break;
}
        }
        else
        {
         switch (u32Status)
{

case 0x08: //START has been transmitted and prepare SLA+W
I2C_SET_DATA(I2C1, (i2c1_addr << 1)); //Write SLA+W to Register I2CDAT
I2C_SET_CONTROL_REG(I2C1, I2C_SI);
break;
case 0x18: // SLA+R has been transmitted and ACK has been received
I2C_SET_DATA(I2C1, i2c1_reg);
I2C_SET_CONTROL_REG(I2C1, I2C_SI);
break;
case 20:
I2C_SET_CONTROL_REG(I2C1, I2C_STA | I2C_STO | I2C_SI);  
break;
case 0x28: //DATA has been received and NACK has been returned
I2C_SET_DATA(I2C1, i2c1_data);
I2C_SET_CONTROL_REG(I2C1, I2C_STO | I2C_SI);
i2c1_done = 1;
break;
}
        }
    }
u32Status = I2C_GET_STATUS(I2C1);
}


void I2C1_Read(uint8_t u8Addr, uint8_t u8RegAddr, uint8_t *pu8RetValue)
{
    i2c1_done = 0;
    i2c1_read = 1;
    i2c1_addr = u8Addr;
    i2c1_reg = u8RegAddr;
    I2C_SET_CONTROL_REG(I2C1, I2C_STA);
    while (!i2c1_done);
    *pu8RetValue = i2c1_data;
}



void I2C1_Write(uint8_t u8Addr, uint8_t u8RegAddr, uint8_t u8Value)
{
    i2c1_done = 0;
    i2c1_read = 0;
    i2c1_addr = u8Addr;
    i2c1_reg = u8RegAddr;
    i2c1_data = u8Value;
    I2C_SET_CONTROL_REG(I2C1, I2C_STA);
    while (!i2c1_done);

}

void Sample()
{
   I2C1_Write(PSESNOR_ADDR, 0x30, 0x0A);
   I2C1_Read(PSESNOR_ADDR, 0x30, &gpu8Pressure[0]);
   I2C1_Read(PSESNOR_ADDR, 0x06, &gpu8Pressure[0]);
   I2C1_Read(PSESNOR_ADDR, 0x07, &gpu8Pressure[1]);
   I2C1_Read(PSESNOR_ADDR, 0x08, &gpu8Pressure[2]);
   I2C1_Read(PSESNOR_ADDR, 0x09, &gpu8Pressure[3]);
   I2C1_Read(PSESNOR_ADDR, 0x0A, &gpu8Pressure[4]);
}

void TMR2_IRQHandler(void)
{
    // clear timer interrupt flag
    TIMER_ClearIntFlag(TIMER2);

    //Sample();
    TIMER_GetIntFlag(TIMER2);
}

void PressureSensor_Init(void)
{
uint8_t u8A5 = 0;
I2C_Open(I2C1, 400000);

I2C_EnableInt(I2C1);
NVIC_EnableIRQ(I2C1_IRQn);

I2C1_Read(PSESNOR_ADDR, 0xA5, &u8A5);
u8A5 &= 0xFD;
I2C1_Write(PSESNOR_ADDR, 0xA5, u8A5);


    while (1)
    {
        Sample();
        msDelay(100);
    }

TIMER_Open(TIMER2, TIMER_PERIODIC_MODE, 10);
    TIMER_EnableInt(TIMER2);
    NVIC_EnableIRQ(TMR2_IRQn);
    TIMER_Start(TIMER2);

}


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:111634 发表于 2017-11-9 19:31 | 只看该作者
为什么这么长时间没人回帖?冗长程序没人看,特别是没有注解的。你想啊!别人有那么多时间吗?
回复

使用道具 举报

板凳
ID:247870 发表于 2017-11-9 20:32 来自手机 | 只看该作者
没注解不好看
回复

使用道具 举报

地板
ID:246391 发表于 2017-11-9 23:03 | 只看该作者
路过学习一下
回复

使用道具 举报

5#
ID:111634 发表于 2017-11-10 12:13 | 只看该作者

你怎么“学习一下”?请谈谈体会。
回复

使用道具 举报

6#
ID:248046 发表于 2017-11-10 13:56 | 只看该作者
提示在XG....c文件的第四行在i2c1_read缺一个分号,可以检查下这个位置是不是中英切换出现的问题。也可以看看XG....h头文件在定义时定义错误
回复

使用道具 举报

7#
ID:246473 发表于 2017-11-10 14:43 | 只看该作者
确认一下void I2C1_Read函数上面是不是多了一个}
回复

使用道具 举报

8#
ID:247748 发表于 2017-11-10 14:47 | 只看该作者
提示在XG....c文件的第四行在i2c1_read缺一个分号,可以检查下这个位置是不是中英切换出现的问题。也可以看看XG....h头文件在定义时定义错误

同意这个方法
回复

使用道具 举报

9#
ID:242578 发表于 2017-11-12 17:20 | 只看该作者
谢谢各位大神的回复,这段程序是压力传感器厂家提供的测试程序。由于看不懂C,想用Keil uVision5编译后,修改为汇编程序。现在编译错误,无法进行下一步。
本人用汇编写过一些小项目,也正在学习C。
回复

使用道具 举报

10#
ID:242578 发表于 2017-11-12 17:29 | 只看该作者
zl2168 发表于 2017-11-9 19:31
为什么这么长时间没人回帖?冗长程序没人看,特别是没有注解的。你想啊!别人有那么多时间吗?

谢谢您的回复,我也是抱着试试看的心态,希望能解决。这段程序是传感器厂家提供的测试程序。
回复

使用道具 举报

11#
ID:248710 发表于 2017-11-12 20:07 | 只看该作者
一般注释是可以用颜色区分的,这么长有点看不懂了,你可以把一些无关紧要的语句删掉,这样看起来省力点
回复

使用道具 举报

12#
ID:248754 发表于 2017-11-12 22:32 | 只看该作者
上一行 少一个分号  应该是
回复

使用道具 举报

13#
ID:248920 发表于 2017-11-13 14:02 | 只看该作者
你把if (i2c1_read)改成if (2c1_read==0)试试
回复

使用道具 举报

14#
ID:249005 发表于 2017-11-13 17:55 | 只看该作者
坐等。。。。。。。。。。。。。。
回复

使用道具 举报

15#
ID:249025 发表于 2017-11-13 18:59 | 只看该作者
路过学习一下
回复

使用道具 举报

16#
ID:249083 发表于 2017-11-13 21:10 | 只看该作者
第三十七行有多打東西
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表