历史上的今天
今天是:2024年11月11日(星期一)
2019年11月11日 | dsPIC30F6015控制AD7715程序源码 亲测可用
2019-11-11 来源:51hei
这是我写的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); ……………………
史海拾趣
|
怎么用电阻量啊?我单位的loadcell是梅特勒托利多的 和开创的,传感器传输的是数据TX+,TX-,RX+,RX-等。据说要通过测量频率来判断是否好的还是坏的。是吗?… 查看全部问答> |
|
CE60下的模拟器SDK的NK能不能直接用新版本去替换而用不着每次更新NK就得编译新SDK,卸载老SDK再重新装新SDK.这样用模拟器太不方便了. CE60下的模拟器SDK的NK能不能直接用新版本去替换而用不着每次更新NK就得编译新SDK,卸载老SDK再重新装新SDK.这样用模拟器太不方便了.… 查看全部问答> |
|
自己写了个嵌入式实时OS核,取名LOS,即Learn Operate System。LOS是应用于工业控制领域和车载设备中的可剪裁的嵌入式实时操作系统。 LOS具有的功能目录如下: 1 任 ...… 查看全部问答> |
|
wince windows mobile如何用c++实现通信,这个如何操作,包括与服务器的配置? wince windows mobile如何用c++实现通信,这个如何操作,包括与服务器的配置?… 查看全部问答> |




