⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 a_d(d_a)converters.c

📁 有两个函数分别实现模数和数模转换功能的源程序
💻 C
字号:
/* adc.c  -  successive approximation A/D converter */

#include <math.h>

double dac();
int u();

void adc(x, b, B, R)
double x, R;
int *b, B;
{
       int i;
       double y, xQ, Q;

       Q = R / pow(2, B);                        /* quantization width \(Q=R/2\sp{B}\) */
       y = x + Q/2;                              /* rounding */

       for (i = 0; i < B; i++)                   /* initialize bit vector */
              b[i] = 0;

       b[0] = 1 - u(y);                          /* determine MSB */

       for (i = 1; i < B; i++) {                 /* loop starts with \(i=1\) */
              b[i] = 1;                          /* turn \(i\)th bit ON */
              xQ = dac(b, B, R);                 /* compute DAC output */
              b[i] = u(y-xQ);                    /* test and correct bit */
              }
}


/* dac.c - bipolar two's complement D/A converter */

double dac(b, B, R)
int *b, B;                         /* bits are dimensioned as \(b[0], b[1], \dotsc, b[B-1]\) */
double R;
{
       int i;
       double dac = 0;

       b[0] = 1 - b[0];                          /* complement MSB */

       for (i = B-1; i >= 0; i--)                /* H\"orner's rule */
          dac = 0.5 * (dac + b[i]);

       dac = R * (dac - 0.5);                    /* shift and scale */

       b[0] = 1 - b[0];                          /* restore MSB */

       return dac;
}



⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -