51单片机函数信号发生器设计+原理框图+流程图+源代码 第9页
5.3.2 写控制字子程序
由前文所述,写控制字子程序主要根据AD9850的串行传送时序(如图4-5)进行编程, W-CLK上升沿把25引脚的一位数据串行移入,当移动40位后,用一个FQ-UD脉冲即可更新输出频率和相位。程序简单易懂,其核心程序是将一个长整形的十进制频数,通过计算转换,使变为一个二进数,后一位位的传送到AD9850中去。
图4-5 串行控制字装入时序
而所需频率的控制字的计算方法,我们也在前文的硬件部分推出公式(4-1)
因此写控制字的程序框图为:
部分程序为:本文来自辣.文^论^文·网
void write_dds(unsigned long dds)
{ uchar temp=0x80;
uchar i;
load=0;
clk=0;
for(i=0;i<40;i++)
{
clk=0;
delay(10);
if(dds&0x00000001)
{
dat=1;
}
else dat=0;
delay(10);
clk=1;
dds=dds>>1;
}
load=1;
clk=0;
delay(10);
load=0;
}
void write_freq(unsigned long frequency)
{ frequency=(unsigned long)(42.94967296*frequency); //使用100M晶振,frequence就是所要输出的频率
write_dds(frequency); }
5.4 主函数程序设计
主函数的主要作用是中断服务、以及各模块程序的调用和总体结合使用。函数中,有一变量是贯穿主函数和各个模块子函数的传递桥梁,我们将它定义为无符号长整型全局变量unsigned long fre,以及其对应标置变量int l。毕业论文
http://www.751com.cn5.4.1 中断INT0服务函数
在中断服务函数中,主要是软件去抖动和扫描是哪一个按键按下,并执行相应的键处理。如前文所述,当引起中断时,进入中断服务函数,首先延时10ms,再次扫描P3.2口是否为低电平。确认无误后,扫描P1口,找出是哪个按键按下,并执行相应键处理,对全局变量fre进行计算。最后使标置变量l=1,表示全局变量fre出现了变化,在主函数中进行相应的处理。
void int0()interrupt 0 using 1//中断服务函数
{ EA=0;
delay(10);
if(INT_0==0) //判断是否有键按下
{
P1=0xff;
if(a100==0) //步进+100按下
{fre=fre+100;}
if(s100==0) //步进-100按下
{fre=fre-100;}
if(a1k==0) //步进+1000按下
上一页 [1] [2] [3] [4] [5] [6] [7] [8] [9]
51单片机函数信号发生器设计+原理框图+流程图+源代码 第9页下载如图片无法显示或论文不完整,请联系qq752018766