找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1523|回复: 1
打印 上一主题 下一主题
收起左侧

单片机超声波扫频、定频程序,为什么打不到预期的效果

[复制链接]
回帖奖励 100 黑币 回复本帖可获得 100 黑币奖励! 每人限 1 次
跳转到指定楼层
楼主
ID:241873 发表于 2019-7-16 22:08 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include <reg51.h>
#include <stdlib.h>

sbit Pulse = P2^0;

float Fixed_frequency;                                         
#define Fixed_Period ((1.0/Fixed_frequency)*500)
unsigned int Frequency = 12;                                         
#define Period ((1.0/Frequency)*500)                          
unsigned int Temp = 0, i = 1, Ms_20 = 0;


void Timer0_Init()
{
        TMOD &= 0XF0;
        TMOD |= 0X01;   
        TH0 = 0X96;               
        TL0 = 0X88;
        ET0 = 1;            
        TR0 = 1;               
}



void Timer1_Init()
{
        TMOD &= 0X0F;
        TMOD |= 0X20;        
        TH1 = TL1 = 256 - Period;           
        ET1 = 1;           
        TR1 = 1;           
}



void main()
{
        Timer0_Init();
        Timer1_Init();
        EA = 1;                  

        for(;;)                  
        {
                ;
        }
}



void timer0() interrupt 1
{
        TH0 = 0X96;
        TL0 = 0X88;
        Ms_20++;
        if(        Ms_20 == 3000)                                            
        {
                Fixed_frequency = rand()%13 + 12;
                ET1 = 0;
            TR1 = 0;
                TH1 = TL1 = 256 - Fixed_Period;
                ET1 = 1;
            TR1 = 1;               
        }
        else if(Ms_20 == 6000)                              
        {
                ET0 = 0;                                                   
            TR0 = 0;                                                   
                ET1 = 0;                                                   
            TR1 = 0;                                                   
        }

        if(Ms_20 < 3000)         
        {
      Frequency+=0.1;
                if(Frequency >25)
                        Frequency = 12;
                ET1 = 0;
            TR1 = 0;
                TH1 = TL1 = 256 - Period;            
                ET1 = 1;
            TR1 = 1;               
        }

}


void timer1() interrupt 3
{
        Pulse = !Pulse;                                       
}

//预期效果:一、打开开关,超声波发出6KHz的低频测试超声,持续10秒钟左右,1分钟后进入工作状
二、开始工作时超声波频率是12 KHz~25 KHz。2分钟的工作,一分钟是扫频,一分钟是定频。扫频是在12KHz~25 KHz的频段中不断变换频点循环工作。循环速度是3.8秒,定频是工作时随机选取一个频点工作1分钟。

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:123289 发表于 2019-7-17 11:02 | 只看该作者
将你的程序画成框图,看看流程是否说得过去(符合题意)。
在T0中断服务程序中处理事件,是不太好的。但不代表不可以这样做。
晶振频率是多少呢?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表