找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

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

再來請(qǐng)教個(gè)51單片機(jī)IO問題

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:1133220 發(fā)表于 2024-10-20 08:30 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
各位大佬:      斷續(xù)學(xué)了點(diǎn)51單片機(jī),學(xué)到中斷的時(shí)候,想請(qǐng)教一下,
.......
sbit KEY=P3^1;
KEY=1;
if(!KEY)
{
........
}
........
這種IO電平的改變檢測(cè),是單片機(jī)硬件控制的嗎,是不是相當(dāng)于隨時(shí)都在檢測(cè)IO電平并且可以即時(shí)響應(yīng)?和硬件中斷的區(qū)別是什么?和中斷的優(yōu)先級(jí)有高低之分嗎?

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

使用道具 舉報(bào)

沙發(fā)
ID:1109793 發(fā)表于 2024-10-20 10:49 | 只看該作者
這就是所以軟件檢測(cè)的方式了吧。
是否相應(yīng)要看你這個(gè)if被執(zhí)行的頻率了。如果還有其他更多代碼,就不可能即時(shí)相應(yīng)了。中斷可以做到比較即時(shí)相應(yīng)。高優(yōu)先級(jí)的就更容易保證即時(shí),低優(yōu)先級(jí),就看是否存在更高優(yōu)先級(jí)的代碼在運(yùn)行了。
話說讀取外部的按鍵設(shè)么的,不需要太高的即時(shí)相應(yīng)的吧
回復(fù)

使用道具 舉報(bào)

板凳
ID:342197 發(fā)表于 2024-10-20 10:54 | 只看該作者
中斷優(yōu)先級(jí)更高。
回復(fù)

使用道具 舉報(bào)

地板
ID:342197 發(fā)表于 2024-10-20 10:55 | 只看該作者
中斷優(yōu)先級(jí)更高,電平檢測(cè)級(jí)別低
回復(fù)

使用道具 舉報(bào)

5#
ID:94031 發(fā)表于 2024-10-20 13:13 | 只看該作者
當(dāng)IO口做輸入時(shí),用指令可以隨時(shí)監(jiān)測(cè)IO電平,這不是中斷,中斷有個(gè)響應(yīng)過程,這直接指令讀取。
回復(fù)

使用道具 舉報(bào)

6#
ID:1133220 發(fā)表于 2024-10-20 20:22 | 只看該作者
xiaobendan001 發(fā)表于 2024-10-20 10:49
這就是所以軟件檢測(cè)的方式了吧。
是否相應(yīng)要看你這個(gè)if被執(zhí)行的頻率了。如果還有其他更多代碼,就不可能即 ...

編程軟件層面上是軟件檢測(cè)了,內(nèi)部硬件層面呢?是不是它內(nèi)部做出的電平改變響應(yīng)是被動(dòng)的?
回復(fù)

使用道具 舉報(bào)

7#
ID:1133220 發(fā)表于 2024-10-20 20:23 | 只看該作者
遠(yuǎn)征之路 發(fā)表于 2024-10-20 10:54
中斷優(yōu)先級(jí)更高。

回復(fù)

使用道具 舉報(bào)

8#
ID:1133220 發(fā)表于 2024-10-20 20:23 | 只看該作者
遠(yuǎn)征之路 發(fā)表于 2024-10-20 10:55
中斷優(yōu)先級(jí)更高,電平檢測(cè)級(jí)別低

內(nèi)部硬件層面是不是它內(nèi)部做出的電平改變響應(yīng)是被動(dòng)的?
回復(fù)

使用道具 舉報(bào)

9#
ID:1133220 發(fā)表于 2024-10-20 20:24 | 只看該作者
xuyaqi 發(fā)表于 2024-10-20 13:13
當(dāng)IO口做輸入時(shí),用指令可以隨時(shí)監(jiān)測(cè)IO電平,這不是中斷,中斷有個(gè)響應(yīng)過程,這直接指令讀取。

多謝。它是主動(dòng)讀取還是被動(dòng)響應(yīng)的?
回復(fù)

使用道具 舉報(bào)

10#
ID:624769 發(fā)表于 2024-10-20 21:53 | 只看該作者
當(dāng)你程序運(yùn)行到:   if(!KEY)  時(shí),單片機(jī)會(huì)去查詢(讀�。� P31 的狀態(tài)是 0/1
回復(fù)

使用道具 舉報(bào)

11#
ID:1134207 發(fā)表于 2024-10-21 10:46 | 只看該作者
中斷優(yōu)先級(jí)更高,電平檢測(cè)級(jí)別低
回復(fù)

使用道具 舉報(bào)

12#
ID:1121801 發(fā)表于 2024-10-21 13:50 | 只看該作者
P3引腳因?yàn)闆]有緩沖器,所以讀輸入電平時(shí)要先將P3.1置1,然后讀取的才是輸入電平,如果不置1,那么讀取的輸入電平會(huì)不正確。
讀電平是軟件執(zhí)行到這個(gè)位置才會(huì)讀電平,沒有執(zhí)行到這里是不會(huì)讀電平的。而且中斷的優(yōu)先級(jí)是比正常程序運(yùn)行級(jí)別要高的,所以一般是響應(yīng)中斷程序先,退出中斷后才會(huì)按步執(zhí)行主程序
回復(fù)

使用道具 舉報(bào)

13#
ID:332444 發(fā)表于 2024-10-21 14:04 | 只看該作者
當(dāng)啟動(dòng)中斷后硬件獨(dú)立運(yùn)行并響應(yīng),但還是有等待CPU響應(yīng)時(shí)間的,否則的話中斷時(shí)鐘就不會(huì)有誤差,提問寫的代碼是獨(dú)立按鍵不是中斷,因此是軟件寫怎么響應(yīng)的由寫的軟件決定.
回復(fù)

使用道具 舉報(bào)

14#
ID:94031 發(fā)表于 2024-10-21 14:14 | 只看該作者
pcbbb2024 發(fā)表于 2024-10-20 20:24
多謝。它是主動(dòng)讀取還是被動(dòng)響應(yīng)的?

你讀就能得到,cpu不發(fā)中斷。
回復(fù)

使用道具 舉報(bào)

15#
ID:276663 發(fā)表于 2024-10-21 16:32 | 只看該作者
你需要理解一下原理,
中斷,顧名思義就是,打斷一個(gè)正常的進(jìn)程。

  1. void main(void)
  2. {
  3.         int_config();//中斷配置
  4.         while(1)
  5.         {
  6.                 delay(20);
  7.                 if(key1==0)
  8.                 {
  9.                         led = 1;//點(diǎn)亮
  10.                         delay(200);//延時(shí)200ms
  11.                 }
  12.                 led = 0;
  13.         }
  14. }

  15. //中斷處理程序
  16. //產(chǎn)生中斷,說明已經(jīng)有了低電平
  17. viod Int_KEY2 interrupt X
  18. {
  19.         delay(20);//消抖
  20.         if (key2 == 0)//還按著,說明確定有按鍵按下
  21.         {
  22.                 if (led2 == 1)
  23.                 {
  24.                         led2 = 0;//滅掉
  25.                 }
  26.                 else
  27.                 {
  28.                         led2 = 1;//點(diǎn)亮
  29.                 }
  30.         }
  31. }
復(fù)制代碼


看上面的程序主程序在循環(huán)檢查key1按鍵,key2就是靠中斷處理,啥時(shí)候有key2按下就會(huì)打斷正常的主程序,插入運(yùn)行一段中斷程序,然后再繼續(xù)從主程序打斷的位置繼續(xù)執(zhí)行。

執(zhí)行中斷程序時(shí),單片機(jī)內(nèi)部會(huì)有記錄主程序運(yùn)行位置的保存和恢復(fù)處理。
回復(fù)

使用道具 舉報(bào)

16#
ID:517951 發(fā)表于 2024-10-22 07:34 | 只看該作者
KEY=1;
if(!KEY)
{
........
}  
這個(gè)檢測(cè)KEY的語(yǔ)句就只是執(zhí)行一瞬間就完成了.
不是隨時(shí)都在檢測(cè)KEY. 中斷服務(wù)函數(shù)里面也可以加入這個(gè)語(yǔ)句做KEY電平檢測(cè).

中斷的高低優(yōu)先級(jí)取決于軟件設(shè)置中斷號(hào)的高低優(yōu)先級(jí)別.

回復(fù)

使用道具 舉報(bào)

17#
ID:1072347 發(fā)表于 2024-10-23 22:04 | 只看該作者
這個(gè)是軟件檢測(cè),如果你把if寫在while死循環(huán)里面是可以做到一直檢測(cè)的(前提是你if里面也要清P3.1的狀態(tài))。

中斷的優(yōu)先級(jí)更高,還有就是即時(shí)響應(yīng)的問題,寫在死循環(huán)里響應(yīng)絕大部分情況下都比中斷需要的時(shí)間要長(zhǎng)。這兩個(gè)都可以實(shí)現(xiàn)同樣的功能,如果不是中斷不夠用了或者對(duì)時(shí)序要求不高的情況下,這樣用沒什么差別。(ps:如果你和我一樣從匯編入手單片機(jī)的話,應(yīng)該會(huì)對(duì)這種控制轉(zhuǎn)移指令很熟悉了,可惜現(xiàn)在初學(xué)者沒多少嘗試過匯編的痛了)
回復(fù)

使用道具 舉報(bào)

18#
ID:1133220 發(fā)表于 2024-10-26 17:44 | 只看該作者
明白了,謝謝各位大佬
回復(fù)

使用道具 舉報(bào)

19#
ID:1128908 發(fā)表于 2024-10-28 09:09 | 只看該作者
中斷優(yōu)先級(jí)更高
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表