单片机基础编程

2019-07-15 11:36发布

#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;
}
}
这个是我测试的程序,想做一个波形发生器。产生方波时,相位调到最大,会出现图片的情况,调小一点就不会,请问:我的这个问题是放大电路没有设计好,还是程序没有编辑正确?应该如何修改?
30[C%4(W~_]Z)ULVYE242HD.png
495}MK~T~B[8MSK%HEJNIQW.png
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
6条回答
人中狼
1楼-- · 2019-07-15 14:05
输入频率过高会导致运放失真,没看出是哪个引脚输出波形的,没看出怎么调节相位的,波形里也没看出当前波形的频率,波形的频率怎么调节也没看出来,你确定是在调节相位,而不是调节频率,信息太少 最佳答案
1159310896
2楼-- · 2019-07-15 19:17
有没有大神给一点提示呢,我现在在写毕业论文设计,请大家帮帮忙
1159310896
3楼-- · 2019-07-16 00:46
 精彩回答 2  元偷偷看……
人中狼
4楼-- · 2019-07-16 03:37
你先试试P2到多少数值时波形开始失真,这个值可以做为上限值,同时可以算算频率是多少,我总觉得你的相位调节实际是频率不调节,你用示波器看看频率范围是多少,如果你的相位调节真的是频率调节的话,会有最高和最低两个值,最高值会超过开始失真的值,多试验几次,找找规律

评分

参与人数 1积分 +1 收起 理由 1159310896 + 1

查看全部评分

1159310896
5楼-- · 2019-07-16 05:27
人中狼 发表于 2017-3-29 16:05
你先试试P2到多少数值时波形开始失真,这个值可以做为上限值,同时可以算算频率是多少,我总觉得你的相位调节实际是频率不调节,你用示波器看看频率范围是多少,如果你的相位调节真的是频率调节的话,会有最高和最低两个值,最高值会超过开始失真的值,多试验几次,找找规律 ...

感谢你的再次回复,
下面是我截取的图片,
图1是P2口都为高电平,b=0xff;整个周期是8ms;
图2是P2口都为低电平,b=0x00;整个周期是0.8s;
两种极限情况都失真,整个过程都是失真的;
晶振的频率一开始选的是24,后来改为12后,情况并没有改善;
放大器我选的是AD817运放,是否对这个问题有影响?
另外,我输出的波形有方波,锯齿波,三角波,正谐波,但只有方波出现失真情况最为严重,其他的并不明显。
1.png
2.png
人中狼
6楼-- · 2019-07-16 05:57
把运放输出端的电容去掉试试

一周热门 更多>