找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3512|回复: 0
收起左侧

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

[复制链接]
ID:313807 发表于 2018-4-22 16:28 | 显示全部楼层 |阅读模式
这是我写的dsPIC30F6015控制AD7715程序,亲测可用

单片机源程序如下:
  1. #include <p30f6015.h>
  2. _FOSC(CSW_FSCM_OFF & XT_PLL4);
  3. _FWDT(WDT_OFF);
  4. #define uchar unsigned char
  5. #define uint unsigned int  
  6. #define CS_A          LATCbits.LATC13 //RC13输出
  7. #define DRDY                PORTDbits.RD10 //RD10输入
  8. uint result;


  9. void delay_ms(uint x) //延时程序 10M晶振  0.1us
  10. {
  11.         uint a,b;
  12.         for(a=x;a>0;a--)
  13.                 for(b=2500;b>0;b--);
  14. }



  15. void Init_PORT(void)
  16. {
  17.         // TRISFbits.TRISF4 =0;  //报警信号输出  
  18.   //U2MODEbits.UARTEN=0;  //禁止串口
  19.   TRISGbits.TRISG6=0; //  SCK
  20.   TRISGbits.TRISG7=1; //  SDI
  21.   TRISGbits.TRISG8=0; //  SDO
  22.   TRISDbits.TRISD10=1;// DRDY
  23.   TRISCbits.TRISC13=0;// CS_A
  24. }


  25. //--------------------------------------------------------------------------------------------------
  26. // 函数名称: Init_SPI2()
  27. // 函数功能: 初始化设置SPI2
  28. // 入口参数: 无
  29. // 返回值:无
  30. //--------------------------------------------------------------------------------------------------
  31. void Init_SPI2()
  32. {
  33.         SPI2BUF=0;        //数据寄存器清0
  34.         IFS1bits.SPI2IF=0;//清中断标志
  35.         IEC1bits.SPI2IE=0;//关闭中断
  36.         IPC6bits.SPI2IP=2;//中断优先级为2

  37.   SPI2STATbits.SPIEN=0; //禁止SPI2
  38.   SPI2CONbits.PPRE = 1;//主分频比16:1
  39.         SPI2CONbits.SPRE = 4;//预分频比4:1  SCk=10M/(16*4)
  40.   SPI2CONbits.FRMEN = 0; //禁止帧SPI支持
  41.   SPI2CONbits.DISSDO = 0; //使用SDO2引脚
  42.         SPI2CONbits.MODE16 = 0; //8位通讯
  43.   SPI2CONbits.SMP = 0; //中间采样输入数据
  44.   SPI2CONbits.CKE = 0; //由空闲转为工作状态时输出数据
  45.   SPI2CONbits.CKP = 1;  //空闲状态为高电平
  46.   SPI2CONbits.MSTEN = 1; //主模式
  47.   SPI2CONbits.SSEN = 0; //不使用SS2引脚
  48.   
  49.   SPI2STATbits.SPISIDL = 0; //空闲模式下继续工作
  50.         SPI2STATbits.SPIROV = 0; //未溢出
  51.         SPI2STATbits.SPIEN = 1; //使能SPI2
  52. }


  53. void Init_Uart2()
  54. {         
  55.          U2BRG=10;// set baudrate 56000BPS       
  56.   U2MODE =0x8000 ;//8位数据、无校验、一个停止位
  57.                 IEC1bits.U2RXIE = 1;
  58.   IPC6bits.U2RXIP = 5;// UART1接收器中断优先级位       
  59.   IFS1bits.U2RXIF=0;
  60.          IEC1bits.U2TXIE = 0;
  61.          IPC6bits.U2TXIP = 6;
  62.                 U2STAbits.UTXISEL = 0;
  63.                 U2STAbits.UTXBRK  = 0;
  64.                 U2STAbits.UTXBF          = 0;       
  65.                 U2STAbits.URXISEL = 0;
  66.                 U2STAbits.ADDEN          = 0;
  67.                 U2STAbits.UTXEN = 1;
  68. }

  69. /************************************************************
  70. *         函数名称:UART2_Send()
  71. *        串口2发送子函数
  72. ************************************************************/
  73. void UART2_Send(unsigned char data)
  74. {
  75.     U2TXREG=data;
  76.     while(IFS1bits.U2TXIF==0);
  77.     IFS1bits.U2TXIF=0;
  78. }



  79. //--------------------------------------------------------------------------------------------------
  80. // 函数名称: AD_write()
  81. // 入口参数: commuCFG通讯寄存器控制字
  82. // 出口参数: 无
  83. // 函数功能: 写AD7715
  84. //--------------------------------------------------------------------------------------------------
  85. void AD_write(unsigned char data)
  86. {
  87.         unsigned char temp;
  88.   CS_A=0;
  89.   Nop();
  90.   SPI2BUF=data;
  91.   while(IFS1bits.SPI2IF==0);
  92.   IFS1bits.SPI2IF=0;
  93.   temp=SPI2BUF;
  94.   CS_A=1;
  95.   Nop();
  96. }


  97. uint read_from_ad7715()//读AD7715 二个字节
  98. {
  99.         uchar read_h,read_l;
  100.   uint AD;
  101.   while(DRDY);
  102.         CS_A=0;
  103.   Nop();
  104.   SPI2BUF=0xff;
  105.   while(IFS1bits.SPI2IF==0);
  106.   IFS1bits.SPI2IF=0;
  107.   read_h=SPI2BUF;
  108.   Nop();
  109.   SPI2BUF=0xff;
  110.   while(IFS1bits.SPI2IF==0);
  111.   IFS1bits.SPI2IF=0;
  112.   read_l=SPI2BUF;
  113.   AD=(read_h<<8)+read_l ;
  114.   CS_A=1;
  115.         return (AD);
  116. }




  117. int main(void)
  118. {       
  119.   Power_Management();
  120.   Init_PORT();
  121.   Init_SPI2();
  122.   Init_Uart2();
  123.   AD_write(0x10); //设定寄存器,写模式  增益为1  
  124.   AD_write(0x6C);        //设置SetReg,单端,60hz 自校验方式 时钟2.4576MHz 输入不加缓冲
  125.   while(1)
  126.   {   
  127.     while(DRDY);  //等待AD7715提供可读的数据  
  128.     AD_write(0x38);
  129.     Nop();
  130.     result=read_from_ad7715();
  131.     UART2_Send(result>>8);
  132. ……………………

  133. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

所有资料51hei提供下载:
dsPIC30f控制AD7715.zip (120.12 KB, 下载次数: 20)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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