📄 已经正确可用的ad7705程序 (ourdev_cn 我们的电子开发社区).htm
字号:
<BR>//返回:读到的一字节数据 <BR>//变量:无
<BR>//备注:AD7705是一个24位AD,选定刷新频率在16.7HZ下,有效位是19位,暂时读出全部24位数据
<BR>//------------------------------------------------------------------------------------------
<BR>unsigned long int read_AD7705_dword(void) <BR>{
<BR> unsigned long data = 0;
<BR> unsigned char i = 0;
<BR>
<BR> for( i=0; i<24; i++ )
<BR> {
<BR> data <<= 1;
<BR> AD_CLK0;
<BR> asm("nop");
<BR> asm("nop");
<BR> asm("nop");
<BR> if(AD_DOUT)
<BR> {
<BR> data++;
<BR> }
<BR> AD_CLK1;
<BR> asm("nop");
<BR> asm("nop");
<BR> asm("nop");
<BR> }
<BR>
<BR> return data;
<BR>}
<BR><BR><BR>//------------------------------------------------------------------------------------------
<BR>//函数:write_AD7705_byte <BR>//功能:往AD7705写8位数据
<BR>//参数:IN - uint8_t data,要写入AD7705的数据 <BR>//返回:无
<BR>//变量:无 <BR>//备注:无
<BR>//------------------------------------------------------------------------------------------
<BR>void write_AD7705_byte(unsigned char data) <BR>{
<BR> for(unsigned char i=0; i<8; i++)
<BR> {
<BR> AD_CLK0;
<BR> if(data&0x80)
<BR> AD_DIN1;
<BR> else
<BR> AD_DIN0;
<BR> asm("nop");
<BR> asm("nop");
<BR> asm("nop");
<BR> AD_CLK1;
<BR> asm("nop");
<BR> asm("nop");
<BR> asm("nop");
<BR> data <<= 1;
<BR> }
<BR>
<BR> AD_DIN1;
<BR>}
<BR><BR>//------------------------------------------------------------------------------------------
<BR>//函数:write_AD7705_dword <BR>//功能:往AD7705写24位数据,因为AD7705是24位的器件
<BR>//参数:IN - int32_t data,要写入AD7705的数据 <BR>//返回:无
<BR>//变量:无 <BR>//备注:无
<BR>//------------------------------------------------------------------------------------------
<BR>void write_AD7705_dword(unsigned long int data)
<BR>{
<BR> for(unsigned char i = 0; i<24; i++)
<BR> {
<BR> AD_CLK0;
<BR> if(data&0x800000)
<BR> AD_DIN1;
<BR> else
<BR> AD_DIN0;
<BR> asm("nop");
<BR> asm("nop");
<BR> asm("nop");
<BR> AD_CLK1;
<BR> asm("nop");
<BR> asm("nop");
<BR> asm("nop");
<BR> data <<= 1;
<BR> }
<BR>
<BR> AD_DIN1; <BR>}
<BR><BR>//--------------------------------------------------------------------------
<BR>//-------------------------读取AD7705转换数据函数--------------------------
<BR>//入口参数:指向main()主函数定义的ad_data变量的常量指针
<BR>//--------------------------------------------------------------------------
<BR>void ReadData7705(unsigned int *const pdata) <BR>{
<BR> unsigned int data=0, fiter[5]={0};
<BR> unsigned long int temp=0;
<BR> unsigned char i=0, sort_flag=1;
<BR>
<BR> AD_CS0;
<BR> _delay_us(5);
<BR>
<BR> start_AD7705();
<BR>
<BR> for( i=0; i<5; i++ )
<BR> {
<BR> start_timer0();
<BR> _delay_ms(2);
<BR> while( AD_DRDY )
<BR> {
<BR> if( time_count >= time_read_data )
<BR> {
<BR> stop_timer0();
<BR> AD_CS1;
<BR> return;
<BR> }
<BR> }
<BR> stop_timer0();
<BR>
<BR> write_AD7705_byte( RD_DATA_REG );
<BR> fiter[i] = read_AD7705_word();
<BR> }
<BR> AD_CS1;
<BR>
<BR> sort_flag = 1;
<BR> while( sort_flag )
<BR> {
<BR> sort_flag = 0;
<BR> for( i=0; i<4; i++ )
<BR> {
<BR> if( fiter[i] > fiter[i+1] )
<BR> {
<BR> data = fiter[i];
<BR> fiter[i] = fiter[i+1];
<BR> fiter[i+1] = data;
<BR> sort_flag = 1;
<BR> }
<BR> }
<BR> }
<BR>
<BR> temp = ( (unsigned long int)fiter[1] + (unsigned long int)fiter[2]
<BR> + (unsigned long int)fiter[3] )/3;
<BR>
<BR> data = (unsigned int)temp;
<BR>
<BR> if( (data<0xfff0) && (data&0x000f)>0x0008 )
<BR> {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -