void Init_2MCP3901(void) { TRISBbits.TRISB11 = 0 ; //mcp3901 ???????? RPOR4bits.RP43R = 0x31; //RP43?B11???????????? //??????? REFOCONbits.ROSEL = 0 ;//?????????? REFOCONbits.RODIV = 5 ;//?????? 32?? REFOCONbits.ROON = 1 ;//????????? RST_AD2_CLR; //MCP3901 ?? delay(); RST_AD2_SET; delay(); delay(); CS_AD2_CLR; delay(); ADC_spiMOSI(8,(Status_AD<<1)); //?Gain=1 ADC_spiMOSI(8,0x10); delay(); CS_AD2_SET; delay(); CS_AD2_CLR; delay(); ADC_spiMOSI(8,(GAIN_AD<<1)); //?Gain=1 ADC_spiMOSI(8,0x0); delay(); CS_AD2_SET; delay(); CS_AD2_CLR; delay(); ADC_spiMOSI(8,(Status_AD<<1)); //?????? ADC_spiMOSI(8,0xac); delay(); CS_AD2_SET; delay(); CS_AD2_CLR; delay(); ADC_spiMOSI(8,(Cfg1_AD<<1)); //??????1? ADC_spiMOSI(8,0xf0); //AMCLK = MCLK,OSR=256,WIDTH =0(16bit),MODout(Unenable), // UnRest,???????????????//????????????? delay(); CS_AD2_SET; delay(); CS_AD2_CLR; delay(); ADC_spiMOSI(8,(Cfg2_AD<<1)); //??????1? ADC_spiMOSI(8,0x0d); //AMCLK = MCLK,OSR=32,WIDTH =0(16bit),MODout(Unenable),UnRest, //???????????????//????????????? delay(); CS_AD2_SET; delay(); }这段代码是什么意思
时间: 2023-07-24 08:15:10 浏览: 345
这段代码是用于初始化两个MCP3901模数转换器的函数。下面是对代码的解释:
1. `TRISBbits.TRISB11 = 0`:将RB11引脚设置为输出模式,用于控制MCP3901。
2. `RPOR4bits.RP43R = 0x31`:将RP43引脚配置为RB11引脚的复用功能,用于与MCP3901通信。
3. `REFOCONbits.ROSEL = 0`:选择内部参考电压作为参考电压源。
4. `REFOCONbits.RODIV = 5`:设置参考电压的分频系数为32。
5. `REFOCONbits.ROON = 1`:使能参考电压输出。
6. `RST_AD2_CLR`:清除MCP3901的复位引脚,使其处于正常工作状态。
7. `delay()`:延时一段时间。
8. `RST_AD2_SET`:设置MCP3901的复位引脚,保证其正常工作。
9. `CS_AD2_CLR`:清除MCP3901的片选引脚,开始SPI通信。
10. `ADC_spiMOSI(8,(Status_AD<<1))`:向MCP3901发送SPI数据,设置增益为1。
11. `ADC_spiMOSI(8,0x10)`:向MCP3901发送SPI数据,配置寄存器。
12. `CS_AD2_SET`:设置MCP3901的片选引脚,结束SPI通信。
13. 类似地,通过一系列的SPI通信操作,设置了MCP3901的其他配置寄存器,包括增益、采样率等参数。
请注意,这段代码中存在一些宏定义(例如`RST_AD2_CLR`、`CS_AD2_CLR`等),你需要在代码的其他部分找到这些宏定义的具体内容才能完全理解代码的功能。此外,`ADC_spiMOSI`函数可能是用于SPI通信发送数据的自定义函数,你需要在代码中找到它的定义以了解其具体实现。
阅读全文