#include<reg52.h>
#include<math.h>
#define uchar unsigned char
#define uint unsigned int
#define fosc 12000000
#define all 65535
float sindatar;
sbit hong=P2^3;
sbit lan=P2^5;
sbit huang=P2^7;
uint VM=2500,b=0;
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)
{
n 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;
}
这是我的程序,麻烦帮忙解答一下为什么。 此时示波器上的显示的周期是2s,这跟我的设置的频率的FREQ=1有点不对。 求解释一下。
|