|
发表于 2020-3-5 09:47:23
|
显示全部楼层
本帖最后由 435788A 于 2020-3-5 09:55 编辑
之前不能自动测量是继电器开关定义搞错了,现在改正就好了。
继电器闭合后,降低维持电流减少电流消耗。测量了几个电阻电容,感觉1K档比较准确,47欧档不怎么准,准确度应该取缺于基准电阻,和淲波元件可能件关系不大
改动部分:
//==================================LCR主程序===============================
//========================================================================
sfr P1M1=0x91; //P1端口设置寄存器
sfr P1M0=0x92; //P1端口设置寄存器
sfr P0M1=0x93; //P0端口设置寄存器
sfr P0M0=0x94; //P0端口设置寄存器
sfr P2M1=0x95; //P2端口设置寄存器
sfr P2M0=0x96; //P2端口设置寄存器
sfr P3M1=0xB1; //P3端口设置寄存器
sfr P3M0=0xB2; //P3端口设置寄存器
sbit spk=P2^3; //蜂鸣器
sbit Kb=P2^1; //量程开关B
sbit Ka=P2^2; //量程开关A
sbit Ka_1=P2^4; //继电器开关******这个应该定义就近的引脚
bit Ka_2; //继电器开关变量***常开用
sbit DDS2=P1^2;//移相方波输出口
sbit K3=P1^7;
sbit K4=P1^6;
sbit K5=P1^5; //7.8kHz滤波开关
sbit K6=P1^4;
sbit K8=P2^0; //100Hz滤波开关
sbit K32=P1^1; //32kHz发生器
**********************************
**********************************
//==============量程控制函数====================
xdata char rng=1; //量程
void setRng(char k){//切换量程
if(k>3) k=3;
if(k<0) k=0;
Ka_2 = (Ka | Kb); //按位或,40欧当出低电平,P2.4 继电器控制; (继电器常闭)
Ka_1 = !Ka_2; //继电器常开接法
//Ka_1 = 1; //开机时继电器不吸合
Ka = k & 2, Kb = k & 1; //40欧--100k欧
rng = k;
}
void setRng2(){ setRng( (rng+1)%4);} //量程步进
*****************************************
*****************************************
//==============LCR测量====================
code float ga[4] = { 1, 3, 9, 27 }; //增益表
code float dwR[4] = { 47, 1e3, 1e4, 1e5 }; //各档电阻表,由于常用47欧电阻所以改40欧为47欧
xdata int Vxy[12]={0,0,0,0,1,1}; //Vxy[Vx1,Vy1,Vx2,Vy2,g1,g2]
xdata char Sxw[4]={0,1,0,1}; //保存正确相位
xdata int Vz[24]; //LCR测量结果队
xdata uchar tim=0,tims=0;
xdata char pau=0; //暂停坐标自动旋转
|
|