久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1641|回復: 11
收起左側

求51單片機智能小車使用中斷函數調速對延時影響的解決辦法

[復制鏈接]
ID:1064841 發表于 2023-3-25 10:43 | 顯示全部樓層 |閱讀模式
本人在用中斷函數調速時,發現在主函數中延時函數不準確,或者程序一直卡在延時函數里不出來,求大佬解決辦法
具體代碼如下:
#include <REG51.h>
#include "OLED.h"
#include "bmp.h"
#include "TIMER0.H"
#include "Delay.H"
//#include "Motor.H"
#include "Direction.h"
//#include "bi_zhang.h"
#include "xunji.h"
#include "chaoshengbo.h"

sbit EN1=P3^0;
sbit EN2=P3^1;
sbit EN3=P3^2;
sbit EN4=P3^3;

unsigned int pwml,pwmr,t;//左右占空比,比較值
unsigned char Distance__;
//unsigned int n=0,i,j,k;//這些變量不清楚,先留著
unsigned int m;

void delay__(unsigned int ms)
{
    TMOD &= 0xF0; // 設置定時器0為模式1,16位定時器/計數器
    TMOD |= 0x01;
    TH0 = (65536 - 1000) / 256; // 設置定時器初值
    TL0 = (65536 - 1000) % 256;
    TR0 = 1; // 啟動定時器
    while (ms--)
    {
        while (!TF0); // 等待定時器溢出
        TF0 = 0; // 清除定時器溢出標志
        TH0 = (65536 - 1000) / 256; // 重新設置定時器初值
        TL0 = (65536 - 1000) % 256;
    }
    TR0 = 0; // 停止定時器
}

void main()
{      
        u8 t=' ';
        OLED_Init();//初始化OLED
        OLED_ColorTurn(0);//0正常顯示,1 反色顯示
        OLED_DisplayTurn(0);//0正常顯示 1 屏幕翻轉顯示
        Timer0_Init();

        while(1)
        {
                xun_ji();
                Distance__=GetDistance();
                OLED_ShowString(1,1,"Distance: ",16);
                OLED_ShowNum(75,1,Distance__,2,16);
               
                if(Distance__<20.8)
                {
//                        all_stop();
                       
//                        m=1;
                        pwml=pwmr=10;
                        delay__(1000);
                        xun_ji();
                }
                else if(Distance__>21)
                {
//                        m=0;
                        xun_ji();
                }
                OLED_ShowNum(12,40,m,1,16);
        }
      
}




//定時器中斷函數
void Timer0_Routine() interrupt 1
{
        TL0 = (65536-100)%256;                //設置定時初始值
        TH0 = (65536-100)/256;                //設置定時初始值
        t++;//周期計時加
        //左pwm
        if(t<pwml)
        {
                EN1 = 1;
                EN2 = 1;
        }
        else
        {
                EN1 = 0;
                EN2 = 0;
        }
        //右pwm
        if(t<pwmr)
        {
                EN3 = 1;
                EN4 = 1;
        }
        else
        {
                EN3 = 0;
                EN4 = 0;
        }

        if(t>=100){t = 0;}

}


回復

使用道具 舉報

ID:857072 發表于 2023-3-25 11:17 來自手機 | 顯示全部樓層
請拋棄include "Delay.H。延時函數只在教學演示程序里使用,以方便理解。正式工程里是不用的。
回復

使用道具 舉報

ID:857072 發表于 2023-3-25 11:19 來自手機 | 顯示全部樓層
不過比中斷調用耗時差不多的比如延時個幾微秒還是可以用的。
回復

使用道具 舉報

ID:1064841 發表于 2023-3-25 11:22 | 顯示全部樓層
a185980800 發表于 2023-3-25 11:17
請拋棄include "Delay.H。延時函數只在教學演示程序里使用,以方便理解。正式工程里是不用的。

那請問,我要實現小車在循跡的過程中停止5秒,再循跡,這個過程中停止5秒該怎么實現
回復

使用道具 舉報

ID:1064841 發表于 2023-3-25 11:27 | 顯示全部樓層
a185980800 發表于 2023-3-25 11:19
不過比中斷調用耗時差不多的比如延時個幾微秒還是可以用的。

可是我需要實現延時很長的功能,這顆咋辦
回復

使用道具 舉報

ID:844772 發表于 2023-3-25 15:29 來自手機 | 顯示全部樓層
不要用同一個中斷,另外中斷里寫的太多,時間太短
回復

使用道具 舉報

ID:1064841 發表于 2023-3-25 16:26 | 顯示全部樓層
glinfei 發表于 2023-3-25 15:29
不要用同一個中斷,另外中斷里寫的太多,時間太短

可是我只用了一個中斷函數,只不過延時函數是和中斷用的同一個定時器
回復

使用道具 舉報

ID:1034262 發表于 2023-3-25 22:50 | 顯示全部樓層
項目程序,不要使用軟件延時,不要使用查詢的延時,切記!現在的MCU速度都會很快,延時1ms就浪費掉超過1萬條指令的時間了。
回復

使用道具 舉報

ID:1064841 發表于 2023-3-26 09:53 | 顯示全部樓層
coody_sz 發表于 2023-3-25 22:50
項目程序,不要使用軟件延時,不要使用查詢的延時,切記!現在的MCU速度都會很快,延時1ms就浪費掉超過1萬 ...

那請問大佬我該怎么樣才能實現延時5秒的功能了
回復

使用道具 舉報

ID:434018 發表于 2023-3-26 11:12 | 顯示全部樓層
使用簡單的狀態機,就可以解決.
回復

使用道具 舉報

ID:844772 發表于 2023-3-27 09:12 | 顯示全部樓層
WangMC 發表于 2023-3-25 16:26
可是我只用了一個中斷函數,只不過延時函數是和中斷用的同一個定時器

1.你看一下,定時器里面設置是100,外部又設置成1000,定時器溢出是按100來的,所以延時就不準;
2.不知道你延時干啥用,但在小車控制里不宜用延時等待。
3.定時器按100配置,又要干那么多事,很容易卡死的。
建議就用定時器提供一個時間計數器,所有任務按這個計數器工作。
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美最猛黑人xxxx黑人 | 日韩中文字幕一区二区 | 三级免费| 欧美一级全黄 | 欧美精品一区三区 | 中文字幕一区二区三区四区 | 国产精品久久久久久一区二区三区 | 91精品久久久久久久久久 | 亚洲综合在线视频 | 午夜天堂精品久久久久 | 特黄特黄a级毛片免费专区 av网站免费在线观看 | 国产精品一区二区无线 | 国产区在线 | 天天看天天爽 | 另类一区| 国产日韩一区二区三区 | 日韩视频精品在线 | 男女一区二区三区 | 天堂在线免费视频 | 国产大学生情侣呻吟视频 | av先锋资源 | 精品美女视频在线观看免费软件 | 国产精品日韩高清伦字幕搜索 | 午夜视频免费在线观看 | 欧美激情在线观看一区二区三区 | 成人欧美一区二区 | 综合久久久久久久 | 欧美国产精品一区二区三区 | 色性av| 天天操天天射天天 | 亚洲精品视频在线 | 国产成人精品网站 | 97国产一区二区 | 国产婷婷精品av在线 | 91影库| 日韩成人在线播放 | 久久精品二区 | 欧美视频在线播放 | 精品国产乱码一区二区三区a | 精品视频在线观看 | 国产一区影院 |