A. 單片機常見故障及處理
一些單片機常見問題的解決辦法
工作和生活中會遇到許許多多的問題,可能讓你一時陷於其中,但是總有解決的辦法。隨時記下遇到的問題,並做好總結,一方面有助於積累,另一方面也避免同一次錯誤再犯。
1.PIC12F629僅有一個中斷入口,要避免多個中斷引發的沖突。
2.引腳電平變化觸發中斷,和外部INT中斷,在總中斷GIE清零的時候,不會進入中斷程序執行。
3.單片機進入休眠時,要喚醒,常常使用引腳電平變化中斷或者外部INT中斷。若是前者,按鍵按下時會喚醒,按鍵抬起時也會喚醒。如果這個時候還有別的中斷,如初始化了定時器,GIE置位了,兩種中斷就會沖突
4.如果PIC單片機的I/O口作為輸入引腳使用,初始化時必須要關比較器,否則,不會響應。
5.看門狗溢出會導致單片機從休眠中醒來。
6.使用PT2262和單片機做發射端時,如果用電池,要做到最省電。正常時,單片機休眠,PTT2262不上電,可以用三極體控制PTT2262的電源端,僅在發射時上電一次。
7.315MHZ的調幅電路中,選頻電感可以使用模壓電感,也可以自己繞,當然最好使用一端環形PCB銅線。
8.315Mhz的收發天線長度計算公式:L=1/4波長;而波長=3.0*10^8/315Mhz 算出 最佳匹配天線約25cm,可以使用拉桿天線,當然在PCB上用一段長的粗線也可以。
9.接收端使用的是超再生接收電路,網路上普遍流傳的那張圖紙被人原搬下來後,可以使用,我也剽竊了一次,希望也可以。要想看懂,真不容易。
10.P溝道的MOS管能不用就不用,價格昂貴不說,導通電阻大,功耗大,單片機輸出0時很容易打開,但是輸出1時,如果MOS管源極接的是高於單片機高電平的電壓,是關不斷的,需要藉助三接管關斷。
10.把過孔設成外徑0.4mm,孔徑0.2mm理論上可以,但是有人告訴我PCB加工廠可能做不出來,但我覺的問題不大
11.調試時一定要有耐心。沉住氣,多反思,沒有誰一下子就會成功,之前都會失敗很多次。想不通時把問題說出來,旁觀者清,別人可以給你啟示。
B. 51單片機獨立按鍵控制LED,經常無響應
代碼修改一下:
main()
{
while(1)
{
if(key1==0)
{
delay(30);
if(key1==0)
{
d1=~d1;
while(key1==0);
}
}
}
}
C. 下面是51單片機的單機收發程序 但是它不響應中斷 為什麼呢
對書上這句話的理解應該是,中斷服務程序中,在保護現場時,應盡量避免被高優先順序的中斷所中斷,而並不是說這時候單片機不能響應高優先順序的中斷。所謂保護現場一般就是保護一些共用的寄存器,由於這些寄存器是共用的,所以可能會被其它的程序修改,因此需要保存起來,返回的時候再恢復回來,從而保羨枝孫護了程序運行的狀態。一般可在進入中斷服務程序保搭罩護現場的時候關掉中斷,保護完現場後再開中斷。
引起混兄鏈亂的意思是,如果沒有保護現場或者保護現場的時候被高優先順序的中斷所中斷,這時候當前程序裡面的有些寄存器沒有被保護下來,而高優先順序的中斷運行的過程中可能會改寫這些寄存器,這樣再返回低優級中斷的時候,不可能恢復這些器存器的值,低優先順序的程序運行的時候會因為錯誤的寄存器值造成不可預料的結果。比如,在中斷1中有一個判斷的語句JB A.3,L1,如果你在中斷1中沒有保存A,這時被高優先順序的中斷2所中斷,而高優先順序的中斷運行後,A的值被改變了,由於你沒有保存A,所以無法恢復,這樣再返回中斷1執行的時候就可能產生錯誤的執行結果。
D. 單片機燒程序時候卡住沒響應,燒不進程序。學習板stc89c52。HL-340線。驅動有安裝好。求各位大神幫忙
1、操作順序租彎是否正確(先點下載,再給開發板加電)弊凳悶
2、串口線是否有問題(換一根粗賣試試)
3、單片機是否有問題(換一塊試試)
E. 51單片機上電後不運轉,不執行程序。什麼原因
很可能是晶振的問題。起振的話,晶振兩腳上有一隻腳可以看到振盪波形的。
你還可以查一下單片機的EA腳,這個是配置啟動順序的,外部還是內部,EA為高電平可能是有問題的,你該嘗試下接地。
單片機程序不執行,我遇到過上述兩種情況,EA沒接,還有就是晶振的電容和晶振碰到一塊去了。
查看原帖>>
F. 51單片機中斷時卡死
1、首先51單片機意外中斷,查看51單片機是否打開了某個中斷,但是沒有響應和清除中端標志,導致程序一直進入中斷,造成死機假象。
2、其次地址溢出,常見錯誤為指針操作錯誤。我要著重說的是數組下標使用循環函數中循環變數,如果循環變數沒檔碼卜控制好則會出現數組下標越界,意外修改系統的寄存器造成死機。
3、最後看門狗沒有關閉。有的單片機即使沒使用看門狗開機時也有意外行穗自動開啟了最小周期的看門狗,導致軟體不斷復位,造成死機,這個要模侍看晶元手冊,最好在程序復位後首先顯式清除看門狗再關閉看門狗。
G. 單片機中斷不能響應
你的for循環沒帶任讓纖旁何判斷語句。坦橡這樣是循環不了的、以及你的中端程序中interrupt後面最好是加個using1,using2試試。豎山以區分中斷1和中斷2.
H. STM32單片機程序死機,有哪些原因引起
1、意外中斷。是否打開了某個中斷,但是沒有響應和清除中斷標志,導致程序一直進入中斷,造成死機假象。
2、中斷變數處理不妥。若定義某些會在中斷中修改的全局變數,這時要注意兩個問緩純題:首先為了防止編譯器優化中斷變數,要在這些變數定義時前加volatile。
其次在主循環中讀取中斷變數前應該首先關閉全局中斷,防止讀到一半被中斷給修改了,讀完之後再打開全局中斷;否則出現造成數據亂套。
其他原因:
1、地址溢出。常見錯誤為指針操作錯誤。要著重說的是數組下標使用循環函數中循環變數,如果循環變數沒控制好則會出現數組下標越界,意外修改系統的寄存器造成死機,這種情況下如果死機說明運氣好,否則後面不知道發生什麼頭疼的事。
2、無條件的死循環。比如使用while(x);等待電平變化,正常情況下x都會變成0,就怕萬一,因此最好加上時間限制;
3、看門狗沒有關閉。有的衫攜單片機即使沒使用看門狗開機時也有可能意外自動開啟了最小周期的看門狗,導致軟體不斷復位,造成死機,這個要看晶元手冊,最好在程序復位後首先應該顯式清除擾塌咐看門狗再關閉看門狗;
4、堆棧溢出。最難查找的問題,對於容量小的單片機,盡量減少函數調用層級,減少局部變數,從而減少壓棧的時候所需的空間。當把以上幾條都試過不能解決問題,試一試把被調用少函數直接內置到調用的地方並且把佔用RAM大的局部變數改成全局變數。
I. 簡述mcs-51單片機不能響應中斷的幾種情況
①單片機沒工作;
②中斷未開啟;
③壓根就沒有中斷源;
J. 單片機控制數字旋轉編碼器,不會響應什麼原
據我所知,數字旋轉編碼器是一個輸入器件,有人稱之為數字電位器,並並不受單片機控制,而是單片機讀取編碼器的信號來判斷認為的操作,即判斷旋轉方向與角度
一般有2個輸入埠,分別為A埠和B埠,不同數字旋轉編碼器,旋轉是的信號有所不同,
有一些是順時針轉,A,B都是下降沿,但一個在前,一個在後,逆時針前後的順序相反,但都是下降沿。
有一些則不同,有下降沿,也有上升沿,但都是一個前一個後,具體要參照相關的規格書
單片機應該利用外部中斷來讀取信號,否則有可能你旋轉時,單片機並沒有去讀取