全國服務熱線:18929363263

新聞中心 PRODUCT DISPLAY

Atmel單片機應用技巧

來源: 發布時間:1970-01-01 1317 次瀏覽

在程序設計中,設置一個好的時鐘中斷,可大大方便和簡化程序的編制,提高系統的效率與可操作性。下面以6M

功能強大的時鐘中斷

  在程序設計中,設置一個好的時鐘中斷,可大大方便和簡化程序的編制,提高系統的效率與可操作性。下面以6MHz時鐘的89C51系統為例,說明時鐘中斷的應用。 

  定時器初值與中斷周期。 時鐘中斷的時間間隔一般取20ms(50Hz),如需要百分之一秒的時基信號,可取10ms(100Hz)。這里取20ms。T0工作于16位定時器方式(方式1),每過一個機器周期T0自動加1,計至0FFFFh的下一個機器周期,T0溢出產生中斷,由硬件設置相應的標志位供軟件查詢。即中斷啟動后經過N+1個機器周期,T0產生中斷。所以,只要先在T0中存入一個比0FFFFh小N的數,然后啟動定時器,便會在N+1個機器周期后產生中斷,這個數便是所謂的“初值”。時鐘為6MHz,則20ms有10000個機器周期。(10000)10=(2710)16,則0FFFFh-2710h+1=0D8F0h。由于響應中斷、保護現場及重裝初值還需要7~8機器周期,則T0應裝入的初值是0D8F7h。每次中斷進入后,先把A及PSW的值壓堆,再把0D8F7h裝入T0。 

  設置一個單元,每次中斷加1。 將RAM中一個單元取名為INCPI。在中斷處理程序中,裝完T0初值后,用“INC INCPI”指令將其加1。無論中斷程序還是主程序,都可以從INCPI中讀取20ms的1~256之間任意整數倍的信號。如向數碼管送顯的程序,需要每0.5秒刷新一次顯示器,可以設一等待單元W_DISP,用“MOV A,INCPI/ADD A,#25/MOV W_DISP,A”三條語句讓其比當前的INCPI值大25,然后在每次中斷中檢查W-DISP是否與INCPI值相等。若相等,說明已過了25個中斷周期,執行送顯程序,并且讓W_DISP再加上25,等待下一個0.5秒。程序中可以設置多個等待單元,以取得多個時基信號。 

深圳PCBA加工

  在中斷中讀鍵與看門。 通常,我們在主程序中讀鍵盤,步驟為:掃描鍵盤,若有鍵按下,則延時幾十毫秒去抖動,再次確認此鍵確實按下,然后處理該鍵對應的工作,完成后再次重復上述步驟。這種方式有兩點不足:1. 處理相應工作時無法鎖存按鍵的輸入,可能漏鍵。2. 延時去抖時CPU無法做其他事情,效率不高。把讀鍵放在時鐘中斷中,可避免上述不足。方法為:如果兩次相鄰的中斷中都讀到同一個鍵按下,則這個鍵是有效的(達到了去抖目的),將其鎖存到先入先出(隊列)的鍵盤緩沖區,等主程序來處理。這樣,主程序處理按鍵的同時,仍可響應鍵盤的輸入。緩沖區深度通??稍O為8級,若鎖存的鍵數已達到8個,則忽略新的按鍵,并報警提示用戶新的按鍵將無效。若鍵盤緩沖隊列停滯的時間大大長于主程序處理按鍵所需要的最大時間,說明主程序已出錯或跑飛,可以在中斷中用指令將系統復位,起到了看門狗的目的。 

  主程序中的延時。 由于有常開的時鐘中斷,所以當主程序中有需要時間較短、精度較高的延時時,應暫時把時鐘中斷關閉。程序中需要時間較長、精度不高的延時時,可仿照下例編程,避免多層嵌套的循環延時。 

  例:從P1.1口輸出1秒的高電平脈沖 


  MOV A,INCPI 

INC A

CJNE A,INCPI,$;等待一次中斷處理完成

SETB P1.1 ;設P1.1為1,脈沖開始

ADD A,#50 ;50個20ms為1秒

CJNE A,INCPI,$ ;等中斷將INCPI加一50次

CLR P1.1 ;設P1.1為0,脈沖結束


  綜上可知,設計時要靈活地應用時鐘中斷,將任務合理分配給中斷和主程序,二者要分工明確,接口簡單。并應注意盡量縮短中斷處理程序的執行時間,切勿長于20ms。 


  用89C2051控制的可變頻率和占空比的脈沖恒流源 

  本恒流源的負載為純電阻性,阻值變化范圍100Ω~1kΩ,輸出恒定電流4mA。恒流源提供三路輸出,每路輸出脈沖恒流源的頻率分別為12次/分、6次/分、3次/分,輸出脈沖寬度均為300ms。 

  該恒流源主要由恒流源輸出電路及可變頻率和占空比的脈沖控制信號產生電路兩部分組成。 

  用TTL或CMOS電路分頻,也能夠得到上述脈沖控制信號,但電路比較復雜,且頻率和占空比不容易更改。用89C2051的輸出口作為脈沖控制信號,能夠通過程序改變脈沖控制信號的頻率和占空比。 

  脈沖恒流源電路如附圖所示。為了說明方便,這里只畫了一路恒流源輸出電路 

  接插件P1接9V電池,P3接負載。 

  恒流源輸出電路由U1、T1、T2和D1以及其他外圍電路組成。T1、R3、D1、RW1和R2構成基準電壓源。根據設計要求,由輸出電流和取樣電阻R1的阻值確定加到運放同相端的基準電位。按照圖中的參數,T1導通時,調整RW1,使運放的同相端的基準電位為0.4V,顯然T1截止時,該基準電位等于0V。T1導通時,若負載電流低于4mA,取樣電阻R1上的電壓下降,運放的反相輸入端的電位下降,運放的輸出電位上升,T2的基極電位和集電極電流(負載電流)上升;負載電流大于4mA時,T2的基極電位和集電極電流(負載電流)下降,最終維持輸出電流恒定。T1截止時,由于加到運放同相端的基準電位降到0V,運放的輸出電壓下降,T2截止,負載中沒有電流通過。 

  控制T1導通和截止的脈沖信號從89C2051的P10口輸出。產生脈沖控制信號的軟件主要由循環程序和延時子程序組成。 

  如果要擴大輸出電流的范圍,只需用功率比較大的穩壓源并將T2換成大功率復合管便可。 

  AT89C系列單片機加密模式 

  單片機解密簡單就是擦除單片機片內的加密鎖定位。由于AT89C系列單片機擦除操作時序設計上的不合理。使在擦除片內程序之前首先擦除加密鎖定位成為可能。AT89C系列單片機擦除操作的時序為:擦除開始---->擦除操作硬件初始化(10微秒)---->擦除加密鎖定位(50----200微秒)--->擦除片內程序存儲器內的數據(10毫秒)----->擦除結束。如果用程序監控擦除過程,一旦加密鎖定位被擦除就終止擦除操作,停止進一步擦除片內程序存儲器,加過密的單片機就變成沒加密的單片機了。片內程序可通過總線被讀出。對于AT89C系列單片機有兩種不可破解的加密方法。 

  一、永久性地破壞單片機的加密位的加密方法。簡稱OTP加密模式。 

  二、永久性地破壞單片機的數據總線的加密方法。簡稱燒總線加密模式。 

  AT89C系列單片機OTP加密模式原理 

 這種編程加密算法燒壞加密鎖定位(把芯片內的硅片擊穿),面不破壞其它部分,不占用單片機任何資源。加密鎖定位被燒壞后不再具有擦除特性,89C51/52/55有3個加密位進一步增加了加密的可靠性。一旦用OTP模式加密后,單片機片內的加密位和程序存儲器內的數據就不能被再次擦除,89C51/52/55單片機就好象變成了一次性編程的OTP型單片機一樣。如果用戶程序長度大于89C51單片機片內存儲器的容量,也可使用OPT模式做加密,具體方法如下: 

1、按常規擴展一片大容量程序存儲器,如27C512(64K)。

2、把關鍵的程序部分安排在程序的前4K中。

3、把整個程序寫入27C512,再把27C512的前4K填充為0。

4、把程序的前4K固化到AT89C51中,用OPT模式做加密。

5、把單片機的EA腳接高電平。

這樣程序的前4K在單片機內部運行,后60K在片外運行。盜版者無法讀出程序的前4K程序,即使知道后60K也無濟于事

  AT89C系列單片機煉總線加密模式原理 

  因為單片機片內的程序代碼最終都要通過數據總線讀出,如果指導單片機的數據總線的其中一條線永久性地破壞,解密者即使擦除了加密位,也無法讀出片內的程序的正確代碼。89C1051/2051的數據總線為P1口燒總線模式燒壞89C2051的P1.0端口,原程序代碼為02H、01H、00H。讀出的數據則為03H,01H,00H。其中最低位始終為1,讀出的程序代碼顯然為錯碼。這種加密模式用于加密89C1051/2051單片機。缺點是占用單片機的資源。開發設計人員在設計單片機硬件系統時只要預留出口線P1.0不用,以后就可用燒總線模式對單片機加密。 



亚洲精品依依