微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 求助。。不知道哪里有问题了。用了外部中断里潜逃了定时器中断,超声波避障小车。

求助。。不知道哪里有问题了。用了外部中断里潜逃了定时器中断,超声波避障小车。

时间:10-02 整理:3721RD 点击:
#include<STC12C5616AD.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
sbit echo=P3^2;
sbit trig=P2^3;
unsigned char s,time;
void PWM_zk0(float zk)    //高电 平占得比例占空比为(Gao/255)
{
    CCAP0H = CCAP0L =255*(100.0 - zk)/100.0;
    CCAPM0 = 0x42;
    CR=1;
}
void PWM_zk1(float zk)    //高电平占得比例占空比为(Gao/255)
{
    CCAP1H = CCAP1L = 255*(100.0 - zk)/100.0;
    CCAPM1 = 0x42;
    CR=1;
}
void PWM_zk2(float zk)    //高电平占得比例占空比为(Gao/255)
{
    CCAP2H = CCAP2L = 255*(100.0 - zk)/100.0;
    CCAPM2 = 0x42;
    CR=1;
}
void PWM_zk3(float zk)    //高电平占得比例占空比为(Gao/255)
{
    CCAP3H = CCAP3L = 255*(100.0 - zk)/100.0;
    CCAPM3 = 0x42;
    CR=1;
}
void go()                                                           //前进
{
    PWM_zk0(0);
    PWM_zk1(90.0);
    PWM_zk2(0);
    PWM_zk3(90.0);   
}
void stop()
{
    PWM_zk0(0);
    PWM_zk1(0);
    PWM_zk2(0);
    PWM_zk3(0);        
}
void init()                                                           //初始化
{
    CCON=0;      
    CL = 0;         
    CH = 0;
    CMOD = 0x02;     
    CR = 1;
}
void delay1ms()//@11.0592MHz  延时1ms          //延时
{
    unsigned char i, j;   
    _nop_();
    i = 11;
    j = 190;
    do
    {
    while (--j);
    }
     while (--i);
}
void  StartModule(void)                  //启动模块
{
      trig=1;                                 //启动一次模块
     _nop_();
      _nop_();
      _nop_();
      _nop_();
      _nop_();
      _nop_();
      _nop_();
      _nop_();
      _nop_();
      _nop_();
      _nop_();
      _nop_();
      _nop_();
      _nop_();
      _nop_();
      _nop_();
      _nop_();
      _nop_();
      _nop_();
      _nop_();
      _nop_();
      trig=0;
  }               
void count()                   //计算
{
                  time=256*TH0+TL0;
        TH0=0;
        TL0=0;
        s=(time*1.7)/100;
}
void main()
{
    init();
    TMOD=0x01;//模式控制器的选择,选择只有定时器16位
    TH0=0;             //赋初值
    TL0=0;
    ET0=1;                                                         //允许定时器0中断
        EX0=1;              
    IT0=1;              //跳变沿
    EA=1;                      //总中断开启
    while(1)
    {
    //    go();
        
        StartModule();       //超声波的发射检测
        while(echo==0)  //当接收到返回的信号
        TR0=1;            //打开定时中断 ,开始计时
        while(echo==1)      //没有接收到
                {
        TR0=0;
                go();             //不开启定时器中断   
                 }
                          count();
        if(s<30)
            stop();
        if(s>=30)
            go();
    }
}
void into() interrupt 0      //外部中断
{           
}

void timer() interrupt 1     //定时器0的中断
{
         
}

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top