⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 倾角传感器.c

📁 51单片机SPI读取SCA100角度值,带温度补偿,精度达到0.008度.
💻 C
字号:
#include <reg52.h>
//#include "defs_c51_manio.h"
#include "INTRINS.H"
#define uchar unsigned char
#define uint unsigned int

unsigned int SPI_ReadBits( uchar n );
void SPI_WriteByte( uchar wdata );
void SPI_Start(void);
void SPI_Stop(void);
void SPI_Reset(void);
void SPI_Delay(unsigned char);
unsigned int SPI_GetX( void );
unsigned int SPI_GetY( void );
void SPI_Init( void );


#define MEAS 0x00 //测量模式
#define RWTR 0x08 //读写温度数据寄存器
#define STX  0x0E //x通道自检
#define STY  0x0F //Y通道自检
#define RDAX 0x10 //读X通道加速度值
#define RDAY 0x11 //读Y通道加速度值


sbit CLK = P0^7;
sbit MISO = P1^0;
sbit MOSI = P1^1;
sbit CSB = P1^2;


//初始化CSA100T
void init()
 {
   
   CSB=1;//CSA100T片选无效
 }

//
void SPI_Stop( void ){
    CLK = LOW;
    CSB = HIGH;    
    SPI_Delay(10);
}
void SPI_Reset(void){
    SPI_Stop();
}

void SPI_Delay(uchar n){
    while(n--);
}

void SPI_Start(void){
    CLK = LOW;
    CSB = LOW;
    SPI_Delay(10);
}


//初始化串口
void init_serialcomm( void ) 
{ 
SCON = 0x50 ; //SCON: serail mode 1, 8-bit UART, enable ucvr 
TMOD |= 0x20 ; //TMOD: timer 1, mode 2, 8-bit reload 
PCON |= 0x80 ; //SMOD=1; 
TH1 = 0xF4 ; //Baud:4800 fosc=11.0592MHz 
IE |= 0x90 ; //Enable Serial Interrupt 
TR1 = 1 ; // timer 1 run 
// TI=1; 
} 

//主机读入一个比特
//结束状态: CLK=0
bit SPI_ReadBit(void){
    CLK = HIGH;
    SPI_Delay(10);
    CLK = LOW;
    SPI_Delay(10);
    return MISO;

}


//主机读入N个比特
//n 限制为16及其以下
//结束状态 CLK = 0
uint SPI_ReadBits( uchar n ){
    uint rtemp,i;
    MISO = 1;
    for( i = 0 ; i < n ; ++i ){
        rtemp <<= 1    ;
        SPI_Delay(10);
        if( MISO == 1 ){
            rtemp |= 0x0001;
        }else{
            rtemp &= 0xFFFE;
        }
        CLK = HIGH;
        SPI_Delay(10);
        CLK = LOW;
        SPI_Delay(10);

    }
    return rtemp;
}

uint SPI_GetX( void ){
    uint result;
    SPI_Start();
    SPI_WriteByte( RDAX );
    result = SPI_ReadBits(11);
    SPI_Stop();
    return result;

}



//主函数
main()
{ 
  EA=0; //关CPU中断
  init();  //初始化CSA100T
 // init_serialcomm( void );//初始化串口
  EA=1;  //开CPU中断
  EX0=1; //打开外部中断
  while(1);
}

void int0() interrupt 0 using 1
{ 
  
   EX0=0;  //关外部中断
   CSB=0;  //片选有效
   _nop_(); //执行空指令延时1.4um
   // uchar x;            
   // x=AD(); //在C程序中调用汇编程序
   uint SPI_ReadBits( uchar n );
      
 }  
     
 

    
    

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -