根据DAC0832 = sin[j];可知,数组值直接赋给了DAC,数组中,最大值为127,最小值为0,这就是幅值 0~127。如果要电压幅值,这与电路有关。设数据255(0xFF)对应输出5V,数据0对应输出0V,则0~127对应的电压幅值为0~2.5V。
频率决定于delay()的延时量,这个又与单片机的时钟有关,所以看你的程序是确这不了的。
另外:
===============================
(1)SIN[ ]数组的值 可以用EXCEL简单地算出。如图,A2开始以0,1,2,3,4....向下填充直到359,在B2输入公式(如图),公式向下复制,直到B360。算出的值就是上面数组SIN[]的值。这个更精确。
(2)然后
for(j=0;j<360;j++){
DAC0832 = sin[j];
delay();
}
可得正弦波输出。但频率用delay()不精确,只能设试确定。
(3)可以用定时中断。中断时间为1/(360*1000)秒。每次中断程序中:
DAC0832 = sin[j++];
if(j==360)j=0;
这就可得1000Hz的正弦波。
幅值,和电路有关。
频率,和单片机的晶振频率、延时函数,有关。
可以用示波器来观察波形,验证你的理论计算。
波形观察方法,可参考:
http://hi.baidu.com/do_sermon/item/a4ad641a9b8102ffddeeca30