找回密码
 注册会员
更新自动建库工具PCB Footprint Expert 2024.04 Pro / Library Expert 破解版

现在在用实物仿真信号发生器,请求关于频率算法的问题,急用呀,

[复制链接]
admin 发表于 2012-9-2 17:20:48 | 显示全部楼层 |阅读模式

本文包含原理图、PCB、源代码、封装库、中英文PDF等资源

您需要 登录 才可以下载或查看,没有账号?注册会员

×
现在正在实验室仿真正弦信号发生器,实际频率和预算值不一样,请问一下躯体原因
程序如下:#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit dawr=P3^6; //定义DA的WR端口
sbit dacs=P3^2; //定义DA的CS端口
sbit key1=P3^3;
sbit key2=P3^4;
sbit key3=P3^5;
sbit key4=P3^7;
uint temp=1;
uint temp1=1;
main()
{


uchar h;
uchar y;
TMOD=0x01;//定时器0工作方式
TH0=(65536-100)/256;
TL0=(65536-100)%256;//装入初值
EA=1;//打开总中断
ET0=1;//开定时器0中断
TR0=1;//启动定时器0
dacs=0;
dawr=0;}
void keyscan()
{
if(key1==0)
{
delay_1ms(10);
if(key1==0)
{ temp1=2;//调节正弦波幅值

while(!key1);
}
}
if(key2==0)
{
delay_1ms(10);
if(key2==0)
{ temp=100;

while(!key2);
}
}
if(key3==0)
{
delay_1ms(10);
if(key3==0)
{ temp=500;

while(!key3);
}
}
if(key4==0)
{
delay_1ms(10);
if(key4==0)
{ temp=8;

while(!key4);
}
}
}

void T0_time()interrupt 1
{
TH0=(65536-100)/256;
TL0=(65536-100)%256;//重新装入处置,实现50ms定时
//总定时时间打到1s时实现以下语句
num1++;

if(num1==temp)

{
num1=0;
h++;
num=sin_tab[h]/temp1;
P2=num;
}
keyscan();

}

通过按键改变TEMP值来改变频率和幅度

5_81246_7dcfa596b1fb697.jpg

定时器处置装的是10微妙,TEMP为1的时候,num1=1的时候输出一个点,那就是十微妙输出一个点,总共256个点,就是2560微妙,则频率应该是 300多HZ,但我频率只有20多HZ,不知是不是算法出了问题,请大家帮忙一下
*滑块验证:
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

QQ|手机版|MCU资讯论坛 ( 京ICP备18035221号-2 )|网站地图

GMT+8, 2024-11-29 02:44 , Processed in 0.051803 second(s), 10 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表