久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標(biāo)題:
STC8單片機(jī)紅外中斷INT0多次進(jìn)入以及無(wú)法回到主程序?
[打印本頁(yè)]
作者:
最閑的閑魚(yú)
時(shí)間:
2019-1-5 17:58
標(biāo)題:
STC8單片機(jī)紅外中斷INT0多次進(jìn)入以及無(wú)法回到主程序?
小弟最近在做項(xiàng)目的驅(qū)動(dòng)設(shè)計(jì)時(shí)碰到關(guān)于外部中斷的一些問(wèn)題想過(guò)來(lái)請(qǐng)教一下大神。
1.背景描述:使用INT0檢測(cè)紅外信號(hào),測(cè)試程序包含了I2C、UART0、定時(shí)器0這些外設(shè);
2.處理方法:在INT0中斷處理函數(shù)中先關(guān)閉EX0避免紅外信號(hào)多段下降沿的多次觸發(fā),然后使用定時(shí)器結(jié)合對(duì)引腳高低電平的判斷進(jìn)行電平計(jì)時(shí)從而實(shí)現(xiàn)解碼,解碼結(jié)束后再重新開(kāi)啟EX0。
3.出現(xiàn)的問(wèn)題:1、上述的方法還是無(wú)法避免多次進(jìn)入中斷的情況,而且一個(gè)紅外信號(hào)時(shí)間內(nèi)進(jìn)入中斷次數(shù)沒(méi)有明顯規(guī)律;
2、如果本次紅外信號(hào)中斷僅進(jìn)一次,還是可以回到主程序繼續(xù)執(zhí)行,但是一旦連續(xù)進(jìn)入大于等于兩次則無(wú)法返回主程序,也就是說(shuō)PC所指向的地址已經(jīng)不是主程序了,但是下次紅外信號(hào)還是可以被接收并觸發(fā)中斷的,只不過(guò)也回不到主程序而已。
4.下面我貼一下我的部分代碼,煩請(qǐng)各位大神指教
uint8 IrValue[4];//紅外信號(hào)緩存數(shù)組
uint8 IrFlag = 0;//接收并成功解碼紅外信號(hào)標(biāo)志量
uint32 LowTime, HighTime;//存儲(chǔ)高、低電平的時(shí)間長(zhǎng)度
…………………………
…………………………
…………………………
/*******************************************************************************
* 函數(shù)名 : IrDeCode
* 函數(shù)功能 : 4字節(jié)紅外碼解碼函數(shù)
* 輸入 : void
* 輸出 : bit,解碼正確返回1,否則返回0
*******************************************************************************/
bit IrDeCode(void)
{
uint8 i,j;
uint8 Temp;//存儲(chǔ)解碼出的數(shù)據(jù)
for(i=0;i<4;i++)//識(shí)別4組數(shù)據(jù),即4個(gè)字節(jié)數(shù)據(jù)
{
for(j=0;j<8;j++)//識(shí)別字節(jié)中的每一位
{
Temp <<= 1;//因?yàn)橄茸x出的是高位數(shù)據(jù),故每一次右移一位,保證8次后得到完整數(shù)據(jù)
/*檢測(cè)每一位的0.56ms低電平*/
Timer0Enable(); //啟動(dòng)定時(shí)器0
while(IRIN == 0); //等每1位0.56ms低電平過(guò)去
TR0 = 0; //暫時(shí)關(guān)閉定時(shí)器0
LowTime = TH0*256+TL0; //保存低電平的時(shí)間
/*檢測(cè)每一位的后續(xù)高電平時(shí)間*/
Timer0Enable(); //啟動(dòng)定時(shí)器0
while(IRIN == 1); //等每1位后續(xù)的高電平過(guò)去
TR0 = 0; //暫時(shí)關(guān)閉定時(shí)器0
HighTime = TH0*256+TL0; //保存低電平的時(shí)間
/*判斷位1或位0*/
if((LowTime<531)||(LowTime>1531))//超出低電平范圍
return 0;
if((HighTime>732)&&(HighTime<1332))
Temp &= 0xfe;
if((HighTime>2615)&&(HighTime<3415))
Temp |= 0x01;
}
IrValue[i] = Temp;
}
/*校驗(yàn)*/
if(IrValue[2] != ~IrValue[3])
return 0;//若校驗(yàn)錯(cuò)誤,則返回0
return 1;//若通過(guò)校驗(yàn),則返回1
}
/*******************************************************************************
* 函數(shù)名 : IrIRQ
* 函數(shù)功能 :外部中斷處理函數(shù)
* 輸入 : void
* 輸出 : void
*******************************************************************************/
void IrIRQ(void) interrupt 0 using 0
{
/*只進(jìn)行一次的下降沿判斷,剩下的全在中斷中完成解碼*/
EX0=0; //關(guān)閉外中斷0,不再接收二次紅外信號(hào)的中斷,只解碼當(dāng)前紅外信號(hào)
/*低電平段檢測(cè)*/
Timer0Enable(); //啟動(dòng)定時(shí)器0
while(IRIN == 0); //等引導(dǎo)段9ms低電平過(guò)去
TR0 = 0; //暫時(shí)關(guān)閉定時(shí)器0
LowTime = TH0*256+TL0; //保存低電平的時(shí)間
/*高電平段檢測(cè)*/
Timer0Enable(); //啟動(dòng)定時(shí)器0
while(IRIN == 1); //等引導(dǎo)段4.5ms高電平過(guò)去
TR0 = 0; //暫時(shí)關(guān)閉定時(shí)器0
HighTime = TH0*256+TL0; //保存高電平的時(shí)間
if((LowTime>15580)&&(LowTime<17580)&&(HighTime>7290)&&(HighTime<9290))
{
IrFlag = IrDeCode();
}
UARTSendByte(0xDD);//通過(guò)串口判斷進(jìn)入幾次中斷
EX0 = 1;//重新開(kāi)啟INT0中斷
}
作者:
devcang
時(shí)間:
2019-1-5 18:53
建議不在中斷函數(shù)內(nèi)調(diào)用別的函數(shù)
~~~~~~~~~~~
作者:
Y_G_G
時(shí)間:
2019-1-5 22:01
不要在當(dāng)前中斷程序中關(guān)閉當(dāng)前中斷,進(jìn)入中斷本身就已經(jīng)屏蔽了其它低等級(jí)中斷了,如果是本身的中斷被自身的中斷觸發(fā)中斷了,你可以進(jìn)入中斷就關(guān)閉全局中斷試一下
關(guān)閉EA試一下,退出中斷的時(shí)候再打開(kāi)EA
作者:
最閑的閑魚(yú)
時(shí)間:
2019-1-6 14:07
已經(jīng)使用掃描管腳的方式解決問(wèn)題了,我接下來(lái)講一下出現(xiàn)上述問(wèn)題的原因以及替代方案的解決方法。
作者:
15576739794
時(shí)間:
2019-1-24 14:38
我現(xiàn)在也是碰到這個(gè)問(wèn)題 看的金沙灘工作室的那個(gè)原版紅外模塊程序就是這一模一樣的 樓主解決了的話(huà)望告知
作者:
hjskjhgskh
時(shí)間:
2019-5-15 14:34
我也遇到了同樣的問(wèn)題
作者:
chen_ying992
時(shí)間:
2019-11-24 10:04
我中斷函數(shù)名改成正常的了好像就OK了
void exint0() interrupt 0
歡迎光臨 (http://www.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
日韩午夜影院
|
在线a视频网站
|
欧美一级在线视频
|
久久久国产一区二区三区
|
免费欧美视频
|
日韩欧美一区二区三区在线播放
|
在线成人免费视频
|
一区二区精品在线
|
国产精品一区二区三区四区五区
|
国产精品视频一二三区
|
a久久久久久
|
久久看片
|
久久成人精品一区二区三区
|
91视频网址
|
亚洲午夜网
|
日韩成人在线播放
|
自拍偷拍中文字幕
|
男人亚洲天堂
|
亚洲成人免费网址
|
中文字幕日韩欧美一区二区三区
|
99热在这里只有精品
|
亚洲av毛片
|
嫩草国产
|
中文字幕一区二区三区不卡在线
|
一区二区三区中文
|
亚洲一区二区三区四区五区中文
|
在线观看国产视频
|
日韩一区二区三区在线播放
|
欧美日韩三级
|
亚洲国产免费
|
亚洲成人免费在线
|
在线免费观看视频你懂的
|
日本精品网站
|
精品视频一区二区三区
|
国产毛片久久久久久久久春天
|
真人女人一级毛片免费播放
|
亚洲97
|
丁香婷婷久久久综合精品国产
|
国产乱一区二区三区视频
|
精品不卡
|
欧美日本一区
|