c51做的的波形发生器 为什么改变那个中断频率改变不了...

2019-07-18 13:27发布

程序是这样的:(无论我怎么改FREQ的值,显示的正弦波的值就是不变,而且波形周期不对,这里应该是1s的,但是示波器上显示的是两秒)
#include<reg52.h>
#include<math.h>
#define uchar unsigned char
#define uint unsigned int
#define fosc 12000000
#define all 65535
float sindatar;
uint VM=2500;
uint FREQ=1,j=0;
void delay(uint z)
{
  uint x,y;
  for(x=z;x>0;x--)
    for(y=1;y>0;y--);
}

/**********************************************
                计算正弦波数据
********************************************/
void getsin(uchar x)
{   
    sindatar=((sin(6.28*x/256)+1)/2.0)*VM*0.051;
P3=(uchar)sindatar;
delay(1);
}
void main()
{
   TH1=(all-fosc/12/256/FREQ)/256;
   TL1=(all-fosc/12/256/FREQ)%256;
   ET1=1;
   EA=1;
   TR1=1;
   while(1)
   {
   getsin(j);
   }
}
void timer1() interrupt 3 using 3
{
   TH1=(all-fosc/12/256/FREQ)/256;
   TL1=(all-fosc/12/256/FREQ)%256;
   j++;
    if(j==256)   j=0;
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
1条回答
happysunshine
1楼-- · 2019-07-18 18:43
刚才我发的那个有点错误 ,应该是正弦波的频率没法改变。   按照那个FREQ =1计算,得到的应该是正弦波周期应该是1s 吧。  但是示波器上显示的额是2s.
((sin(6.28*x/256)+1)/2.0)*VM*0.051  是这样来的:((sin(6.28*x/256)+1)/2.0)*255*VM/5000;  我要通过控制VM 控制正弦波的幅度。

一周热门 更多>