![]() |
發(fā)布時間: 2023-6-8 23:07
正文摘要:求大佬幫幫!為了實現設計實現24秒計時器。要求(1)倒計時功能(2)24秒復位鍵功能(3)啟動/暫停鍵功能;proteus仿真圖是這樣子畫的,代碼是下面這樣子寫得,但是仿真一點反應都沒有,代碼編譯說有一段代碼沒有被 ... |
你需要main函數里面加 IT0 = 1; EX0 = 1; IT1 = 1; EX1 = 1; EA = 1; 不用在頭文件聲明,這個在單片機聲明那里就有了 |
中斷子程序和其他的子程序不同,不用先定義,直接寫在MAIN()后面就行 |
大佬不少![]() |
在單片機中,中斷程序是在中斷事件發(fā)生時自動執(zhí)行的程序。中斷程序在執(zhí)行完成后,會返回到原來的程序繼續(xù)執(zhí)行。這樣可以讓單片機在執(zhí)行一個任務的同時,可以在中斷事件發(fā)生時及時響應事件。 在使用中斷程序時,首先需要在程序中聲明中斷函數,并指定中斷服務程序的編號。例如,在8051單片機中,可以使用關鍵字`interrupt`來聲明中斷函數。如下所示: ```c void interrupt my_interrupt() { // 中斷事件發(fā)生時需要執(zhí)行的代碼 } ``` 然后,需要調用一個函數來啟用中斷。在8051單片機中,可以使用`IE`寄存器來開啟中斷。例如,如果需要開啟`Timer 0`的中斷,則可以設置`IE`寄存器中`ET0`位為1。如下所示: ```c ET0 = 1; // 開啟Timer 0中斷 ``` 當中斷事件發(fā)生時,會自動執(zhí)行中斷函數。執(zhí)行完成后,程序會回到原來的執(zhí)行點繼續(xù)執(zhí)行。 |
Grealish 發(fā)表于 2023-6-9 14:13 ![]()
|
main函數中加入以下語句 IT0 = 1; //設置INT0的中斷類型為僅下降沿,下降沿喚醒 EX0 = 1; //使能INT0中斷 IT1 = 1; //設置INT0的中斷類型為僅下降沿,下降沿喚醒 EX1 = 1; //使能INT0中斷 EA = 1; //開總中斷 原main函數中的這兩句刪除 t0_ini(); ex_ini(); t0_ini和ex_ini這兩個中斷函數放到main函數前面。 中斷函數無法通過其它函數調用。 當外部中斷觸發(fā)后,中斷正在執(zhí)行的語句,自動執(zhí)行中斷函數中的語句。執(zhí)行完成后返回之前中斷的語句繼續(xù)執(zhí)行。 |
Hephaestus 發(fā)表于 2023-6-9 13:36
這是老師給的參考代碼抄下來的,我感覺應該是老師敲錯了把,也有一個警告,*** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS 所以改了一下,或者是不是我電路連錯了 |
Hephaestus 發(fā)表于 2023-6-9 13:36 另外,沒有對中斷,定時器進行初始化。 |
Grealish 發(fā)表于 2023-6-9 13:31 這兩個函數是硬件中斷調用的,你放到main()里面幾個意思?
|
TEXT1.C(35): warning C206: 'ex_int': missing function-prototype就只刪掉這兩行報錯了又 |
這兩行刪掉!
|