#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int
sbit SQU_K =P3^4;
sbit SQU_L =P1^0;
//延时函数
//方波发生函数
void square()
{
uchar a,b;
for(a=0;a<255;a++)
{
P0=0xff;
P2=0xff;
b=P2;
b=~b;
while(b--); //调节相位,b的变化越大,相位变化越小
}
for(a=255;a>0;a--)
{
P0=0x00;
P2=0xff;
b=P2;
b=~b;
while(b--);
}
}
//主函数
void main()
{
P1=0xff;
P2=0xff;
P3=0xff;
while(1)
{
P0 = 0;
if(SQU_K==0)
{
SQU_L=0;
square();
}
SQU_L=1;
}
}
这个是我测试的程序,想做一个波形发生器。产生方波时,相位调到最大,会出现图片的情况,调小一点就不会,请问:我的这个问题是放大
电路没有设计好,还是程序没有编辑正确?应该如何修改?
-
-
评分
查看全部评分
感谢你的再次回复,
下面是我截取的图片,
图1是P2口都为高电平,b=0xff;整个周期是8ms;
图2是P2口都为低电平,b=0x00;整个周期是0.8s;
两种极限情况都失真,整个过程都是失真的;
晶振的频率一开始选的是24,后来改为12后,情况并没有改善;
放大器我选的是AD817运放,是否对这个问题有影响?
另外,我输出的波形有方波,锯齿波,三角波,正谐波,但只有方波出现失真情况最为严重,其他的并不明显。
一周热门 更多>