×
单片机 > 单片机程序设计 > 详情

dsPIC30F6015控制AD7715程序源码 亲测可用

发布时间:2020-06-18 发布时间:
|

这是我写的dsPIC30F6015控制AD7715程序,亲测可用

单片机源程序如下:

#include

_FOSC(CSW_FSCM_OFF & XT_PLL4);

_FWDT(WDT_OFF);

#define uchar unsigned char

#define uint unsigned int  

#define CS_A          LATCbits.LATC13 //RC13输出

#define DRDY                PORTDbits.RD10 //RD10输入

uint result;



void delay_ms(uint x) //延时程序 10M晶振  0.1us

{

        uint a,b;

        for(a=x;a>0;a--)

                for(b=2500;b>0;b--);




void Init_PORT(void)

{

        // TRISFbits.TRISF4 =0;  //报警信号输出  

  //U2MODEbits.UARTEN=0;  //禁止串口

  TRISGbits.TRISG6=0; //  SCK

  TRISGbits.TRISG7=1; //  SDI

  TRISGbits.TRISG8=0; //  SDO

  TRISDbits.TRISD10=1;// DRDY

  TRISCbits.TRISC13=0;// CS_A

}



//--------------------------------------------------------------------------------------------------

// 函数名称: Init_SPI2()

// 函数功能: 初始化设置SPI2

// 入口参数: 无

// 返回值:无

//--------------------------------------------------------------------------------------------------

void Init_SPI2()

{

        SPI2BUF=0;        //数据寄存器清0

        IFS1bits.SPI2IF=0;//清中断标志

        IEC1bits.SPI2IE=0;//关闭中断

        IPC6bits.SPI2IP=2;//中断优先级为2


  SPI2STATbits.SPIEN=0; //禁止SPI2

  SPI2CONbits.PPRE = 1;//主分频比16:1

        SPI2CONbits.SPRE = 4;//预分频比4:1  SCk=10M/(16*4)

  SPI2CONbits.FRMEN = 0; //禁止帧SPI支持

  SPI2CONbits.DISSDO = 0; //使用SDO2引脚

        SPI2CONbits.MODE16 = 0; //8位通讯

  SPI2CONbits.SMP = 0; //中间采样输入数据

  SPI2CONbits.CKE = 0; //由空闲转为工作状态时输出数据

  SPI2CONbits.CKP = 1;  //空闲状态为高电平

  SPI2CONbits.MSTEN = 1; //主模式

  SPI2CONbits.SSEN = 0; //不使用SS2引脚

  

  SPI2STATbits.SPISIDL = 0; //空闲模式下继续工作

        SPI2STATbits.SPIROV = 0; //未溢出 

        SPI2STATbits.SPIEN = 1; //使能SPI2

}



void Init_Uart2()

{          

         U2BRG=10;// set baudrate 56000BPS        

  U2MODE =0x8000 ;//8位数据、无校验、一个停止位

                IEC1bits.U2RXIE = 1;

  IPC6bits.U2RXIP = 5;// UART1接收器中断优先级位        

  IFS1bits.U2RXIF=0;

         IEC1bits.U2TXIE = 0;

         IPC6bits.U2TXIP = 6;

                U2STAbits.UTXISEL = 0;

                U2STAbits.UTXBRK  = 0;

                U2STAbits.UTXBF          = 0;        

                U2STAbits.URXISEL = 0;

                U2STAbits.ADDEN          = 0;

                U2STAbits.UTXEN = 1;

}


/************************************************************

*         函数名称:UART2_Send()

*        串口2发送子函数

************************************************************/

void UART2_Send(unsigned char data)

{

    U2TXREG=data;

    while(IFS1bits.U2TXIF==0);

    IFS1bits.U2TXIF=0;

}




//--------------------------------------------------------------------------------------------------

// 函数名称: AD_write()

// 入口参数: commuCFG通讯寄存器控制字

// 出口参数: 无

// 函数功能: 写AD7715

//--------------------------------------------------------------------------------------------------

void AD_write(unsigned char data)

{

        unsigned char temp;

  CS_A=0;

  Nop();

  SPI2BUF=data;

  while(IFS1bits.SPI2IF==0);

  IFS1bits.SPI2IF=0;

  temp=SPI2BUF;

  CS_A=1;

  Nop();

}



uint read_from_ad7715()//读AD7715 二个字节

{

        uchar read_h,read_l;

  uint AD;

  while(DRDY);

        CS_A=0;

  Nop();

  SPI2BUF=0xff;

  while(IFS1bits.SPI2IF==0);

  IFS1bits.SPI2IF=0;

  read_h=SPI2BUF;

  Nop();

  SPI2BUF=0xff;

  while(IFS1bits.SPI2IF==0);

  IFS1bits.SPI2IF=0;

  read_l=SPI2BUF;

  AD=(read_h<<8)+read_l ;

  CS_A=1;

        return (AD); 

}


int main(void)

{        

  Power_Management();

  Init_PORT();

  Init_SPI2();

  Init_Uart2();

  AD_write(0x10); //设定寄存器,写模式  增益为1  

  AD_write(0x6C);        //设置SetReg,单端,60hz 自校验方式 时钟2.4576MHz 输入不加缓冲 

  while(1)

  {   

    while(DRDY);  //等待AD7715提供可读的数据  

    AD_write(0x38);

    Nop();

    result=read_from_ad7715();

    UART2_Send(result>>8);

……………………


关键字:dsPIC30F6015  AD7715  源码

『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
ARM 汇编的必知必会