Q22.
ATmega328P 程式碼如下,下列敘述何者正確?
數位電子 · 甲級 · 程式語言 · Q22
難易度分析
3 / 5
此題評為中等難度,因其需掌握 AVR 中斷控制與位元操作的正確映射,且包含一至兩個易誤導的選項,需謹慎辨識。
正確答案:②_CLI()表示關閉中斷功能
② _CLI()表示關閉中斷功能:_CLI() 代表 Clear Interrupt,會清除 SREG 中的 全域中斷使能旗標,使 CPU 不再回應任何可遮罩中斷請求,此為關閉中斷功能的標準操作,常用於保護臨界區段(Critical Section)。
錯誤選項解析
- ① _CLI()表示啟動中斷功能:_CLI() 是 AVR 微控制器中的 Clear Global Interrupt Flag 指令,用於清除 SREG 暫存器的 I 旗標,其作用為關閉全域中斷而非啟動中斷。啟動中斷應使用 _SEI()(Set Global Interrupt Flag)。
- ③ EECR |= (1<<EEMPE)對應組合語言sbis EECR, EEMPE:EECR |= (1<<EEMPE) 是 C 語言的位元設定操作,對應的組合語言應為 sbi EECR, EEMPE(Set Bit in I/O Register),而非 sbis(Skip if Bit in I/O Register is Set)。sbi 用於寫入設定位元,sbis 用於讀取判斷位元狀態以跳過下一指令。
- ④ EECR |= (1<<EEPE)對應組合語言sbis EECR, EEPE:EECR |= (1<<EEPE) 同樣是 C 語言的位元設定操作,對應的組合語言應為 sbi EECR, EEPE,而非 sbis。sbis 是條件跳過指令,用於讀取測試位元是否為 1,與設定位元的操作完全不同。
Learning Tip
"本題核心考點為 AVR 中斷控制指令(_CLI/_SEI) 與 C 語言位元操作對應之組合語言 的辨識。常考陷阱在於混淆 sbi(設定位元)與 sbis(測試位元跳過)的功能差異。實務上操作 EEPROM 寫入 時,必須先設定 EEMPE 使能旗標,再設定 EEPE 啟動寫入,兩者順序不可顛倒,且寫入期間需確保中斷已關閉以避免資料損毀。"
學員答題分佈
①_CLI()表示啟動中斷功能0%
②_CLI()表示關閉中斷功能0%
③EECR |= (1<<EEMPE)對應組合語言sbis EECR, EEMPE0%
④EECR |= (1<<EEPE)對應組合語言sbis EECR, EEPE0%
此答題分佈是根據學員在 LongePass 模擬考等實際作答紀錄計算而成。與考友分享這道歷屆試題與詳細解析!