![]() |
發布時間: 2021-12-1 09:05
正文摘要:改過外部中斷優先以后,外部中斷是可以執行,但是一松開按鍵,主程序還是不運行,好像又在運行定時中斷了。問題在于雖然我把定時中斷1改成定時中斷0,但是我沒有設置定時器0的初始化,也沒有開通定時器0, ... |
188610329 發表于 2021-12-1 14:05 大俠,收下我的膝蓋吧!( ![]() 我加了個TF2=0,就可以完美的運行了。一切正常。這樣定時器1與定時器2就完美地切換過來了。 謝謝你! 你是不是對C8051F020單片機很熟悉啊,我提的問題你基本上都能解決,老厲害了。 |
定時器2 中斷需要手動清除中斷標志, 中斷中需要加入: TF2 = 0; 定時器2自動重載需要 設置 RCAP2L , RCAP2H 那么它就會自動重載, 所以,如果你的重裝值是要變化的話,一般需要 把下一次的T2重裝值提前寫入RCAP2L , RCAP2H 讓他自動重裝,如果你要每次直接改寫 TL2 TH2 的話, 需要先 TR2 = 0, 然后 改寫TL2 TH2 之后再 TR2 = 1, 另外, TR2 必須獨立驅動(TR2 = 1), 不能通過 T2CON |= 0x04 來啟動, 原因不知道,也許是設計缺陷。 最后,其實你也不知道你到底是跑飛還是其他什么情況。 個人建議你確定一下 DATA_OUT() 這個函數, 看你的定時設置應該是 0.5毫秒 或者 1毫秒, 你這個DATA_OUT() 需要跑多久? 時間久的話,程序被卡死就是必然的了。 |
npn 發表于 2021-12-1 10:17 是的,我現在知道是什么原因了。 |
lkc8210 發表于 2021-12-1 10:09 哦哦,果然高手再論壇里。四個字:醍醐灌頂 |
lkc8210 發表于 2021-12-1 10:09 定時器1溢出后TF1會被硬件置1,中斷觸發后又被硬件清0,如果只開計數,不開中斷,就需要軟件清0。 中斷觸發后會跳轉到相應的向量地址,沒有 interrupt 3 的中斷入口函數就會導致程序跑飛。 |
你沒有設置定時器0的初始化,也沒有開通定時器0 但是你有設置定時器1的初始化和開通定時器1啊~ 而且你還取消了定時器1的中斷函數 當單片機產生定時器1的中斷時 沒有中斷函數響應 沒有清零TF1 單片機就會當機了 |