標(biāo)題:
dsPIC30F6015控制AD7715程序源碼 親測可用
[打印本頁]
作者:
shzsy2006
時(shí)間:
2018-4-22 16:28
標(biāo)題:
dsPIC30F6015控制AD7715程序源碼 親測可用
這是我寫的dsPIC30F6015控制AD7715程序,親測可用
單片機(jī)源程序如下:
#include <p30f6015.h>
_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) //延時(shí)程序 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; //報(bào)警信號(hào)輸出
//U2MODEbits.UARTEN=0; //禁止串口
TRISGbits.TRISG6=0; // SCK
TRISGbits.TRISG7=1; // SDI
TRISGbits.TRISG8=0; // SDO
TRISDbits.TRISD10=1;// DRDY
TRISCbits.TRISC13=0;// CS_A
}
//--------------------------------------------------------------------------------------------------
// 函數(shù)名稱: Init_SPI2()
// 函數(shù)功能: 初始化設(shè)置SPI2
// 入口參數(shù): 無
// 返回值:無
//--------------------------------------------------------------------------------------------------
void Init_SPI2()
{
SPI2BUF=0; //數(shù)據(jù)寄存器清0
IFS1bits.SPI2IF=0;//清中斷標(biāo)志
IEC1bits.SPI2IE=0;//關(guān)閉中斷
IPC6bits.SPI2IP=2;//中斷優(yōu)先級(jí)為2
SPI2STATbits.SPIEN=0; //禁止SPI2
SPI2CONbits.PPRE = 1;//主分頻比16:1
SPI2CONbits.SPRE = 4;//預(yù)分頻比4:1 SCk=10M/(16*4)
SPI2CONbits.FRMEN = 0; //禁止幀SPI支持
SPI2CONbits.DISSDO = 0; //使用SDO2引腳
SPI2CONbits.MODE16 = 0; //8位通訊
SPI2CONbits.SMP = 0; //中間采樣輸入數(shù)據(jù)
SPI2CONbits.CKE = 0; //由空閑轉(zhuǎn)為工作狀態(tài)時(shí)輸出數(shù)據(jù)
SPI2CONbits.CKP = 1; //空閑狀態(tài)為高電平
SPI2CONbits.MSTEN = 1; //主模式
SPI2CONbits.SSEN = 0; //不使用SS2引腳
SPI2STATbits.SPISIDL = 0; //空閑模式下繼續(xù)工作
SPI2STATbits.SPIROV = 0; //未溢出
SPI2STATbits.SPIEN = 1; //使能SPI2
}
void Init_Uart2()
{
U2BRG=10;// set baudrate 56000BPS
U2MODE =0x8000 ;//8位數(shù)據(jù)、無校驗(yàn)、一個(gè)停止位
IEC1bits.U2RXIE = 1;
IPC6bits.U2RXIP = 5;// UART1接收器中斷優(yōu)先級(jí)位
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;
}
/************************************************************
* 函數(shù)名稱:UART2_Send()
* 串口2發(fā)送子函數(shù)
************************************************************/
void UART2_Send(unsigned char data)
{
U2TXREG=data;
while(IFS1bits.U2TXIF==0);
IFS1bits.U2TXIF=0;
}
//--------------------------------------------------------------------------------------------------
// 函數(shù)名稱: AD_write()
// 入口參數(shù): commuCFG通訊寄存器控制字
// 出口參數(shù): 無
// 函數(shù)功能: 寫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 二個(gè)字節(jié)
{
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); //設(shè)定寄存器,寫模式 增益為1
AD_write(0x6C); //設(shè)置SetReg,單端,60hz 自校驗(yàn)方式 時(shí)鐘2.4576MHz 輸入不加緩沖
while(1)
{
while(DRDY); //等待AD7715提供可讀的數(shù)據(jù)
AD_write(0x38);
Nop();
result=read_from_ad7715();
UART2_Send(result>>8);
……………………
…………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼
所有資料51hei提供下載:
dsPIC30f控制AD7715.zip
(120.12 KB, 下載次數(shù): 20)
2018-4-22 16:27 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1