国产日韩高清制服一区|www.一级片.com|欧美日韩中文字幕日韩欧美一区二区三区久久国产欧美日韩精品国产在线 -日韩社区一区二区三区

Atmel單片機(jī)應(yīng)用技巧

2021-03-01 16:30:30 fandoukeji

  功能強(qiáng)大的時(shí)鐘中斷

   
  在程序設(shè)計(jì)中,設(shè)置一個(gè)好的時(shí)鐘中斷,可大大方便和簡(jiǎn)化程序的編制,提高系統(tǒng)的效率與可操作性。下面以6MHz時(shí)鐘的89C51系統(tǒng)為例,說(shuō)明時(shí)鐘中斷的應(yīng)用。 
    
  定時(shí)器初值與中斷周期。 時(shí)鐘中斷的時(shí)間間隔一般?。玻埃恚螅ǎ担埃龋?,如需要百分之一秒的時(shí)基信號(hào),可?。保埃恚螅ǎ保埃埃龋?。這里取20ms。T0工作于16位定時(shí)器方式(方式1),每過(guò)一個(gè)機(jī)器周期T0自動(dòng)加1,計(jì)至0FFFFh的下一個(gè)機(jī)器周期,T0溢出產(chǎn)生中斷,由硬件設(shè)置相應(yīng)的標(biāo)志位供軟件查詢。即中斷啟動(dòng)后經(jīng)過(guò)N+1個(gè)機(jī)器周期,T0產(chǎn)生中斷。所以,只要先在T0中存入一個(gè)比0FFFFh?。蔚臄?shù),然后啟動(dòng)定時(shí)器,便會(huì)在N+1個(gè)機(jī)器周期后產(chǎn)生中斷,這個(gè)數(shù)便是所謂的“初值”。時(shí)鐘為6MHz,則20ms有10000個(gè)機(jī)器周期。(10000)10=(2710)16,則0FFFFh-2710h+1=0D8F0h。由于響應(yīng)中斷、保護(hù)現(xiàn)場(chǎng)及重裝初值還需要7~8機(jī)器周期,則T0應(yīng)裝入的初值是0D8F7h。每次中斷進(jìn)入后,先把A及PSW的值壓堆,再把0D8F7h裝入T0。 
    
  設(shè)置一個(gè)單元,每次中斷加1。 將RAM中一個(gè)單元取名為INCPI。在中斷處理程序中,裝完T0初值后,用“INC INCPI”指令將其加1。無(wú)論中斷程序還是主程序,都可以從INCPI中讀?。玻埃恚蟮模薄玻担吨g任意整數(shù)倍的信號(hào)。如向數(shù)碼管送顯的程序,需要每0.5秒刷新一次顯示器,可以設(shè)一等待單元W_DISP,用“MOV A,INCPI/ADD A,#25/MOV W_DISP,A”三條語(yǔ)句讓其比當(dāng)前的INCPI值大25,然后在每次中斷中檢查W-DISP是否與INCPI值相等。若相等,說(shuō)明已過(guò)了25個(gè)中斷周期,執(zhí)行送顯程序,并且讓W_DISP再加上25,等待下一個(gè)0.5秒。程序中可以設(shè)置多個(gè)等待單元,以取得多個(gè)時(shí)基信號(hào)。 
    
  在中斷中讀鍵與看門(mén)。 通常,我們?cè)谥鞒绦蛑凶x鍵盤(pán),步驟為:掃描鍵盤(pán),若有鍵按下,則延時(shí)幾十毫秒去抖動(dòng),再次確認(rèn)此鍵確實(shí)按下,然后處理該鍵對(duì)應(yīng)的工作,完成后再次重復(fù)上述步驟。這種方式有兩點(diǎn)不足:1. 處理相應(yīng)工作時(shí)無(wú)法鎖存按鍵的輸入,可能漏鍵。2. 延時(shí)去抖時(shí)CPU無(wú)法做其他事情,效率不高。把讀鍵放在時(shí)鐘中斷中,可避免上述不足。方法為:如果兩次相鄰的中斷中都讀到同一個(gè)鍵按下,則這個(gè)鍵是有效的(達(dá)到了去抖目的),將其鎖存到先入先出(隊(duì)列)的鍵盤(pán)緩沖區(qū),等主程序來(lái)處理。這樣,主程序處理按鍵的同時(shí),仍可響應(yīng)鍵盤(pán)的輸入。緩沖區(qū)深度通??稍O(shè)為8級(jí),若鎖存的鍵數(shù)已達(dá)到8?jìng)€(gè),則忽略新的按鍵,并報(bào)警提示用戶新的按鍵將無(wú)效。若鍵盤(pán)緩沖隊(duì)列停滯的時(shí)間大大長(zhǎng)于主程序處理按鍵所需要的最大時(shí)間,說(shuō)明主程序已出錯(cuò)或跑飛,可以在中斷中用指令將系統(tǒng)復(fù)位,起到了看門(mén)狗的目的。 
    
  主程序中的延時(shí)。 由于有常開(kāi)的時(shí)鐘中斷,所以當(dāng)主程序中有需要時(shí)間較短、精度較高的延時(shí)時(shí),應(yīng)暫時(shí)把時(shí)鐘中斷關(guān)閉。程序中需要時(shí)間較長(zhǎng)、精度不高的延時(shí)時(shí),可仿照下例編程,避免多層嵌套的循環(huán)延時(shí)。 
    
  例:從P1.1口輸出1秒的高電平脈沖 
    
  MOV A,INCPI 
INC A
CJNE A,INCPI,$;等待一次中斷處理完成
SETB P1.1 ;設(shè)P1.1為1,脈沖開(kāi)始
ADD A,#50 ;50個(gè)20ms為1秒
CJNE A,INCPI,$ ;等中斷將INCPI加一50次
CLR P1.1 ;設(shè)P1.1為0,脈沖結(jié)束
 
    
  綜上可知,設(shè)計(jì)時(shí)要靈活地應(yīng)用時(shí)鐘中斷,將任務(wù)合理分配給中斷和主程序,二者要分工明確,接口簡(jiǎn)單。并應(yīng)注意盡量縮短中斷處理程序的執(zhí)行時(shí)間,切勿長(zhǎng)于20ms。 
 
    
  用89C2051控制的可變頻率和占空比的脈沖恒流源 
    
  本恒流源的負(fù)載為純電阻性,阻值變化范圍100Ω~1kΩ,輸出恒定電流4mA。恒流源提供三路輸出,每路輸出脈沖恒流源的頻率分別為12次/分、6次/分、3次/分,輸出脈沖寬度均為300ms。 
    
  該恒流源主要由恒流源輸出電路及可變頻率和占空比的脈沖控制信號(hào)產(chǎn)生電路兩部分組成。 
    
  用TTL或CMOS電路分頻,也能夠得到上述脈沖控制信號(hào),但電路比較復(fù)雜,且頻率和占空比不容易更改。用89C2051的輸出口作為脈沖控制信號(hào),能夠通過(guò)程序改變脈沖控制信號(hào)的頻率和占空比。 
    
  脈沖恒流源電路如附圖所示。為了說(shuō)明方便,這里只畫(huà)了一路恒流源輸出電路 
  接插件P1接9V電池,P3接負(fù)載。 
    
  恒流源輸出電路由U1、T1、T2和D1以及其他外圍電路組成。T1、R3、D1、RW1和R2構(gòu)成基準(zhǔn)電壓源。根據(jù)設(shè)計(jì)要求,由輸出電流和取樣電阻R1的阻值確定加到運(yùn)放同相端的基準(zhǔn)電位。按照?qǐng)D中的參數(shù),T1導(dǎo)通時(shí),調(diào)整RW1,使運(yùn)放的同相端的基準(zhǔn)電位為0.4V,顯然T1截止時(shí),該基準(zhǔn)電位等于0V。T1導(dǎo)通時(shí),若負(fù)載電流低于4mA,取樣電阻R1上的電壓下降,運(yùn)放的反相輸入端的電位下降,運(yùn)放的輸出電位上升,T2的基極電位和集電極電流(負(fù)載電流)上升;負(fù)載電流大于4mA?xí)r,T2的基極電位和集電極電流(負(fù)載電流)下降,最終維持輸出電流恒定。T1截止時(shí),由于加到運(yùn)放同相端的基準(zhǔn)電位降到0V,運(yùn)放的輸出電壓下降,T2截止,負(fù)載中沒(méi)有電流通過(guò)。 
    
  控制T1導(dǎo)通和截止的脈沖信號(hào)從89C2051的P10口輸出。產(chǎn)生脈沖控制信號(hào)的軟件主要由循環(huán)程序和延時(shí)子程序組成。 
  如果要擴(kuò)大輸出電流的范圍,只需用功率比較大的穩(wěn)壓源并將T2換成大功率復(fù)合管便可。 
 
    
  AT89C系列單片機(jī)加密模式 
    
  單片機(jī)解密簡(jiǎn)單就是擦除單片機(jī)片內(nèi)的加密鎖定位。由于AT89C系列單片機(jī)擦除操作時(shí)序設(shè)計(jì)上的不合理。使在擦除片內(nèi)程序之前首先擦除加密鎖定位成為可能。AT89C系列單片機(jī)擦除操作的時(shí)序?yàn)椋翰脸_(kāi)始---->擦除操作硬件初始化(10微秒)---->擦除加密鎖定位(50----200微秒)--->擦除片內(nèi)程序存儲(chǔ)器內(nèi)的數(shù)據(jù)(10毫秒)----->擦除結(jié)束。如果用程序監(jiān)控擦除過(guò)程,一旦加密鎖定位被擦除就終止擦除操作,停止進(jìn)一步擦除片內(nèi)程序存儲(chǔ)器,加過(guò)密的單片機(jī)就變成沒(méi)加密的單片機(jī)了。片內(nèi)程序可通過(guò)總線被讀出。對(duì)于AT89C系列單片機(jī)有兩種不可破解的加密方法。 
    
  一、永久性地破壞單片機(jī)的加密位的加密方法。簡(jiǎn)稱OTP加密模式。 
  二、永久性地破壞單片機(jī)的數(shù)據(jù)總線的加密方法。簡(jiǎn)稱燒總線加密模式。 
 
    
  AT89C系列單片機(jī)OTP加密模式原理 
    
  這種編程加密算法燒壞加密鎖定位(把芯片內(nèi)的硅片擊穿),面不破壞其它部分,不占用單片機(jī)任何資源。加密鎖定位被燒壞后不再具有擦除特性,89C51/52/55有3個(gè)加密位進(jìn)一步增加了加密的可靠性。一旦用OTP模式加密后,單片機(jī)片內(nèi)的加密位和程序存儲(chǔ)器內(nèi)的數(shù)據(jù)就不能被再次擦除,89C51/52/55單片機(jī)就好象變成了一次性編程的OTP型單片機(jī)一樣。如果用戶程序長(zhǎng)度大于89C51單片機(jī)片內(nèi)存儲(chǔ)器的容量,也可使用OPT模式做加密,具體方法如下: 
    
  1、按常規(guī)擴(kuò)展一片大容量程序存儲(chǔ)器,如27C512(64K)。
2、把關(guān)鍵的程序部分安排在程序的前4K中。
3、把整個(gè)程序?qū)懭?7C512,再把27C512的前4K填充為0。
4、把程序的前4K固化到AT89C51中,用OPT模式做加密。
5、把單片機(jī)的EA腳接高電平。
這樣程序的前4K在單片機(jī)內(nèi)部運(yùn)行,后60K在片外運(yùn)行。盜版者無(wú)法讀出程序的前4K程序,即使知道后60K也無(wú)濟(jì)于事
 
    
  AT89C系列單片機(jī)煉總線加密模式原理 
 
    
  因?yàn)閱纹瑱C(jī)片內(nèi)的程序代碼最終都要通過(guò)數(shù)據(jù)總線讀出,如果指導(dǎo)單片機(jī)的數(shù)據(jù)總線的其中一條線永久性地破壞,解密者即使擦除了加密位,也無(wú)法讀出片內(nèi)的程序的正確代碼。89C1051/2051的數(shù)據(jù)總線為P1口燒總線模式燒壞89C2051的P1.0端口,原程序代碼為02H、01H、00H。讀出的數(shù)據(jù)則為03H,01H,00H。其中最低位始終為1,讀出的程序代碼顯然為錯(cuò)碼。這種加密模式用于加密89C1051/2051單片機(jī)。缺點(diǎn)是占用單片機(jī)的資源。開(kāi)發(fā)設(shè)計(jì)人員在設(shè)計(jì)單片機(jī)硬件系統(tǒng)時(shí)只要預(yù)留出口線P1.0不用,以后就可用燒總線模式對(duì)單片機(jī)加密。