欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 5804|回復: 13
收起左側

51單片機開中斷問題,把EA=1放在主程序中?

[復制鏈接]
ID:100982 發表于 2021-10-9 09:52 | 顯示全部樓層 |閱讀模式
看別人寫的程序,總是喜歡把EA = 1放在主程序中,我個人理解這樣的話是開多個中斷,防止忘記,同時也省的重復打開。是不是這樣啊?
回復

使用道具 舉報

ID:624769 發表于 2021-10-9 13:06 | 顯示全部樓層
只要有中斷,EA總要開的,就算不是放主程序,也是放在只調用一次的子函數里,所以……,有什么區別?而只調用一次的子函數,除了代碼看起來好看點(所謂的可讀性高一點),在實際應用上沒有任何好處。

最后,反復 EA = 1; 除了浪費一點資源,對程序不會有任何影響,所以不必刻意回避多次EA = 1;的情況發生。
回復

使用道具 舉報

ID:100982 發表于 2021-10-9 13:09 | 顯示全部樓層
188610329 發表于 2021-10-9 13:06
只要有中斷,EA總要開的,就算不是放主程序,也是放在只調用一次的子函數里,所以……,有什么區別?而只調 ...

這樣啊,可能只是為了程序看上去簡潔邏輯性更強吧
回復

使用道具 舉報

ID:722595 發表于 2021-10-9 13:25 | 顯示全部樓層
EA只是個總開關,既然要用到中斷就先把總開關打開,后面看需求再打開對應定時器中斷的開關,好像沒什么問題吧
回復

使用道具 舉報

ID:960157 發表于 2021-10-9 13:27 | 顯示全部樓層
EA放在主程序是正路,匯編,C我都是這樣做的。
回復

使用道具 舉報

ID:57657 發表于 2021-10-9 13:31 | 顯示全部樓層
不管是什么定時器、外部、串口等中斷,必須打開EA才可以觸發。
回復

使用道具 舉報

ID:624769 發表于 2021-10-9 13:59 | 顯示全部樓層
wifen 發表于 2021-10-9 13:09
這樣啊,可能只是為了程序看上去簡潔邏輯性更強吧


只是看上去,真正為了程序簡潔的話,我一般連EA = 1都不會用,直接是IE = ??
看有些人 一個寄存器 反復的 &=   |= 的,看得腦殼疼,關鍵是,一個寄存器,在這個初始化子函數里操作一下,那個初始化子函數操作一下,看上去好像邏輯很清晰,每個功能的初始化分門別類,但是,宏觀上看起來就會很累,所以我一般主程序里所有寄存器統一設置。

如下:
Maincode.png


別人怎么看,我不知道,至少事隔多年,回頭自己看自己的程序,While(1) 前面的一掃,基本知道自己的程序要用哪些功能,是不是方便移植到另一款單片機,一目了然。
Maincode.png
回復

使用道具 舉報

ID:123289 發表于 2021-10-9 14:01 | 顯示全部樓層
你家有用電器若干,但總閘只有一個。
EA是CPU中,中斷的總閘。上電時,這個總閘是打開的,未閉合。
明白這個道理,就應知道在何合閘拉閘比較合適了。
例如:
白天,只有電飯鍋在用電,飯好了,切斷電飯鍋電源就可以了,總不至于要拉總閘吧。
一張燈壞了,修燈,為了安全,把總閘拉了,是合理的吧。當然只切斷燈的電路,也可以。不過萬一……,,這時就是安全第一了。
所以:根據需要,只要你認為是合理的,放哪里無所謂。
一般初化的最末一件事,就是開中斷總閘。
如果某段程序對時序要求很高,不宜被中斷干擾打斷時,就切斷EA,程序結束后恢復EA。當然這樣做是有風險的。
回復

使用道具 舉報

ID:790408 發表于 2021-10-9 14:11 | 顯示全部樓層
只是個人寫代碼的習慣吧
回復

使用道具 舉報

ID:100982 發表于 2021-10-9 16:22 | 顯示全部樓層
188610329 發表于 2021-10-9 13:59
只是看上去,真正為了程序簡潔的話,我一般連EA = 1都不會用,直接是IE = ??
看有些人 一個寄存器 反 ...

這個不錯,很清晰
回復

使用道具 舉報

ID:23640 發表于 2021-10-9 16:44 | 顯示全部樓層
188610329 發表于 2021-10-9 13:59
只是看上去,真正為了程序簡潔的話,我一般連EA = 1都不會用,直接是IE = ??
看有些人 一個寄存器 反 ...

獨立成模塊控制的好處是方便維護和下一任程序員修改,當然如果你的程序只用這一次就不用考慮模塊化了,分多個子函數是要浪費點時間的。
回復

使用道具 舉報

ID:57657 發表于 2021-10-9 21:00 | 顯示全部樓層
188610329 發表于 2021-10-9 13:59
只是看上去,真正為了程序簡潔的話,我一般連EA = 1都不會用,直接是IE = ??
看有些人 一個寄存器 反 ...

IE是字節寄存器,可以位尋址,
EA是IE寄存器里的一個位寄存器。
回復

使用道具 舉報

ID:624769 發表于 2021-10-9 21:18 | 顯示全部樓層
npn 發表于 2021-10-9 21:00
IE是字節寄存器,可以位尋址,
EA是IE寄存器里的一個位寄存器。

就簡潔而言……

EX0 = 1;
EX1 = 1;
ET0 = 1;
ET1 = 1;
EA  = 1;
遠不如,
IE = 0x8f;  來的簡潔。
而要做到簡潔加直觀的話……
IE = B_1000_1111;   就能達到要求了。
回復

使用道具 舉報

ID:401564 發表于 2021-10-9 23:24 | 顯示全部樓層
EA是總開關,肯定是要放在一個顯眼的地方呀
你要是放在別的函數中,要是剛開始寫代碼的時候,忘記打開了,到時候中斷問是無法進入,你都不知道怎么回事
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表