一;目的是想看看应广ADC功能怎么样。选PFS173的8位AD。由于源表在公司,在家只能用一个45K的滑动变阻器加一个45K的电阻搭建一下,电压只能0~VDD/2 所以ADCR寄存器的值只能是0~0x7f。然后把电源和地反过来,寄存器值为0x7f~0xff
二;工程代码,为了快速验证,先把数据手册的例子稍微修改一下,敲进去。
#include "extern.h"
BYTE AD_value;
void FPPA0 (void)
{
.ADJUST_IC SYSCLK=IHRC/2 // SYSCLK=IHRC/2
PBC = 0B_1111_0000;
PBPH = 0B_1111_0000;
PBPH = 0B_1111_0000;
PBDIER = 0B_1111_1110;
// $ ADCC Enable,PB3;
// $ ADCC Enable,PB2;
$ ADCC Enable,PB0;
$ ADCM/16;
while(1)
{
AD_START = 1;
.Delay 4*400;
AD_value = ADCR;
while(!AD_DONE) NULL;
//ADCC = 0; //停用ADC
}
}
void Interrupt (void)
{
pushaf;
if (Intrq.T16)
{ // T16 Trig
// User can add code
Intrq.T16 = 0;
//...
}
popaf;
}
三;仿真,AD转换还算比较稳基本是最后一位比较飘,可以接受(可能跟硬件电路有关,毕竟没任何电容滤波,也没太关注阻抗匹配问题)。
四;注意他的转换周期是2us。注意要把相应的IO口数字功能关掉,要不然后面两位是飘的。其他的数据手册说的比较明白了。祝你开心,谢谢!下次看看比较器的运用要注意些啥。 |