程序是这样的:(无论我怎么改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;
}
((sin(6.28*x/256)+1)/2.0)*VM*0.051 是这样来的:((sin(6.28*x/256)+1)/2.0)*255*VM/5000; 我要通过控制VM 控制正弦波的幅度。
一周热门 更多>