哈哈,刚弄来MAG3110模块,这里把资料上传,分享给大家!在附件里
单片机源程序如下:
- #include "config.h"
- uchar DataX_L,DataX_H,DataY_L,DataY_H,DataZ_L,DataZ_H;
- uchar DataX_L_Offset,DataX_H_Offset,DataY_L_Offset,DataY_H_Offset,DataZ_L_Offset,DataZ_H_Offset;
- uchar Data_XYZ[10];
- bit bdata Time1_Flag; //For timer 0
- //************************************************************************************
- bit UART_Flag;
- uchar UART_Data;
- uchar Acc_Data[10];
- //******************************************************************************************
- //*函 数 名: delays ************
- //*功能描述: 延时 ************
- //******************************************************************************************
- void delays(int xxxx)
- {
- uint dlay;
- uint dlay1;
- //**************************************************************************
- for(dlay=xxxx;dlay>0;dlay--)
- for(dlay1=100;dlay1>0;dlay1--);
- //**************************************************************************
- }
- //******************************************************************************************
- void serialset () //串口设置,使用TR1做波特率发生器
- {
- TMOD=0x21; //定义串行口 (T1波特率发生器)
- //******************************************************************************************
- TL1=0xFA; //波特率为9600
- TH1=0xFA; //F=11.0592 M
- //******************************************************************************************
- //TL1=0xF4; //波特率为9600
- //TH1=0xF4; //F=22.1184 M
- //******************************************************************************************
- EA = 1;
- PCON=0x80;
- ET1=0;
- TR1=1;
- TI=0;
- ES=1;
- //ES=0; //禁止中断
- SCON=0x50;
- PS=1; //串口中断优先级设置最高
- }
- //*****************************************************************************************/
- /******************************************************************************************
- void serialset() //串口设置,使用独立波特率发生器
- {
- SCON =0x50;
- PCON=0x80;
- //BRT =0xF4; //波特率为9600 F=22.1184 M
- BRT =0xFA; //波特率为9600 F=11.0592 M
- AUXR =0x11;
- PS=1; //串口中断优先级设置最高
- ES=1;
- }
- //******************************************************************************************/
- //****************************************************************************************
- void sendchar(uchar sendsign) //单字节发送子程序
- {
- ES=0;
- SBUF=sendsign;
- while(TI==0);
- TI=0;
- ES=1;
- }
- //*****************************************************************************************
- void int0 () interrupt 0 using 3 //外部中断0
- {
- IE0=0;
- EA=0;
- IE0=0;
- EA=1;
- }
- //****************************************************************************************
- //*函 数 名: int1 **********
- //*功能描述: 外部中断0 **********
- //****************************************************************************************
- void int1 () interrupt 2 using 3 //外部中断1
- {
- //************************************************************
- EA=0;
- IE1=0;
- EA=1;
- //************************************************************
- }
- //****************************************************************************************
- //定时器0中断
- void time0 (void) interrupt 1
- {
- EA=0;
- TF0=0;
- EA=1;
- }
- //****************************************************************************************
- //定时器1中断
- void time1 (void) interrupt 3
- {
- TF1=0;
- }
- //************************************************************************************
- void UART_isr() interrupt 4
- {
- ES=0;
- if(RI)
- {
- RI =0;
- UART_Flag =1;
- UART_Data =SBUF;
- }
- ES=1;
- }
- //****************************************************************************************
- main( )
- {
- uchar i;
- delays(8000);
- delays(8000);
- /*********************************
- P4SW =0x70; //P4 as I/O
- P4M1 =0x00;
- P4M0 =0xff;
- //*********************************/
- //*********************************
- //LCD_Init();
- //Clear_Screen();
- serialset();
- //CT_PutString8_16(10,6,"TEST",0);
- EE24_SDA=1;
- EE24_SCL=0;
- MAG3110_Init();
- //temp =TEST_ACK();
- //******************************************************************************
- delays(8000);
- i= EE24_RandomRead(WHO_AM_I_REG);
- if (i == MAG3110Q_ID) //确认初始化是否成功
- {
- //putstr("ID:MAG3110Q,OK!\n ");
- //sendchar(0x55);
- }
- else //初始化失败
- {
- //putstr("ID not identified,FAILED!\n");
- //sendchar(0x88);
- }
- while(1)
- {
- //********************* 触发测量模式 ********************************************
- EE24_ByteWrite(CTRL_REG1,0x1A); //启动测量 触发测量模式
- i=EE24_RandomRead(STATUS_00_REG);
- if(i&ZYXDR_MASK) //数据就绪
- {
- DataX_H = EE24_RandomRead(OUT_X_MSB_REG); //读取X轴高字节
- DataX_L = EE24_RandomRead(OUT_X_LSB_REG); //读取X轴低字节
- DataY_H = EE24_RandomRead(OUT_Y_MSB_REG); //读取Y轴高字节
- DataY_L = EE24_RandomRead(OUT_Y_LSB_REG); //读取Y轴低字节
- DataZ_H = EE24_RandomRead(OUT_Z_MSB_REG); //读取Z轴高字节
- DataZ_L = EE24_RandomRead(OUT_Z_LSB_REG); //读取Z轴低字节
-
- sendchar(0x66);
- sendchar(DataX_H);
- sendchar(DataX_L);
- sendchar(DataY_H);
- sendchar(DataY_L);
- sendchar(DataZ_H);
- sendchar(DataZ_L);
- //EE24_SequentialRead(Data_XYZ,OUT_X_MSB_REG,6);
- //sendchar(0x99);
- //for(i=0;i<6;i++)
- // sendchar(Data_XYZ[i]);
- }
- //******************************************************************************/
- /********************* 连续测量模式 ********************************************
- i=EE24_RandomRead(STATUS_00_REG);
- if(i&ZYXDR_MASK) //数据就绪
- {
- DataX_H = EE24_RandomRead(OUT_X_MSB_REG); //读取X轴高字节
- DataX_L = EE24_RandomRead(OUT_X_LSB_REG); //读取X轴低字节
- DataY_H = EE24_RandomRead(OUT_Y_MSB_REG); //读取Y轴高字节
- DataY_L = EE24_RandomRead(OUT_Y_LSB_REG); //读取Y轴低字节
- DataZ_H = EE24_RandomRead(OUT_Z_MSB_REG); //读取Z轴高字节
- DataZ_L = EE24_RandomRead(OUT_Z_LSB_REG); //读取Z轴低字节
-
- sendchar(0x66);
- sendchar(DataX_H);
- sendchar(DataX_L);
- sendchar(DataY_H);
- sendchar(DataY_L);
- sendchar(DataZ_H);
- sendchar(DataZ_L);
- EE24_SequentialRead(Data_XYZ,OUT_X_MSB_REG,6);
- sendchar(0x99);
- for(i=0;i<6;i++)
- sendchar(Data_XYZ[i]);
- //************************************************ read offset
- DataX_H_Offset = EE24_RandomRead(OUT_X_Offset_MSB_REG); //读取X轴高字节
- DataX_L_Offset = EE24_RandomRead(OUT_X_Offset_LSB_REG); //读取X轴低字节
- DataY_H_Offset = EE24_RandomRead(OUT_Y_Offset_MSB_REG); //读取Y轴高字节
- DataY_L_Offset = EE24_RandomRead(OUT_Y_Offset_LSB_REG); //读取Y轴低字节
- DataZ_H_Offset = EE24_RandomRead(OUT_Z_Offset_MSB_REG); //读取Z轴高字节
- DataZ_L_Offset = EE24_RandomRead(OUT_Z_Offset_LSB_REG); //读取Z轴低字节
- //sendchar(0x88);
- //sendchar(EE24_RandomRead(CTRL_REG1));
- sendchar(0x99);
- sendchar(DataX_H_Offset);
- sendchar(DataX_L_Offset);
- sendchar(DataY_H_Offset);
- sendchar(DataY_L_Offset);
- sendchar(DataZ_H_Offset);
- sendchar(DataZ_L_Offset);
- ……………………
- …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
所有资料51hei提供下载:
MAG3110 三轴数字地球磁场地磁传感器模块 MAG3110FCR.rar
(428.29 KB, 下载次数: 71)
|