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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1936|回復: 23
收起左側

單片機外部中斷問題

[復制鏈接]
ID:299872 發表于 2024-5-10 02:37 | 顯示全部樓層 |閱讀模式
ERTERT.JPG
void init(){
        IT0=1;
        EX0=1;
        EA=1;
}

就是每中斷一次從數組abc中取一個值給t
for循環是讀xu的值,值是多少led閃幾下,
發現LED閃的不對呀,按理來說,中斷一次led多閃一次,但實際不是,

用的P32的外部中斷0,這個需要上拉或下拉嗎????
P3PU |= 0x04;
這個內部上拉,用和不用,都沒作用。

回復

使用道具 舉報

ID:1109793 發表于 2024-5-10 08:25 | 顯示全部樓層
中斷觸發方式呢?
回復

使用道具 舉報

ID:619259 發表于 2024-5-10 09:28 | 顯示全部樓層
EA放在中斷函數里不科學吧!
回復

使用道具 舉報

ID:607298 發表于 2024-5-10 09:35 | 顯示全部樓層
中斷程序加延時是大忌,完全偏離中斷的意義。
可以在中斷里改變閃爍次數變量,然后在主程序里實現閃爍。
回復

使用道具 舉報

ID:275826 發表于 2024-5-10 09:38 | 顯示全部樓層
編譯沒通過吧
回復

使用道具 舉報

ID:77589 發表于 2024-5-10 09:57 | 顯示全部樓層
編程技巧先不說,延時短了,眼睛根本看不到閃
回復

使用道具 舉報

ID:1109793 發表于 2024-5-10 10:29 | 顯示全部樓層
cy009 發表于 2024-5-10 09:28
EA放在中斷函數里不科學吧!

有啥不科學的?
回復

使用道具 舉報

ID:1109793 發表于 2024-5-10 10:30 | 顯示全部樓層
lightday 發表于 2024-5-10 09:35
中斷程序加延時是大忌,完全偏離中斷的意義。
可以在中斷里改變閃爍次數變量,然后在主程序里實現閃爍。

樓主的中斷只是用來接收開關信號的,又不是定時器中斷,加點延時咋了?
回復

使用道具 舉報

ID:161164 發表于 2024-5-10 13:06 | 顯示全部樓層
沒電路圖盲猜按鍵接中斷
你沒加按鍵消抖,并在中斷里延時了
于是中斷在延時期間收到抖動信號,誤判了
反復進入中斷
回復

使用道具 舉報

ID:161164 發表于 2024-5-10 13:26 | 顯示全部樓層
2024-05-10_132529.png
回復

使用道具 舉報

ID:299872 發表于 2024-5-10 14:28 | 顯示全部樓層
lkc8210 發表于 2024-5-10 13:06
沒電路圖盲猜按鍵接中斷
你沒加按鍵消抖,并在中斷里延時了
于是中斷在延時期間收到抖動信號,誤判了

你說對了。
我覺得是抖動的問題,所以在中斷是把EA關了呀。
在中斷里延時也是怕抖動的問題。

重點是有一個邏輯我沒弄明白。比如中斷里的程序還沒處理為又發生中斷,這時單片機怎么處理,是直接無視,還是排對處理呀???
回復

使用道具 舉報

ID:299872 發表于 2024-5-10 14:29 | 顯示全部樓層
Longan.Wang 發表于 2024-5-10 09:57
編程技巧先不說,延時短了,眼睛根本看不到閃

一次是10ms,20次是200ms
回復

使用道具 舉報

ID:299872 發表于 2024-5-10 14:36 | 顯示全部樓層
drrteet.JPG
應該就是這個問題,
所以我關EA,開EA,加延時。
看樣子加延時是沒用的。
開關EA也不行,那應該怎么處理呀??
drrteet.JPG
回復

使用道具 舉報

ID:161164 發表于 2024-5-10 14:43 | 顯示全部樓層
xjtong 發表于 2024-5-10 14:28
你說對了。
我覺得是抖動的問題,所以在中斷是把EA關了呀。
在中斷里延時也是怕抖動的問題。

"中斷里的程序還沒處理完又發生中斷"
單片機會繼續運行中斷函數
直到運行完畢跳出中斷函數
單片機會立刻再次運行中斷函數
回復

使用道具 舉報

ID:275826 發表于 2024-5-10 15:30 | 顯示全部樓層
都說了編譯通不過呀
回復

使用道具 舉報

ID:57657 發表于 2024-5-10 15:39 | 顯示全部樓層
外部中斷接的是什么? 如果是按鍵需要消抖處理。
回復

使用道具 舉報

ID:299872 發表于 2024-5-10 17:29 | 顯示全部樓層
問題解決了。
void int0() interrupt 0
{
        u8 i;
        if(!P32){
        for(i=0;i<xu;i++){
                led=1;dd(20);
                led=0;dd(20);
        }
        t=abc[xu++];
        xu &=0x07;
        }
}


這樣就好了。
回復

使用道具 舉報

ID:299872 發表于 2024-5-10 17:33 | 顯示全部樓層
tyrl800 發表于 2024-5-10 15:30
都說了編譯通不過呀

編譯一直沒問題,就是中斷是亂的。應該是中斷重入的問題。
回復

使用道具 舉報

ID:299872 發表于 2024-5-10 17:34 | 顯示全部樓層
npn 發表于 2024-5-10 15:39
外部中斷接的是什么? 如果是按鍵需要消抖處理。

恩,直接用杜邦線點GND,按鍵都省了。
回復

使用道具 舉報

ID:1109793 發表于 2024-5-10 17:37 | 顯示全部樓層
不關是不是重復中斷,這樣延時的閃爍都應該正常才對啊,先軟件模擬一下看看那些變量都是多少
回復

使用道具 舉報

ID:883242 發表于 2024-5-10 17:39 | 顯示全部樓層
xjtong 發表于 2024-5-10 14:28
你說對了。
我覺得是抖動的問題,所以在中斷是把EA關了呀。
在中斷里延時也是怕抖動的問題。

再發生中斷會掛起pending,退出中斷處理程序后會再次進入中斷處理程序。
回復

使用道具 舉報

ID:299872 發表于 2024-5-10 17:49 | 顯示全部樓層
就是用單片機操作續電器,續電器控制風扇。

有一個2。4G雷達,有運動就開風扇,開的時間用延時控制。
中斷的作用是改變延時的時候,從而改變風扇運行的時候。

#include <STC8G.h>
#include <intrins.h>
#define u16 unsigned int
#define u8 unsigned char
       
sbit leda = P5^5;
sbit led = P5^4;
sbit fan = P3^3;

const unsigned int data abc[8]={0xea60,0xa410,0x8ca0,0x7530,0x4650,0x1770,0x0bb80,0x05dc};
u16 t;
u8 xu;

void Delay10ms(void)        //@11.0592MHz
{
        unsigned char data i, j;
        _nop_();_nop_();
        i = 144;
        j = 157;
        do
        {
                while (--j);
        } while (--i);
}

void dd(unsigned int tttt){
        while(tttt--)Delay10ms();
}

void init(){
        IT0=1;
        EX0=1;
        EA=1;
}

void int0() interrupt 0
{
        u8 i;
        if(!P32){
        for(i=0;i<xu;i++){
                led=1;dd(20);
                led=0;dd(20);
        }
        t=abc[xu++];
        xu &=0x07;
        }
}

void main(){
        u16 tt;
        P5M0 &= ~0x30; //P54雙向口,P55高阻
        P5M1 = (P5M1 & ~0x10) | 0x20;
        P3M0 = (P3M0 & ~0x04) | 0x08; //P33 推挽
        P3M1 &= ~0x0c;
        P3PU |= 0x04; //P3.2上拉開打
        init();
        led=0;
        while(1){
                if(leda)tt=t;   //5min
                led=leda;
                if(tt){tt--;fan=1;Delay10ms();} else {fan=0;}
        }
}


這樣基本就沒問題的。就是中斷重入的問題。開始LED閃爍明顯不對。現在一切正常了。
回復

使用道具 舉報

ID:275826 發表于 2024-5-10 19:42 | 顯示全部樓層
xjtong 發表于 2024-5-10 17:33
編譯一直沒問題,就是中斷是亂的。應該是中斷重入的問題。

我用KEIL 4編譯你程序不過,修改下int0 通過,程序一切正常,沒有亂入問題
回復

使用道具 舉報

ID:1120208 發表于 2024-5-11 14:38 | 顯示全部樓層
xiaobendan001 發表于 2024-5-10 10:30
樓主的中斷只是用來接收開關信號的,又不是定時器中斷,加點延時咋了?

只要是中斷,都是不建議有延時的,反正linux內核的中斷是這樣的思想
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 久久精品视频一区二区三区 | 一级在线视频 | 国产婷婷综合 | 成人午夜视频在线观看 | 国产精品久久久久久福利一牛影视 | 特一级黄色毛片 | 成人福利片 | 四虎国产 | 成人免费网站视频 | 亚洲电影免费 | 色偷偷噜噜噜亚洲男人 | 免费在线观看黄视频 | 欧美日韩国产精品一区 | 亚洲深夜福利 | 一区在线播放 | 天天草夜夜骑 | 91精品国产91综合久久蜜臀 | 色吧综合网 | 99精品久久久久久 | 亚洲资源站 | 北条麻妃视频在线观看 | 91精品91久久久 | 美女一区二区在线观看 | 亚洲成av人片在线观看无码 | 精品二区视频 | 天堂中文字幕av | 久久一久久 | www.国产| 成人国产综合 | 日韩欧美一区二区三区在线播放 | 精品国产乱码久久久久久88av | 日本不卡一区二区 | 一级一级毛片免费看 | 在线免费黄色小视频 | 一区二区三区不卡视频 | 亚洲综合区 | 免费在线观看一级毛片 | 国外成人免费视频 | 国产精品久久久久久久久久久免费看 | 亚洲精品v日韩精品 | 国产日韩一区二区三免费 |