• MC9S12XS128实现超声波测距


    先来说说超声波测距模块的引脚:

     

    VCC,  ECHO(接收端),   TRING(控制端),  OUT(悬空),  GND

    时序图:

     

    参考代码:

    开发环境:Freescale Codewarrior 5.0

    /*  
    *          Authour: flyreally  
    *  
    *自己写的一个超声波测距的模块,用查询方式做的,  
    *当然也可以用中断了  
    *  
    */  
      
    #include <hidef.h>      /* common defines and macros */   
    #include <MC9S12XS128.h>     /* derivative information */   
    #pragma LINK_INFO DERIVATIVE "mc9s12xs128"   
        
    /*可以通过更改TIMER的值来实现不同时间的定时,     
    定时长为TIMER * 10us*/      
    #define TIMER  1        
    #define TRING  PORTA_PA0    //控制端   
    #define ECHO   PORTA_PA1    //接收端    
      
    ulong time = 0;   
      
    /* n * 10us延时*/  
    void Delay_Us(ulong n)   
    {   
        time = n;   
        while (time);   
    }   
      
    /*IO口初始化*/  
    void IO_Init(void)   
    {   
        DDRA = 0x02;     //A0输出,A1输入    
    }   
            
      
    /*PIT初始化,实现10US定时*/      
    void PIT_Init(void)       
    {       
        PITCFLMT_PITE = 0;  //定时中断通道0关       
        PITCE_PCE0 = 1; //定时器通道0使能       
        PITMTLD0 = 160 - 1; //8位定时器初值设定,160分频       
        PITLD0 = TIMER - 1;   //16位定时器初值设定,TIMER*10us       
        PITINTE_PINTE0 = 1; //定时器中断通道0中断使能       
        PITCFLMT_PITE = 1;  //定时器通道0使能       
    }       
          
    void main(void)       
    {   
        ulong t;   
        double dis;   
      
        IO_Init();        //IO初始化   
        PIT_Init();       //PIT初始化       
        EnableInterrupts; //开中断     
          
        /*等待200us使超声波模块初始化完毕*/  
        Delay_Us(20);   
      
        while (1)   
        {   
            /*给控制端一个超过10US的高电平,然后置低*/  
            TRING = 1;   
            Delay_Us(2);       
            TRING = 0;   
      
            /*等待接收端产生高电平并计时*/  
            while (!ECHO);   
            time = 0xff;   
            while (ECHO);   
            t = 0xff - time;     //计时   
            dis = 1.7 * t;       //计算距离   
            //延时10MS,这个的原因大家看时序图,不同的硬件不同   
            Delay_Us(1000);          }       
    }       
          
    /*PIT定时中断*/      
    #pragma CODE_SEG __NEAR_SEG NON_BANKED       
    void interrupt 66 PIT0(void)       
    {       
        PITTF_PTF0 = 1; //清中断标志位    
        --time;      
    }     

  • 相关阅读:
    GhostScript命令参数详解(转)
    西安电子科技大学week02-问题规约表示及其搜索技术
    西安电子科技大学week01-状态空间表示及其问题解决
    canal同步mysql数据
    Navicat连接mysql数据库报错2003
    fieldset可以实现在虚线框中写文字
    CSS盒模型简单介绍
    js变量数组和对象常用方法
    js数组方法大全
    IIFE和闭包和let
  • 原文地址:https://www.cnblogs.com/pang123hui/p/2309966.html
Copyright © 2020-2023  润新知