📄 已经正确可用的ad7705程序 (ourdev_cn 我们的电子开发社区).htm
字号:
<BR> data >>= 4;
<BR> data++;
<BR> }
<BR> else
<BR> {
<BR> data >>= 4;
<BR> }
<BR>
<BR> if( 1 != scale )
<BR> {
<BR> data -= 0x0800;
<BR> }
<BR>
<BR> *pdata = data & 0x0fff;
<BR>}
<BR><BR>//---------------------------------------------------------------------------------------
<BR>//校准命令格式
<BR>//STX Data Long Command Code Parameter CheckSum ETX
<BR>//0x55 数据长度(2) 量程指示 00H/01H CRC16(2) 0x0D
<BR><BR>void AD7705_calibration(void) <BR>{
<BR> unsigned char readtimes =0;
<BR>
<BR> unsigned char cali_scale =0;
<BR>
<BR> unsigned long int temp =0;
<BR>
<BR> unsigned char coefficient[8] ={0}; //test[8]={0};
<BR>
<BR> //16位校验和的临时变量
<BR> unsigned int crcvalue =0;
<BR>
<BR> AD_CS1;
<BR>
<BR> cali_scale = command[2]; //获取上位机发送的要校准的量程类型
<BR>
<BR> eeprom_busy_wait();
<BR> eeprom_read_block( &coefficient[0], (void*)(ADDR_EEPROM_1+(cali_scale-1)*10), 8 );
<BR> crcvalue = checksum( &coefficient[0], 6 );
<BR> if( (coefficient[7]*256+coefficient[6]) != crcvalue )
<BR> {
<BR> readtimes++;
<BR> }
<BR>
<BR> if( 1 == readtimes )
<BR> {
<BR> eeprom_busy_wait();
<BR> eeprom_read_block( &coefficient[0], (void*)(ADDR_EEPROM_2+(cali_scale-1)*10), 8 );
<BR> crcvalue = checksum( &coefficient[0], 6 ); //
<BR> if( (coefficient[7]*256+coefficient[6]) != crcvalue )
<BR> {
<BR> readtimes++;
<BR> }
<BR> }
<BR>
<BR> if( 2 == readtimes )
<BR> {
<BR> eeprom_busy_wait();
<BR> eeprom_read_block( &coefficient[0], (void*)(ADDR_EEPROM_3+(cali_scale-1)*10), 8 );
<BR> }
<BR>
<BR> ADDR409_MASK;
<BR> AD_CS0;
<BR> _delay_us(5);
<BR> reset_AD7705();
<BR>
<BR> write_AD7705_byte( WR_CLOCK_REG );
<BR> write_AD7705_byte( CLOCK_REG_SET );
<BR>
<BR> if( ZERO_CALIBRATION == command[3] ) //校准命令为零校准
<BR> {
<BR> write_AD7705_byte( WR_SETUP_REG );
<BR> write_AD7705_byte( text_of_setup[cali_scale-1] | SYS_ZERO_CALI);
<BR>
<BR> //等待校准完成
<BR> start_timer0();
<BR> while( time_count < time_sys_cali );
<BR> stop_timer0();
<BR>
<BR> while( AD_DRDY );
<BR>
<BR> //读OFFSET寄存器
<BR> write_AD7705_byte( RD_OFFSET_REG );
<BR> temp = read_AD7705_dword();
<BR>
<BR> if( cali_scale == scale)
<BR> {
<BR> ZS = temp; NO_CALI_TYPE = NO_FULL_CALIBRATION;
<BR> }
<BR>
<BR> coefficient[0] = (unsigned char)( temp%256 );
<BR> coefficient[1] = (unsigned char)( (temp/256)%256 );
<BR> coefficient[2] = (unsigned char)( (temp/65536)%256 );
<BR> }
<BR> else if( FULL_CALIBRATION == command[3] )
<BR> {
<BR>
<BR> temp = (unsigned long int)(coefficient[0]) + (unsigned long int)(coefficient[1])*256
<BR> + (unsigned long int)(coefficient[2])*65536;
<BR>
<BR> write_AD7705_byte( WR_OFFSET_REG );
<BR> write_AD7705_dword( temp );
<BR>
<BR> write_AD7705_byte( WR_SETUP_REG );
<BR> write_AD7705_byte( text_of_setup[cali_scale-1] | SYS_FULL_CALI );
<BR>
<BR> //等待校准完成
<BR> start_timer0();
<BR> while( time_count < time_sys_cali );
<BR> stop_timer0();
<BR>
<BR> while( AD_DRDY );//
<BR> //读FULL寄存器
<BR> write_AD7705_byte( RD_FULL_REG );
<BR> temp = read_AD7705_dword();
<BR>
<BR> if( cali_scale == scale )
<BR> {
<BR> GS = temp;
<BR> NO_CALI_TYPE = ALREADY_CALIBRATION;
<BR> }
<BR>
<BR> coefficient[3] = (unsigned char)( temp%256 );
<BR> coefficient[4] = (unsigned char)( (temp/256)%256 );
<BR> coefficient[5] = (unsigned char)( (temp/65536)%256 );
<BR> }
<BR> else <BR> {
<BR> AD_CS1;
<BR> _delay_us(5);
<BR> return;
<BR> }
<BR>
<BR> AD_CS1;
<BR> _delay_us(5);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -