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