100000L,长整型? |
不错 很棒的程序 |
第一:sfr16 RCAP4 = 0xE4; // Timer4 capture/reload sfr16 TMR4 = 0xF4; // Timer4 sfr16 DAC0 = 0xd2; // DAC0 data sfr16 DAC1 = 0xd5; // DAC1 data 程序有这个定义,我想知道是干什么用的?好像没看到有什么作用。 => 这是寄存器定义,等同于 SFR P0 = 0x80; 只不过这是16位的。 第二:#define SAMPLE_RATE_DAC 100000L // DAC sampling rate in Hz 这是DAC的采样率,请问L 是什么单位。 // <PHASE_ADD> is the change in phase between DAC samples; It is used in // the set_DACs routine. => L 是 long型的意思,在Keil3 以上时可以不需要加L,但是有些编译器不加 L 的话,默认最大只支持到 65535 , 总之加了绝对不会错。 unsigned int PHASE_ADD = FREQUENCY * PHASE_PRECISION / SAMPLE_RATE_DAC; 这时两个dac的相位变化,我想知道为什么是这个公式,怎么来的。 => 这个指示程序员自己拟定的一个计算公式,大致的意思是: 频率 * 脉冲精度 / DAC的采样率 至于,具体怎么来的,要问程序员了。 第三:TIMER4_Init(SYSCLK/SAMPLE_RATE_DAC);// Initialize Timer4 to overflow 定时器4的溢出为什么是 SYSCLK/SAMPLE_RATE_DAC ? => 和上面类似,也就是 系统时钟 / DAC的采样率 第四: DAC0 = SIN_temp ^ 0x8000; DAC1 = COS_temp ^ 0x8000; // Write to DAC1 为什么要或上8000? => 这里不是或,是 与或 也就是反转最高位,结合 SIN COS来看,就是把正的变负的负的变正的吧。 好像,你就这些问题吧? |