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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2062|回復(fù): 2
打印 上一主題 下一主題
收起左側(cè)

大神能講一下這個單片機里程計數(shù)中斷程序原理嗎

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:725584 發(fā)表于 2020-5-8 13:36 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
/*************************************************************
                      單片機中斷頭文件

實現(xiàn)功能:單片機中斷的控制控制

補充說明:
***************************************************************/
#ifndef _INTERRUPT_H_
#define _INTERRUPT_H_
#include<reg52.h>
#include<LCD1602.h>

#define uchar unsigned char
#define uint unsigned int

/**********************引腳定義************************/
sbit key_z=P3^2;         //霍爾輸入引腳
sbit moto =P3^7;         //電機控制引腳
/**********************變量定義************************/
uchar T0_num;                 //定時器0計數(shù)變量
uint T1_num;                 //定時器1計數(shù)變量
uint ii=0;                         //用于控制電機PWM輸出
extern uint Wait;         //等待時間
extern uint mil;         //行駛里程
extern bit strat_f;         //初始界面顯示標(biāo)志,=0顯示初始界面,=1可能計價、設(shè)置、總價顯示
extern bit start;         //開始計價標(biāo)志,=0非計價模式,=1計價模式
bit f;                                 //回到初始界面標(biāo)志,=0非首次回到初始界面,=1首次回到初始界面

uchar vs=5;          //轉(zhuǎn)速等級,4~9;
uint numss;                         //記錄兩次霍爾感應(yīng)的間隔
bit mil_f=0;                 //=1,檢測到霍爾信號標(biāo)志
bit wait_f=1;                 //=0,等待1S標(biāo)志
/********************************************************
函數(shù)名稱:void delayms(uint ms)
函數(shù)作用:毫秒延時函數(shù)
參數(shù)說明:
********************************************************/
void delayms(uint ms)
{
        unsigned char i=100,j;
        for(;ms;ms--)
        {
                while(--i)
                {
                        j=10;
                        while(--j);
                }
        }
}
/*********************************************************
函數(shù)名稱:void T0_init()
函數(shù)作用:定時器0初始化函數(shù)
參數(shù)說明:
*********************************************************/
void T0_init()
{
        EA=1;                  //開總中斷
        ET0=1;                 //定時器T0中斷允許         
        TMOD=0x11;             //使用定時器T0、T1的模式1
        TH0=(65536-50000)/256; //定時器T0的高8位賦初值
        TL0=(65536-50000)%256; //定時器T0的低8位賦初值
        TR0=0;                                   //關(guān)閉定時器0

        ET1=1;                 //定時器T1中斷允許                                                                                                                                                                                                                                                                                                                                                                                             
        TH1=(65536-1500)/256;  //定時器T1的高8位賦初值
        TL1=(65536-1500)%256;  //定時器T1的低8位賦初值
        TR1=0;                                   //關(guān)閉定時器1
}
/*********************************************************
函數(shù)名稱:void Int0_init()
函數(shù)作用:外部中斷0初始化函數(shù)
參數(shù)說明:
*********************************************************/
void Int0_init()
{
        EA=1;                  //開放總中斷         
           IT0=1;                 //下降沿觸發(fā)
        EX0=0;                 //關(guān)閉外部中斷0
}
/*********************************************************
函數(shù)名稱:void T0_interrupt(void) interrupt 1 using 0
函數(shù)作用:定時器0中斷處理函數(shù)
參數(shù)說明:定時50ms中斷一次
*********************************************************/
void T0_interrupt(void) interrupt 1 using 0
{                  
        TH0=(65536-50000)/256; //定時器T0的高8位重新賦初值
        TL0=(65536-50000)%256; //定時器T0的低8位重新賦初值

        T0_num++;                           //計數(shù)變量+1
        if(T0_num==20)                   //定時20*50ms=1s
        {
                T0_num=0;                   //重置計數(shù)變量
                if(Wait<5999)
                        Wait++;                           //等待時間+1s
                wait_f=1;                   //標(biāo)記1S完成
        }                                                
}

/*********************************************************
函數(shù)名稱:void T1_interrupt(void) interrupt 3
函數(shù)作用:定時器1中斷處理函數(shù)
參數(shù)說明:定時15ms中斷一次
轉(zhuǎn)速等級:轉(zhuǎn)速等級vs越大,一個PWM周期內(nèi)輸出低電平時間越長,
         轉(zhuǎn)速越快;vs變小,一個PWM周期內(nèi)輸出低電平時間減
                 短,轉(zhuǎn)速變慢。
*********************************************************/
void T1_interrupt(void) interrupt 3
{                  
        TH1=(65536-1500)/256; //定時器T1的高8位重新賦初值
        TL1=(65536-1500)%256; //定時器T1的低8位重新賦初值
        if(start==0)                  //處于非計價模式
        {
                T1_num++;                  //計數(shù)變量+1
                if(T1_num==13000) //定時13000*15ms=19.5s
                {
                        T1_num=0;          //重置計數(shù)變量
                        strat_f=0;          //恢復(fù)到初始界面
                        f=1;                  //標(biāo)記首次恢復(fù)到初始界面
                        TR1=0;                  //關(guān)閉定時器1
                }
        }
        else                                  //計價模式下
        {                                          //PWM控制電機轉(zhuǎn)速
                if(ii>vs)                  //計數(shù)變量ii大于轉(zhuǎn)速等級
                        moto=1;                  //輸出高電平,電機停止
                else                          
                        moto=0;                  //輸出低電平,電機轉(zhuǎn)動
                ii++;                          //計數(shù)變量+1
                if(ii>9)                  //計數(shù)變量【大于9】
                        ii=0;                  //重置計數(shù)變量
        }                                          
        numss++;                          //兩次霍爾感應(yīng)間隔時間計數(shù)+1               
}
/*********************************************************
函數(shù)名稱:void init0(void) interrupt 0
函數(shù)作用:外部中斷0中斷處理函數(shù)
參數(shù)說明:
*********************************************************/
void init0(void) interrupt 0
{
        if(key_z==0&&numss>200)//再次確認(rèn)霍爾感應(yīng),并且距上一次感應(yīng)的時間足夠長,如果過短認(rèn)為是波動放棄處理
        {
                if(mil<999)
                    mil++;                           //行駛里程+0.1km
                numss=0;                   //重置兩次霍爾感應(yīng)間隔時間
                mil_f=1;                   //標(biāo)記檢測到霍爾信號
        }
}
#endif

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

沙發(fā)
ID:584814 發(fā)表于 2020-5-8 15:00 | 只看該作者
這么詳細(xì)的注釋幾乎每句一注你是想請家教么
回復(fù)

使用道具 舉報

板凳
ID:236035 發(fā)表于 2020-5-8 15:06 | 只看該作者
key_z==0&&numss>200 //表示收到了兩次霍爾信號,且間隔大于3秒,則進行里程計數(shù)和相關(guān)處理。
if(mil<999)                   //如果里程計數(shù)值沒超過99.9KM
         mil++;                 //則行駛里程+0.1km
numss=0;                     //重置兩次霍爾感應(yīng)間隔時間
mil_f=1;                       //標(biāo)記檢測到兩次霍爾信號
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 久久久精品一区 | 国产一区二区三区免费 | 人人九九精 | 九色 在线 | 成人在线视频网站 | 99re99| 午夜天堂精品久久久久 | 91av大全 | 成人激情视频在线观看 | 午夜影院在线观看 | 国产探花 | 久久一本 | 日日夜夜精品免费视频 | 中文字幕亚洲一区二区三区 | 男人的天堂在线视频 | 免费观看黄色一级片 | 国产一区二区在线免费观看 | 欧美午夜一区 | 亚洲视频免费在线观看 | 久草在线在线精品观看 | 成人免费在线视频 | 男女羞羞视频在线免费观看 | 亚洲精品久久久久久国产精华液 | av免费网站在线观看 | 国产激情视频在线观看 | 日韩三级电影在线看 | 国产精品成人一区二区三区夜夜夜 | 精品国产一区探花在线观看 | 好姑娘影视在线观看高清 | 亚洲国产一区二区三区在线观看 | 91在线精品一区二区 | 午夜精品久久久 | 天天操综合网站 | 久久综合久色欧美综合狠狠 | 久久精品亚洲精品 | 婷婷激情五月网 | 夜夜爽99久久国产综合精品女不卡 | 91精品国产自产精品男人的天堂 | 久久久高清 | 国产一区二区电影网 | 亚洲国产成人精品女人久久久 |