/*软件A/D所能实现的精度有限,测量电压范围是2-15V, 而且速度低(约1KHz),但仅用一个电容和一个电阻的诱惑 力,我想大虾您会笑纳的。用于某些场合是有用的。 原理是利用470K电阻对1uF电容充电,利用P0.0口作为检测电压, 当电压低于1/3 VCC时,P0.0读入的I/O电平为0,当充电电压超过 1/3 VCC时,P0.0读入的I/O电平为1。通过测量此过程所用的时间, 就能判断输入电压(需要换算)。 程序的编写用定时器0实现 */ //设计时需要计算过2V充电时测量的电压时间小于250ms,否则time溢出。 //如需要高精度,time,vol换成int,测量时间会长一点 sbit v_input=P0^0; unsigned char time,vol,n; unsigned int total; void int_t0(void) interrupt 1 { TL0+=24;TH0=0xfb; //1000个机器周期 time++; if (v_input) { v_input=0; //把电容电压放调 total+=time; time=0; if ((++n)>10) { //统计10次测量的时间 n=0; vol=total/10; //vol的值为测量的电压(还没有转换) total=0; } v_input=1; } } |
欢迎光临 DIY编程器网 (http://diybcq.com/) | Powered by Discuz! X3.2 |