新聞中心

        EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > MPU6050使用I2C協(xié)議讀出X軸原始數(shù)據(jù)的51單片機程序

        MPU6050使用I2C協(xié)議讀出X軸原始數(shù)據(jù)的51單片機程序

        作者: 時間:2016-12-01 來源:網(wǎng)絡 收藏
        void i2_sj_x(uchar addr,uchar Data) //往設備內(nèi)寫入數(shù)據(jù)(參數(shù) 1、寄存器地址 2、寫入的數(shù)據(jù))
        {
        i2_qs(); //起始信號
        i2_fs(SlaveAddress); //設備地址+寫信號
        i2_fs(addr); //寄存器內(nèi)部地址
        i2_fs(Data); //寫入設備的數(shù)據(jù)
        i2_tz(); //停止信號
        }
        uchar i2_sj_d(uchar addr) //讀取數(shù)據(jù)(參數(shù) 寄存器地址)
        {
        uchar Data;
        i2_qs(); //起始信號
        i2_fs(SlaveAddress); //設備地址+寫信號
        i2_fs(addr); //寄存器內(nèi)部地址
        i2_qs(); //起始信號
        i2_fs(SlaveAddress+1); //設備地址+讀信號
        Data = i2_js(); //讀取數(shù)據(jù)
        i2_ack(0); //ACK應答
        i2_tz(); //停止信號
        return Data; //返回讀取的數(shù)據(jù)
        }
        //*******************I2C操作協(xié)議******************************
        void mup6050()
        {
        i2_sj_x(PWR_MGMT_1, 0x00);
        i2_sj_x(SMPLRT_DIV, 0x07);
        i2_sj_x(CONFIG, 0x06);
        i2_sj_x(GYRO_CONFIG, 0x18);
        i2_sj_x(ACCEL_CONFIG, 0x01);
        /*
        Single_WriteI2C(PWR_MGMT_1, 0x00); //解除休眠狀態(tài)
        Single_WriteI2C(SMPLRT_DIV, 0x07); //陀螺儀采集頻率
        Single_WriteI2C(CONFIG, 0x06);//低通濾波頻率
        Single_WriteI2C(GYRO_CONFIG, 0x18);//陀螺儀自檢及測量范圍
        Single_WriteI2C(ACCEL_CONFIG, 0x01);//加速計自檢、測量范圍及高通濾波頻率
        */
        }
        /**************************************串口**********************************/
        void CSH (void) //初始化串口
        {
        SCON = 0x50; // SCON: 模式 1, 8-bit UART, 使能接收
        TMOD |= 0x20; // TMOD: timer 1, mode 2, 8-bit 重裝
        TH1 = 0xFD; // TH1: 重裝值 9600 波特率 晶振 11.0592MHz
        TR1 = 1; // TR1: timer 1 打開
        EA = 1; //打開總中斷
        //ES = 1; //打開串口中斷
        }
        void SendByte(unsigned char dat) //發(fā)送一個字符
        {
        SBUF = dat; //SBUF 串行數(shù)據(jù)緩沖器
        while(!TI); //TI發(fā)送中斷標志位 (當數(shù)據(jù)發(fā)送完畢后由硬件置 1 否則等待硬件置 1)
        TI = 0;
        }
        /************************************************************************************/
        void main(void)
        {
        uchar dat1,dat2,i;
        mup6050();
        CSH();
        /*
        i2_sj_x(3,0x0f); //數(shù)據(jù)寫入24c02
        DelayMs(50);
        dat = i2_sj_d(3); //從24c02中讀取數(shù)據(jù)
        */
        //P1 = dat; //使用8個LED顯示讀出的數(shù)據(jù)
        while(1)
        {
        dat1 = i2_sj_d(GYRO_XOUT_H);
        dat2 = i2_sj_d(GYRO_XOUT_H+1);
        P1 = dat1;
        for(i=0;i<100;i++)
        DelayMs(10);
        P1 = dat2;
        for(i=0;i<100;i++)
        DelayMs(10);
        SendByte(dat1);
        SendByte(dat2);
        }
        }
        上一頁 1 2 下一頁

        評論


        技術專區(qū)

        關閉
        主站蜘蛛池模板: 南投市| 阿图什市| 呼伦贝尔市| 桦南县| 上栗县| 随州市| 安泽县| 黄山市| 石门县| 沙田区| 镇平县| 镇雄县| 石家庄市| 长沙市| 永福县| 曲松县| 南华县| 镇坪县| 正镶白旗| 兰溪市| 四子王旗| 皮山县| 银川市| 六枝特区| 潍坊市| 新泰市| 门头沟区| 榆中县| 安徽省| 黄大仙区| 宣恩县| 康乐县| 顺昌县| 白水县| 定襄县| 汉源县| 伊通| 沭阳县| 枣庄市| 乐业县| 习水县|