目錄 第一章 緒 論 1.1 題目來源及課題意義 1.2 自動加料機控制系統的工作原理及技術要求 1 1.3 系統的主要技術參數: 1 第二章 方案論證 2.1 單片機的選擇 2.2 物位傳感器的選擇 2.3 存儲器擴展電路的選擇 5 2.4 LED顯示電路選擇 7 2.5. 鍵盤輸入電路 8 第三章 自動加料機主電路 3.1 系統結構原理圖 3.2 主機電路核心器件介紹 10 3.3 顯示電路 3.4 繼電器控制電路 3.5 鍵盤及顯示電路 3.6 外部存儲器擴展電路 3.7 看門狗MAX813L電路 3.8 料位開關 第四章 系統的抗干擾及可靠性 第五章 軟件設計 第六章 結論語 參考文獻: 附錄A:系統框圖 附錄B:系統硬件框圖 程序清單:
第一章 緒 論
1.1 題目來源及課題意義在現代科學技術的許多領域中,自動控制技術起這愈來愈重要的作用,并且,隨著生產和科學技術的發展,自動化水平也越來越高。自動控制利用控制裝置使被控對象的某個參數自動的按照預定的規律運行。本設計的自動加料機控制系統就是采用自動控制技術來實現功能的,這樣就大大提高了工作的效率,整個過程又快又穩。 1.2 自動加料機控制系統的工作原理及技術要求本設計的由單片機控制的自動加料系統是與料斗式干燥機配套的加料系統。根據加料工藝要求,其工作原理是:先將真空管關閉,啟動電機,用低真空氣流將塑料樹脂粒子送入真空管,電機停轉,再將粒子排入料斗,如此循環。 在設計的控制系統中,可用一個電機控制兩個加料生產線,由方向閥切換。兩個生產線既可單獨運行,也可同時運行。假如兩者同時運行,當一生產線輸送結束后,判斷到另一個生產線排料已經結束,那么,電機不停轉而方向閥換向,從而為另一個生產線送料。這樣可以發揮控制系統和電機的效率,從而實現供料自動化。 控制系統的控制器有單片機89C51和擴展電路組成,單片機控制繼電器,繼電器控制交流接觸器,又由接觸器控制電機等執行機構的運動。本控制系統可以根據送料工藝的需要,設置兩條生產線的輸送、排料、滿料、空料等參數值,也可裝載系統前次工藝參數值。 1.3 系統的主要技術參數:- 用一臺電機控制兩條生產線
- 要能檢測到滿料狀態,并顯示出輸送、排料、滿料時間
- 時間誤差:0.1秒
- 具有抗干擾能力
第二章 方案論證
2.1 單片機的選擇20世紀80年代以來,單片機的發展非常迅速,就通用單片機而言,世界上一些著名的計算機廠家已投放市場的產品就有50多個系列,數百個品種。目前世界上較為著名的8位單片機的生產廠家和主要機型如下: 美國Intel公司:MCS—51系列及其增強型系列 美國Motorola公司:6801系列和6805系列 美國Atmel公司:89C51等單片機 美國Zilog公司:Z8系列及SUPER8 美國Fairchild公司:F8系列和3870系列 美國Rockwell公司:6500/1系列 美國TI(德克薩司儀器儀表)公司:TMS7000系列 NS(美國國家半導體)公司:NS8070系列 等等。 盡管單片機的品種很多,但是在我國使用最多的還是Intel公司的MCS—51系列單片機和美國Atmel公司的89C51單片機 MCS—51系列單片機包括三個基本型8031、8051、8751 8031內部包括一個8位CPU、128個字節RAM,21個特殊功能寄存器(SFR)、4個8位并行I/O口、1個全雙工串行口、2個16位定時器/計數器,但片內無程序存儲器,需外擴EPROM芯片。比較麻煩,不予采用 8051是在8031的基礎上,片內集成有4K ROM,作為程序存儲器,是一個程序不超過4K字節的小系統。ROM內的程序是公司制作芯片時,代為用戶燒制的,出廠的8051都是含有特殊用途的單片機。所以8051適合與應用在程序已定,且批量大的單片機產品中。也不予采用。 8751是在8031基礎上,增加了4K字節的EPROM,它構成了一個程序小于4KB的小系統。用戶可以將程序固化在EPROM中,可以反復修改程序。但其價格相對8031較貴。8031外擴一片4KB EPROM的就相當與8751,它的最大優點是價格低。隨著大規模集成電路技術的不斷發展,能裝入片內的外圍接口電路也可以是大規模的。也不予采用。 AT89C51是美國ATMEL公司生產的低電壓,高性能CMOS 8位單片機,片內含4K bytes的可反復擦寫的只讀程序存儲器(PEROM)和128bytes的隨機存取數據存儲器(ROM),器件采用ATMEL公司的高密度、非易失性存儲技術生產,兼容標準MCS-51指令系統,片內置通用8位中央處理器(CPU)和Flash存儲單元。功能強大AT89C51單片機可提供許多高性價比的應用場合,可靈活應用于各種控制領域。此設計就采用AT89C51。
2.2 物位傳感器的選擇物位是指貯存容器或工業生產設備里的液體、粉粒壯固體、氣體之間的分界面位置,也可以是互不相溶的兩種液體間由于密度不等而形成的界面位置。根據具體用途分為液位、料位、界位傳感器或變送器。物位不僅是物料耗量或產量計量的參數,也是保證連續生產和設備安全的重要參數。特別是在現代工業中,生產規模大,速度高,且常有高溫、高壓、強腐蝕性或易燃易爆物料,對于物位的監視和自動控制更是至關重要。 物位測量可用于計算物料儲量。對于粉粒體,必須考慮到顆粒間有空隙,應區分密度和容重。密度是指不含空隙的物料每單位體積的質量,即通常的質量密度  ,如果乘以重力加速度g,就成為重力密度r,簡稱為重度。容重是包含空隙在內的每單位體積的重量  v,也就是視在重度或宏觀重度,它總要比顆粒物質本身的重度小,其差額決定于空隙率。而空隙率又取決與許多因素。例如顆粒形狀、尺寸的一致程度、是否受外力壓實、是否經受過振動、有無黏結性等,所以粉粒體物料的體積儲量和質量儲量之間不易精確換算,這是需要注意的。 利用物料介電常數恒定時極間電容正比與物位的原理,可構成電容式物位傳感器。 根據電機的結構可將容式物位傳感器分為三中:(1)適用與導電容器中的絕緣性物料,且容器為立式圓筒形,器壁為一極,沿軸線插入金屬棒為另一極,其間構成的電容C與物位成比例。也可懸掛帶重錘的軟導線作為電機。(2)適用與非金屬容器,或雖為金屬容器但非立式圓筒形,物料為絕緣性的。這時在棒壯電極周圍用絕緣支架套裝金屬筒,筒上下開口,或整體上均勻分布多個孔,使內外物位相同。中央圓棒和與之同軸的套筒構成兩個電極,其間電容和容器形狀無關,只取決于物位。所以這種電極只用于液位,粉粒體容易滯留在極間。(3)用于導電性物料,起外形和(1)一樣,但中央圓棒電極上包有絕緣材料,電容是由絕緣材料的介電常數和物位決定的,與物料的介電常數無關,導電物料使筒壁與中央電極間的距離縮短為絕緣層的厚度,物位升降相當于電極面積改變。 電容式物位傳感器無可動部件,與物料密度無關,但應注意物料中含水分時將對測量結果影響很大,并且要求物料的介電常數與空氣介電常數差別大,需用高頻電路。所以不予采用。 阻力式料位傳感器是指物料對機械運動所呈現的阻擋力。粉末顆粒狀物料比液態物質流動性差,對運動物體有明顯的阻力,利用這一特點可構成各種料位傳感器。 (1)重錘探索法:在容器頂部安裝由脈沖分配器控制的步進電機,此電機正轉時緩緩釋放懸有重錘的鋼索。重錘下降到與料面接觸后,鋼索受到的合力突然減小,促使力傳感器發出脈沖。此脈沖改變門電路的狀態,使步進電機改變轉向重錘提升,同時開始脈沖計數。待重錘升至頂部觸及行程開關,步進電機停止轉動,同時計數器也停止計數并顯示料位(料位值即容器全高減去重錘行程之差)。顯示值一直保持到下次探索后刷新為另一值。開始探索的觸發信號可由定時電路周期性地供給,也可以人為地啟動。不進行探索時,重錘保持在容器頂部,以免物料將重錘淹埋。萬一重錘被物位埋沒,排放物料時產生的強大拉力就可能拉斷鋼索報警措施及出料過濾柵。 但這種方法運用了邏輯電路和數字技術,可連續測量料位值并輸出數字量,是數字傳感器,但其采樣是周期性的,對時間而言不連續,此設計不予采用。 (2)旋槳或推板法:這是一種位式傳感器,或稱料位開關。在容器壁的某一高度處裝小功率電動機,其軸伸入容器內,末端帶有槳狀葉片。葉片不接觸物料時,自由旋轉的空載狀態下電動機的電流很小,一旦料位上升到與葉片接觸,轉動阻力增加,甚至成堵轉狀態,電流顯著加大。根據電流的大小使繼電器的接點動作,發出料位報警或位式控制信號。如電機軸經過曲柄連桿機構變為往復運動,則可帶動活塞或平板在容器中做推拉動作,即成推板法。旋槳法或推板法不一定都是靠電機電流的大小時繼電器接點動作,也可以利用離合器或連桿上的傳動機構,在葉片或推板負載增大時改變電接點的通斷狀態。所用電動機應能在長時間堵轉狀態下,或離合器打滑狀態下,不致過熱而損壞。 這類原理構成的料位開關,只能安裝在容器壁上,安裝高度取決于動作所對應的料位值。應用不那么廣泛,所以次設計也不予采用。 (3)音叉法:根據物料對振動中的音叉有無阻力探知料位是否到達或超過某高度,并發出通斷信號,這種原理不需要大幅度的機械運動,驅動功率小,機械結構簡單、靈敏而可靠。 音叉由彈性良好的金屬制成,本身具有確定的固有頻率,如外加交變力的頻率與其固有頻率一致,則叉體處于共振狀態。由于周圍空氣對振動的阻尼微弱,金屬內部的能量損耗又很少,所以只需微小的驅動功率就能維持較強的振動。當粉粒體物料觸及叉體之后,能量消耗在物料顆粒間的摩擦上,迫使振幅急劇衰減,音叉停振。 為了給音叉提供交變的驅動力,利用放大電路對壓電元件施加交變電場,靠逆壓電效應產生機械力作用在叉體上。用另外一組壓電元件的正壓電效應檢測振動,它把振動力 為微弱的交變電信號。再由電子放大器和移相電路,把檢振元件的信號放大。經過移相,施加到驅動元件上去,構成閉環振蕩器。在這個閉環中,既有機械能也有電能,叉體是其中的一個環節,倘若受到物料阻尼難以振動,正反饋的幅值和相位都將明顯的改變,破壞了振蕩條件,就會停振。只要在放大電路的輸出端接以適當的器件,不難得到開關信號。 為了保護壓電元件免受物料損壞和粉塵污染,將驅動和檢振元件裝在叉體內部,經過金屬膜片傳遞振動。如果在容器的上下方都裝叉體,可以實現自動進料或自動出料的邏輯控制,或者把料位越限信號遠傳到控制室。在控制室里的控制電路判斷料位是否越限,并按要求使被控的進出料設備啟停。 并且叉體的制造和裝配良好時,音叉也可用于液體測量和控制。在測量時不需要大幅度的機械運動,驅動功率小,機械結構簡單、靈敏而可靠。此設計選擇音叉法阻力式料位傳感器。
2.3 存儲器擴展電路的選擇2.3.1 24C01擴展: 串行總線上的各單片機或集成電路模塊,通過一條數據線(SDA)和一條時鐘線(SCL),按照通信規約進行尋址和信息傳輸。每個集成電路模塊都有唯—偽地址,既可以是主控機(能控制總線,并能完成一次傳輸過程的初始化和產生時鐘信號及傳輸終止信號的器件)或被控機(被主控器尋址的器件),可以是發送器(在總線1:發送信息的器件)或接收器(從總線上接收治息的器件) I2C總線上的器件,根據它的不同工作狀態,可分為主控發送器、主控接收器、被控發送器、被控接收器。當多個主控器同時企圖控制總線而不丟失信,這叫多主競爭。這時就要進行仲裁,仲裁就是針對這種情況進行裁決的過程。只允許其卞一個主控器繼續占用總線,其它退出豐攙器狀態。仲裁過程中還要保證總線的信息不丟失。多主競爭時必須對所有參與競爭的主控器的時鐘信號進行同步處理。信息傳輸時,SCL為高電平期間,SDA上的信息必須保持穩定不變,只有SCL為低電平期間,SDA上的信息才允許變化。同時SDA上信息每一位部和SCL的時鐘脈沖相對應。SCL沒有時鐘信號,SDA信息將停止傳輸處于等待狀態。這因為線“與”邏輯,使SCL在低電平時鉗住總線。實現線“與”邏輯功能各I2C總線接口的輸出端必須是漏極開路或集電極開路結構。SCL保持高電平期間,SDA由高電平向低電平變化這種狀態定義為起始信號。SCL保持高電平期間,SDA由低電平向高電平變化,這種狀態定義為終止信號。SDA傳輸的每個字節必須8位(最高有效位首先傳送),每個傳送字節必須跟隨一位應答位。與應答信號相應的時鐘信號由主控器產生,發送器在這個時鐘信號釋放SDA,使它處于高電平狀態,以便接收由接收器在這位發出的應答信號。這時接收器還必須SCL在這位高電平期間,在SDA上輸出一個恒定低電平信氣以完成應答信號的輸出。整個傳輸過程中,傳輸的字節數目是沒有限制的。數據傳輸一段時間后,接收器無法繼續接收更多的數據,主控器同樣可以終止數據的傳送  。 24C01是一種128字節串行CMOS EEPROM,它具有如下特點:1.存儲容量為128字節。2.串行接口可使用普通兩根I/O接口。3.具有頁寫模式:每頁4字節。4.同步周期小于10ms  。它只使用一條數據線和一條時鐘線,采用ATMEL公司的24C01串口存儲器,應用簡單方便,但是其編程較為復雜。 2.3.2 2864A芯片擴展: 2864A是一種并行EEPROM,它的特點同上,但每頁有16字節,2864A與8051單片機的接口電路如下圖所示,2864A的片選端  與高地址線P2.7連接,P2.7=0才能選中2864A,這種線選法決定了2864A對應多組地址空間,即0000H~1FFFH,2000H~3FFFH,4000H~5FFFH,6000H~7FFFH,這8K字節存儲器可作為數據存儲器使用,但掉電后數據不丟失  。 2864A的四種工作方式: (1)維持方式:當  為高電平時,2864A進入低功耗維持狀態。此時,輸出線呈高阻狀態,芯片的電流從140mA下降至維持電流60mA。 (2)讀方式:當  和  均為低電平而  為高電平時,內部的數據緩沖器被打開,數據送上總線,此時,可進行讀操作。 (3)寫方式:2864A提供了兩種數據寫入方式:頁寫入和字節寫入。 頁寫入:為了提高寫入速度,2864A片內設置了16字節的“頁緩沖器”,并將整個存儲器陣列劃分成512頁,每頁16個字節。頁的區分可由地址的高9位(A4~A12)來確定,地址線的低四位(A0~A3)用以選擇頁緩沖器中的16個地址單元之一。對2864A的寫操作可分為兩步來實現:第一步,在軟件控制下把數據寫入頁緩沖器,這部稱為頁裝載,與一般的靜態RAM寫操作是一樣的。第二步,在最后一個字節(即第16個字節)寫入到頁緩沖器后20ns自動開始,把頁緩沖器的內容寫到EEPROM陣列中對應的地址單元中,這一步成為頁存儲。
寫方式時,  為低電平,在  下降沿,地址碼A0~A12被片內鎖存器鎖存,在上升沿時數據被鎖存片內還有一個字節裝載限時定時器,只要時間未到,數據可以隨機地寫入頁緩沖器。在連續向頁緩沖器寫入數據的過程中,不用擔心限時定時器會溢出,因為每當  下降沿時,限時定時器自動被復位并重新啟動計時。限時定時器要求寫入一個字節數據的操作時間  須滿足;3μS<  <20μS,這樣是正確完成對2864A頁面寫入操作的關鍵。當一頁裝載完畢,不再有  信號時,限時定時器將溢出,于是頁存儲操作隨即自動開始。首先把選中頁的內容擦除,然后寫入的數據由頁緩沖器傳遞到EEPROM陣列中。 字節寫入:字節寫入的過程與頁寫入的過程類似,不同之處在于僅寫入一個字節,限時定時器就溢出。 (4)數據查詢方式:數據查詢是指用軟件來檢測寫操作中的頁存儲周期是否完成。 在頁存儲期間,如對2864A執行讀操作,那么讀出的是最后寫入的字節,若芯片的轉儲工作未完成,則讀出數據的最高位是原來寫入字節最高位的反碼。據此,CPU可判斷芯片的編程是否結束。如果讀出的數據與寫入的數據相同,表示芯片已完成編程,CPU可繼續向2864A裝載下一頁數據。并且編程起來比較簡單,所以此設計采用此方案。
2.4 LED顯示電路選擇LED顯示器是由N個LED顯示塊拼接成N位LED顯示器。N個LED顯示塊有N跟位選線,根據顯示方式的不同,位選線和段選線的連接方法也各不相同,段選線控制顯示字符的字型,而位選線為各個LED顯示塊的公共端,它控制該LED顯示位的亮、暗。LED顯示器有靜態顯示和動態顯示兩種顯示方式。 LED顯示器工作于靜態顯示方式時,各位的共陰極(或共陽極)連接在一起并接地(或+5V);每位的段選線(a~dp)分別與一個8位的鎖存器輸出相連。所以稱為靜態顯示。各個LED的顯示字符一經確定,相應鎖存器的輸出將維持不變,直到顯示另一個字符為止。也正因此如此,靜態顯示器的亮度都較高。這種顯示方式接口編程容易。付出的代價是占用口線較多,若用I/O接口,則要占用4個8位I/O口,若用鎖存器接口,則要用4片74LS373芯片。如果顯示器位數增多,則靜態顯示方式更是無法適應,因此在顯示位數較多的情況下,一般都采用動態顯示方式。 在多位LED顯示時,為了簡化硬件電路,通常將所有位的段選線相應的并聯在一起,有一個8位I/O口控制,形成段選線的多路復用。而各位的共陽極或共陰極分別由相應的I/O線控制,實現各位的分時選通。其中段選線占用一個8位I/O口,而位選線占用一個4位I/O口。由于各位的段選線并聯,段碼的輸出對各位來說都是相同的,因此,同一時刻,如果各位位選線都處于選通狀態的話,4位LED將顯示相同的字符。若要各位LED能夠顯示出與本位相應的顯示字符,就必須采用掃描顯示方式,即在某一時刻,只讓某一位的位選線狀態,而其他各位的位選線處于關閉狀態,同時,段選線上輸出相應位要顯示字節的段碼。在確定LED不同位顯示的時間間隔,不能太短,因為發光二極管從導通到發光有一定的延時,導通時間太短,發光太弱人眼無法看清。但也不能太長,因為畢竟要受限于臨界閃爍頻率,而且此時間越長,占用CPU時間也越多,另外,顯示位增多,也將占用大量的CPU時間,因此動態顯示實質是一犧牲CPU時間來換取元件的減少。 所以,由于本系統只涉及到2位顯示輸出,就采用了和2片8位移位寄存器串級使用的LED靜態顯示方式。
2.5. 鍵盤輸入電路2.5.1 矩陣式鍵盤接口: 矩陣式鍵盤(也稱行列式鍵盤)適用于按鍵數目較多的場合,它由行線和列線組成,按鍵位于行列的交點上。一個3×3的行列結構可以構成一個有9個按鍵的鍵盤。同理,一個4×4的行列結構可以構成一個16鍵的鍵盤,很明顯,在按鍵數量較多的場合,矩陣式鍵盤與獨立式鍵盤相比,要節省很多的I/O口線。按鍵設置在行列線交點上,行列線分別接到按鍵開關兩端。行線通過上拉電阻接到+5V上。平時無按鍵按下時,行線處于高電平狀態,而當有按鍵按下時,行線電平狀態將由于此行線相連的列線電平決定。列線電平如果為低電平,則行線電平為低電平,列線電平如果為高電平,則行線電平為高電平。這是識別矩陣鍵盤按鍵是否按下的關鍵所在  。由于矩陣鍵盤中行列線為多鍵公用,各按鍵均影響該鍵所在行列的電平。因此各按鍵彼此將相互發生影響,所以必須將行列信號配合起來比做適當的處理,才能確定閉合鍵的位置。 2.5.2 獨立式按鍵接口: 獨立式按鍵就是各按鍵相互獨立,每個按鍵各接入一根輸入線,一根輸入線上的按鍵工作狀態不會影響其他輸入線上的工作狀態。因此,通過檢測輸入線的電平狀態可以很容易判斷哪個按鍵按下了。獨立式按鍵電路配置靈活,軟件簡單。但每個按鍵需要占用一個輸入口線,在按鍵數量較多時,需要較多的輸入口線且電路結構復雜,故此種鍵盤適用于按鍵較少或操作速度較高的場合。 由于此系統中共有啟動兩條生產線的“啟動1”鍵和“啟動2”鍵、分秒選擇鍵、時間設置加、時間設置減、顯示生產線狀態的切換鍵,時間設置鍵、時間切換鍵。只有這8個鍵,比較簡單。所以就采用獨立式按鍵接口電路。
第三章 自動加料機主電路
主電路采用AT89C51,由于AT89C51內含4KB容量,因此在設計中不需要外擴ROM。硬件電路主要有LED顯示電路、鍵盤接受電路、繼電器控制電路、EEPROM外部存儲器擴展電路,以及看門狗MAX813L等組成。 3.1 系統結構原理圖主電路采用AT89C51,由于AT89C51內含4KB容量,因此在設計中不需要外擴ROM。硬件電路主要有LED顯示電路、鍵盤接受電路、繼電器控制電路、EEPROM外部存儲器擴展電路,以及看門狗MAX813L等組成。電路原理框圖 如圖所示:
3.2 主機電路核心器件介紹AT89C51是美國ATMEL公司生產的低電壓,高性能CMOS 8位單片機,片內含4K bytes的可反復擦寫的只讀程序存儲器(PEROM)和128bytes的隨機存取數據存儲器(ROM),器件采用ATMEL公司的高密度、非易失性存儲技術生產,兼容標準MCS-51指令系統,片內置通用8位中央處理器(CPU)和Flash存儲單元。功能強大AT89C51單片機可提供許多高性價比的應用場合,可靈活應用于各種控制領域。 .與MCS-51產品指令系統完全兼容 .4K字節可重擦寫Flash閃速存儲器 .1000次擦寫周期 .全靜態操作:0Hz---24MHz .三級加密程序存儲器 .128×8字節內部RAM .32個可編程I/O 口線 .2個16位定時/計數器 .6個中斷源 .可編程串行UART通道 .低功率空閑和掉電模式 3.2.2 AT89C51 功能特性概述  AT89C51提供以下標準功能:4K字節Flash閃速存儲器,128字節內部RAM,32個I/0 口線,兩個16位定時/計數器,一個5向量兩級中斷結構,一個全雙工串行通信口,片內振蕩器及時鐘電路。同時,AT89C51可將至0Hz的靜態邏輯操作,并支持兩種軟件可選的節電工作模式。空閑方式停止CPU的工作,但允許RAM,定時/計數器,串行通信口及中斷系統繼續工作。掉電方式保存RAM中的內容,但振蕩器停止工作并禁止其他所有部件工作直到下一個硬件復位。
- AT89C51 引腳功能說明

.Vcc:電源電壓 .GND:地 .P0口:P0口是一組8位漏極開路型雙向I/O,也即地址/數據總線復用口。作為輸出口用時,每位能吸收電流的方式驅動8個TTL邏輯門電路,對端口寫“1”可作為高阻抗輸入端用 在訪問外部數據存儲器或程序存儲器時,這組口線分時轉換地址(低8位)和數據總線復用,在訪問期間激活內部上拉電阻。 在Flash編程時,P0接收指令字節,而在程序校驗時,輸出指令字節,校驗時,要求外接上拉電阻。 .P1口:P1口是一個帶內部上拉電阻的8位雙向I/O口,P1的輸出緩沖級可驅動(吸收或輸出電流)4個TTL邏輯門電路。對端口寫“1”,通過內部的上拉電阻把端口拉倒高電平,此時可作輸入口。作輸入口使用時,因為內部存在上拉電阻,某個引腳被外部信號拉低時會輸出一個電流(IIL)。 Flash編程和程序校驗期間,P1接收低8位地址。 .P2口:P2口是一個帶有內部上拉電阻的8位雙向I/O口,P2的輸出緩沖級可驅動(吸收或輸出電流)4個TTL邏輯門電路。對端口寫“1”,通過內部的上拉電阻把端口拉到高電平,此時可作輸入口,作輸入口使用時,因為內部存在上拉電阻,某個引腳被外部信號拉低時會輸出一個電流(IIL)。 在訪問外部程序存儲器或16位地址的外部數據存儲器(例如執行MOVE @DPTR指令)時。P2口送出高8位地址數據。在訪問8位地址的外部數據存儲器(例如執行MOVX @RI指令)時,P2口線上的內容(也即特殊功能寄存器(SFR)區總R2寄存器的內容),在整個訪問期間不改變。 Flash編程或校驗時,P2亦接收高位地址和其他控制信號。 .P3口:P3口是一組帶有內部上拉電阻的8位雙向I/O口,P3口輸出緩沖級可驅動(吸收或輸出電流)4個TTL邏輯門電路。對P3口寫入“1”時,它們被內部上拉電阻拉高并可作為輸入端口。作輸入端時,被外部拉低的P3口將用上拉電阻輸出電流(IIL)。 P3口除了作為一般的I/O口線外,更重要的用途是它的第二功能,如下表所示: | | | | | | |  (外中斷0) | |  (外中斷1) | | | | | |  (外部數據存儲器寫選通) | |  (外部數據存儲器讀選通) |
P3口還接收一些用于Flash閃速存儲器編程和程序校驗的控制信號。 .RST:復位輸入。當振蕩器工作時,RST引腳出現兩個機器周期以上高電平將單片機復位。 .ALE/ :當訪問外部程序存儲器或數據存儲器時,ALE(地址鎖存允許)輸出脈沖用于鎖存地址的低8位字節。即使不訪問外部存儲器。ALE仍一時鐘振蕩頻率的1/6輸出固定的正脈沖信號,因此它可對外輸出時鐘或用于定時目的。但要注意的是:每當訪問外部數據存儲器時將跳過一個ALE脈沖。 對Flash存儲器編程期間,該引腳還用于輸入編程脈沖(  )。 如有必要,可通過對特殊功能寄存器(SFR)區中的8EH單元的D0位置位,可禁止ALE操作。該位置位后,只有一條MOVX和MOVC指令ALE才會被激活,此外,該引腳會被微弱拉高,單片機執行外部程序時,應設置ALE無效。 . :程序存儲允許(  )輸出是外部程序存儲器的讀選通信號,當AT89C51由外部程序存儲器取指令(或數據)時,每個機器周期兩次  有效,即輸出兩個脈沖,在此期間,當訪問外部數據存儲器,這兩次有效的  信號不出現。 .EA/VPP:外部訪問允許,欲使 CPU僅訪問外部程序存儲器(地址為0000H--FFFFH),EA端必須保持低電平(接地)。需要注意的是:如果加密位LB1被編程,復位時內部會鎖存EA端狀態。 如EA端為高電平(接Vcc端),CPU則執行內部會鎖存EA端狀態。 Flash存儲器編程時,該引腳加上+12V的編程允許電源Vpp,當然這必須是該器件是使用12V編程電壓Vpp。 .XTAL1:振蕩器反相放大器的及內部時鐘發生器的輸入端。 .XTAL2:振蕩器3放大器的輸出端。 AT89C51中有一個用于構成內部振蕩器的高增益反相放大器,引腳XTAL和XTAL2分別是該放大器的輸入端和輸出端。這個放大器與作為反饋元件的片外石英晶體或陶瓷諧振器一起構成自激振蕩器,振蕩電路如圖:
外接石英晶體(或陶瓷振蕩器)及電容C1、C2接在放大器的反饋回路中構成并聯振蕩電路。對外接電容C1、C2雖然沒有十分嚴格的要求,但電容容量的大小會輕微影響振蕩頻率的高低,振蕩器工作的穩定性,起振的難易程序及溫度穩定性,如果使用石英晶體,則推薦電容使用30pF  10pF,而如使用陶瓷振蕩器建議選擇40pF  10F。 用戶也可以采用外部時鐘,采用時鐘的電路如圖。在這種情況下,外部時鐘脈沖接到XTAL1端,即內部時鐘發生器的輸入端,XTAL2則懸空。 由于外部時鐘信號是通過一個2分鐘觸發器后作為內部時鐘信號的,所以對外部時鐘信號的占空比沒有特殊要求,但最小高電平持續時間和最大的低電平持續時間應符合產品技術條件的要求。 AT89C51有兩種可用軟件編程的省電模式,它們是空閑模式和掉點工作模式。這兩種方式是控制專用寄存器PCON(即電源控制寄存器)中的PD(PCON.1)和IDL(PCON.0)位來實現的。PD是掉電模式,當PD=1時,激活掉電工作模式,單片機模式,即PD和IOL同時為1,則先激活掉電模式。 在空閑工作模式狀態,CPU保持睡眠狀態而所有片內的外設保持激活狀態,這種方式由軟件產生。此時,片內RAM和所有特殊功能寄存器的內容保持不變。空閑模式可由任何允許的中斷請求或硬件復位終止。 終止空閑工作模式的方法有兩種,其一是任何一條被允許中斷的事件被激活,IDL(PCON.0)被硬件清除,即刻終止空閑工作模式。程序會首先響應中斷,進入中斷服務程序,執行完中斷服務程序并緊隨RETI(中斷返回)指令后,下一條要執行的指令就是使單片機進入空閑模式那條指令后面的一條指令。 其二是通過硬件復位也可將空閑工作模式終止。需要注意的是,當有硬件復位來終止空閑工作模式時,CPU通常是從激活空閑模式那條指令的下一條指令開始繼續執行程序的,要完成內部復位操作,硬件復位脈沖要保持兩個機器周期(24個時鐘周期)有效,在這種情況下,內部禁止CPU訪問片內RAM,而允許訪問其它端口。為了避免可能對端口產生意外寫入,激活空閑模式的那條指令后一條指令不應是一條對端口或外部存儲器的寫入指令。 在掉點模式下,振蕩器停止工作,進入掉電模式的指令是最后一條被執行的指令,片內RAM和特殊功能寄存器的內容在終止掉電模式前被凍結。退出掉電模式的唯一方法是硬件復位,復位后將重新定義全部特殊功能寄存器但不改變RAM中的內容,在VCC恢復到正常電平前,復位應無效,且必須保持一定時間以使振蕩器重啟動并穩定工作。 空閑和掉電模式外部引腳狀態
3.2.7 程序存儲器的加密 AT89C51可使用對芯片上的3個加密位LB1、LB2、LB3進行編程(P)或不編程(U)來得到下表所示的功能: 加密位保護功能表 | |
| | | | | | | | | | | | | 禁止從外部程序存儲器中執行MOVC指令讀取內部程序存儲器的內容 | | | | | | | | | | |
當加密位LB1被編程時,在復位期間,EA端的邏輯電平被采樣并鎖存,如果單片機上電后一直沒有復位,則鎖存起的初始值是一個隨機數,且這個隨機數會一直保存到真正復位為止,為使單片機能正常工作,被鎖存的EA電平必須與該引腳當前的邏輯電平一致。此外,加密位只能通過整片擦除的方法清除。 Flash閃速存儲器的編程 AT89C51單片機內部有4K字節的Flash PEROM,這個Flash存儲陣列出廠時已處于擦除狀態(即所有存儲單元的內容均為FFH),用戶隨時可對其進行編程。編程接口可接收高電壓(+12V)或低電壓(Vcc)的允許編程信號。低電壓編程模式適合于用戶在線編程系統,而高電壓編程模式可與通用EPROM編程器兼容。 AT89C51單片機中,有些屬于低電壓編程方式,而有些則是高電壓編程方式。用戶可從芯片上的型號和讀取芯片內的簽名字節獲得該信息。如圖
| | | | | | | (030H)=1EH (031H)=51H (032H)=FFH | (030H)=1EH (031H)=51H (032H)=05H |
AT89C51的程序存儲器列陣采用字節寫入方式編程的,每次寫入一個字節,要對整個芯片內的PEROM程序存儲器寫入一個非空字節,必須使用擦除的方式將整個存儲器的內容清楚。 - 在地址線上加上要編程單元的地址信號。
- 在數據線上加上要寫入的數據字節。
- 激活相應的控制信號。
- 在高電壓編程方式時,將/EA/Vpp端加上+12V編程電壓。
每對Flash存儲陣列寫入一個字節或每寫入一個程序加密位,加上一個ALE/PROG編程脈沖。
改變編程單元的地址和寫入的數據,重復1—5步驟,直到全部文件編程結束。 每個字節寫入周期是自身定時的,通常約為1.5ms
AT89C51單片機用數據查詢方式來檢測一個寫周期是否結束,在一個寫周期中,如需讀取最后寫入的那個字節,則讀出的數據的最高位(P0.7)是原來寫入字節最高的反碼,寫周期完成后,有效的數據就會出現在所有輸出端上,此時,可進入下一個字節的寫周期,寫周期開始后,可在任意時刻進行數據查詢。   Ready/Busy:字節編程的進度可通過RDY/BSY輸出信號監測,編程期間,ALE變成高電平“H”后P3.4端電平被拉低,表示正在編程狀態。編程完成后。P3.4變為高電平表示準備就緒狀態。 3.2.11 程序校驗及芯片擦除 如果加密位LB1、LB2沒有進行編程,則代碼數據可通過地址和數據線讀回原編寫的數據。采用下圖電路。程序存儲器的地址由P1和P2口的P2.0-P2.3輸入,數據有P0口讀出,P2.6、P2.7和P3.6、P3.7的控制信號  保持低電平,ALE、  和RST保持高電平。校驗時P0口須接上10K左右的上拉電阻。 加密位不可直接校驗,加密位的校驗可通過對存儲器的校驗和寫入狀態來驗證。 利用控制信號的正確組合并保持ALE/  引腳10ms的低電平脈沖寬度即可將PEROM陣列(4k字節)和三個加密位整片擦除,代碼陣列在片擦除操作中將任何非空單元寫入“1”,這步驟需再編程之前進行。 3.2.12 讀片內簽名字節及編程接口 AT89C51單片機內有3個簽名字節,地址為030H、031H和032H。用于聲明該器件的廠商、型號和編程電壓。讀簽名字節的過程和單元030H、031H和032H的正常校驗相仿,只需將P3.6、P3.7保持低電平,返回值意義如下: (030H)=1EH 聲明產品由ATMEL公式制造。 (031H)=51H 聲明為AT89C51單片機。 (032H)=FFH 聲明為12V編程電壓。 (032H)=05H 聲明為5V編程電壓。 編程接口:采用控制信號的正確組合可對Flash閃速存儲陣裂中的每一代碼字節進行寫入和存儲器的整片擦除,寫操作周期是自身定時的,初始化后它將自動定時到操作完成。 3.2.13 AT89C51的極限參數: 極限參數:工作溫度………………-55℃to+125℃ 儲藏溫度………………-65℃to+150℃ 任一引腳對地電壓………-1.0Vto+7.0V 最高工作電壓………………………6.6V 直流輸出電流……………………15.0mA
3.3 顯示電路在單片機應用系統中,如果需要顯示的內容只有數碼和某些字母,使用LED數碼管是一種較好的選擇。LED數碼管顯示清晰、成本低廉、配置靈活,與單片機接口簡單易行。LED數碼管是由發光二極管作為顯示字段的數碼型顯示器件,其中七只發光二極管分別對應a~g筆端構成“日”字形,另一只發光二極管Dp作為小數點。因此這種LED顯示器稱為七段數碼管或八段數碼管。如圖所示:
LED數碼管按電路中的連接方式可分為共陰型和共陽型兩大類,共陽型是將各段發光二極管的正極連在一起,作為公共端COM,公共端COM接高電平,a~g、Dp各筆段通過限流電阻接控制端。某筆段控制端低電平時,該筆段發光,高電平時不發光。控制某幾段筆端發光,就能顯示出某個數碼或字符。共陰型是將各段發光二極管的負極連在一起,作為公共端COM接地,某筆段通過限流電阻接高電平時發光。 在自動加料機控制系統中運行是要顯示輸送、排料、滿料、空料時間,有時間切換鍵和標志哪條生產線的發光二極管表示,顯示的位數少,所以就采用靜態顯示的方式。LED顯示器工作于靜態顯示方式時,各位的共陰極(或共陽極)連接在一起并接地(或+5V);每位的段選線(a~dp)分別與一個8位的鎖存器輸出相連。所以稱為靜態顯示。各個LED的顯示字符一經確定,相應鎖存器的輸出將維持不變,直到顯示另一個字符為止。也正因此如此,靜態顯示器的亮度都較高。這種顯示方式接口編程容易。若用I/O接口,則要占用4個8位I/O口,若用鎖存器接口,則要用4片74LS373芯片。如果顯示器位數增多,則靜態顯示方式便無法適應。 在設計中,LED顯示電路采用74LS377驅動器和MC14511B譯碼器控制LED數碼管。
3.3.1 74LS377芯片介紹
.D0~D7:8個信號輸入端。 .Q0~Q7:8個信號輸出端。 .CLK:時鐘信號輸入端。 . :鎖存允許信號。當  =0時,CLK端的上跳變將把8位D輸入端的數據打入8位鎖存器。 74LS377真值表
.A~D:四個信號輸入端。 .a~g:七個信號輸出端。 .LT、BI:接地。 .LE:接電源。  LED顯示電路采用74LS377驅動器和MC14511B譯碼器控制LED數碼管。兩個LED顯示一條生產線一個工作過程的秒數。兩片MC14511B把P0口的高四位和低四位譯碼成十進制控制LED顯示。電路圖如下:
3.4 繼電器控制電路在電氣控制領域或產品中,凡是需要邏輯控制的場合,幾乎都需要使用繼電器,從家用電器到工農業應用,甚至國民經濟各個部門,可謂無所不見。繼電器是一種利用各種物理量的變化,將電量或非電量信號轉化為電磁力(有觸頭式)或使輸出狀態發生階躍變化(無觸頭式),從而通過其觸頭或突變量促使在同一電路或另一電路中的其它器件或裝置動作的一種控制元件。根據轉化的物理量的不同,可以構成各種各樣的不同功能的繼電器,以用于各種控制電路中進行信號傳遞、放大、轉換、聯鎖等,從而控制主電路和輔助電路中的器件或設備按預定的動作程序進行工作,實現自動控制和保護的目的。被轉化或施加于繼電器的電量或非電量稱為繼電器的激勵量,當繼電器被激勵,從一個起始位置達到預定的工作位置,并完成電路的切換動作,稱為繼電器的工作特性,包括吸合。不吸合,保持與釋放狀態。當輸入量變化到高于它的吸合值或低于它的釋放值時,繼電器動作,對于有觸頭式繼電器其觸頭閉合或斷開,對于無觸頭式繼電器起輸出發生階躍變化,以此提供一定的邏輯變量。 自動加料機是把塑料粒子送到一個真空管,在輸送時真空管關閉合,排料時真空管需要打開,將粒子送到排料漏斗。本設計共需2個繼電器控制交流接觸器,一個接帶動生產的電動機。另一個為控制工作方向的方向閥。經考慮采用4123無極12V直流控制24V的交流繼電器,并利用光耦合器件P521和MCU隔開。89C51的P1初始值為0FFH,所以加一個74LS04反相器使得繼電器初始不產生閉合,使用MC1413為無源驅動器,IN4007組成繼電器的續流二極管。  電路圖如下:
3.5 鍵盤及顯示電路鍵盤在單片機應用系統中能實現向單片機輸入數據、傳送命令等功能,是人工干擾單片機的主要手段。本設計采用8255A為I/O擴展。 3.5.1 鍵盤接口 非編碼鍵盤與單片機的接口單片機系統所用的鍵盤有編碼鍵盤和非編碼鍵盤兩種。 編碼鍵盤本身除了按鍵之外,還包括產生鍵碼的硬件電路,只要按下某一個鍵,就能產生這個鍵的代碼,一般稱為鍵碼,同時,還能產生一個脈沖信號,以通知CPU接收(輸入)鍵碼。這種鍵盤的使用比較方便,亦不需要編寫很多程序,但使用的硬件較復雜,在微型計算機控制系統中使用還不多。 非編碼鍵盤是由一些按鍵排列成的一個行列矩陣。按鍵的作用,只是簡單地實現接點的接通和斷開,但必須有一套相應的程序與之配合,才能產生出相應的鍵碼。非編碼鍵盤幾乎不需要附加什么硬件電路,目前,在微型計算機控制系統中使用比較普遍。 使用非編碼鍵需要用軟件來解決按鍵的識別,防止抖動以及鍵碼的產生等工作。 設有一個6行×5列的非編碼鍵盤,其中有16個為數字鍵0~F,其余的為控制鍵,用以發布各種控制命令。鍵盤的行線接8155C口的六條線PC5~PC0,鍵盤的列線則接8155B口的5條線。在沒有任何鍵按下時,所有鍵盤列線上的信號都是高電平。當有按鍵按下時,就會出現鍵的識別、防止抖動以及確定鍵碼等一系列問題。 按鍵識別有各種方法,此系統只 “行掃描”法: (1)確定是否有按鍵按下。CPU通過并行口輸出000000到鍵盤的行線,然后檢測鍵盤的列線信號。若沒有鍵按下,則為11111。若有任一個按鍵按下,則有某一條列線為0,也就是當PB4~PB0不為11111時,就表示有鍵按下。 (2)通過“行掃描”確定已按鍵的行、列位置。所謂行掃描就是依次給每條行線輸入0信號,而其余各行都輸入1,并檢測每次掃描時所對應的列信號。在圖2中就是在C口先輸出111110(PC5~PC0),然后是111101,直到最后是011111,并檢測每次所對應的B口輸入。 只有在某行上有鍵按下時,在這一行上輸入0(其他行為1),在列輸出上才能檢測到0信號。若是輸入為0的這一行上沒有按鍵按下,則收到的列信號仍然全是1。因此,只要記下列信號不全為1時的C口輸出及B口輸入,就能確定以按鍵的位置。設圖2中處于第3行第1列的鍵已按下,則必須是行輸出信號為110111,檢測到的列信號為11101。對應于其他的行信號,列信號都是11111。這樣,通過行掃描,就可以確定按鍵的行、列坐標。 (3)確定是否有多鍵同時按下。有時一次按下的鍵不止一個,這在一般情況下是由于誤操作引起的,是不應該出現的通常稱為竄鍵。出現這種情況時,就可能有不止一次會得到列信號不為全1,這時就不容易判斷哪個鍵是真正需要按下的。為了處理這種情況可采取兩種辦法:一是行掃描一定是掃到最后一行才結束,而不是檢測到列信號不為全1時就結束,以便發現竄鍵;二是如果出現了竄鍵,最簡單的處理辦法就是這次行掃描不算,再來一遍,即以最后放開的那個鍵為準。實際上,由于掃描的速度很快,真正找到兩個鍵同時按下的情況是很少的。 (4)消除鍵抖動。一般按鍵在按下的時候有抖動的問題,即鍵的簧片在按下時會有輕微的彈跳,需經過一個短暫的時間才會可靠地接觸。若在簧片抖動時進行掃描就可能得出不正確的結果。因此,在程序中要考慮防抖動的問題。最簡單的辦法是在檢測到有鍵按下時,等待(延遲)一段時間再進行“行掃描”,延遲時間為10~20ms。這可通過調用子程序來解決,當系統中有顯示子程序時,調用幾次顯示子程序也能同時達到消除抖動的目的。 3.5.2 8255A芯片介紹 自動加料系統有8個按鍵:啟動兩條生產線的“啟動1”鍵和“啟動2”鍵、分秒選擇鍵、時間設置加/減鍵、顯示生產線狀態切換鍵,時間設置鍵,時間切換鍵,由于單片機的并行口有限。本系統采用8255A擴展并行口。 (1).8255A的內部結構 8255A的內部結構有以下幾部分組成: a.并行I/O端口A、B、C 8255A的內部有3個8位并行I/O口:A口、B口、C口。3個I/O口都可以通過編程選擇為輸入口或輸出口,但在結構和功能上有所不同。 A口:含有一個8位數據輸出鎖存/緩沖器和一個8位輸入鎖存器。 B口:含有一個8位數據輸出鎖存/緩沖器和一個8位輸入鎖存器(不鎖存)。 C口:含有一個8位數據輸出鎖存/緩沖器和一個8位輸入鎖存器(不鎖存)。 當數據傳送不需要聯絡信號時,這3個端口都可以用作輸入口或輸出口。當A口B口需要有聯絡信號時,C口可以作為A口和B口的聯絡信號線。 b.工作方式控制電路:8255A的三個端口在使用使可分為A、B兩組。A組包括A口8位和C口高4位:B組包括B口8位和C口低4位。兩組的控制電路中分別有控制寄存器,根據寫入的控制字決定兩組的工作方式,也可對C口每一位置“1” 或清“0”。 c.數據總線緩沖器:數據總線緩沖器是三態雙向的8位緩沖器,是8255A與單片機數據總線的接口,8255A的D0~D7可以和AT89C51單片機的P0.0~P0.7直接相連。數據的輸入輸出、控制字和狀態信息的傳遞,均可通過數據總線緩沖器進行。 d.讀/寫控制邏輯:8255A讀/寫控制邏輯的作用是從CPU的地址和控制總線上接受有關信號,轉變成各種控制命令送到數據緩沖器及A組和B組的控制電路,控制A、B、C3個端口的操作。 3.5.3 8255A引腳功能
8255A共有40個引腳,一般為雙列直插DIP封裝,40個引腳可分為與CPU連接的數據線、地址和控制信號以及與外圍設備連接的三個端口線。 .D0~D7:雙向三態數據總線。 .RESET:復位信號,輸入,高電平有效。復位后,控制寄存器清0,A口、B口、C口被置為輸入方式。 .  :片選信號,輸入,低電平有效。 .  :讀信號,輸入,低電平有效。  有效時,允許CPU通過8255A D0~D7讀取數據或狀態信息。 .  :寫信號,輸入,低電平有效。有效時,允許 .A1A0:端口控制信號,輸入。2位可構成四種狀態,分別尋址A口、B口、C口和控制寄存器 .PA0~PA7:A口數據線,雙向。 .PB0~PB7:B口數據線,雙向。 .PC0~PC7:C口數據/信號線,雙向。當8255A工作于方式0時,PC0~PC7分為兩組(每組4位)并行I/O數據線;當8255A工作于方式1或方式2時,PC0~PC7為A口、B口提供聯絡信號。 A1A0與  、  、  信號一起,可確定8255A的操作狀態,如圖所示: 8255A功能操作 | | | | | | | | | | | | | | | | | | 數據總線→A口 數據總線→B口 數據總線→C口 數據總線→控制口 | | | | | | | | |
8255A與AT89C51接口電路。 在連接鍵盤電路采用8255A為擴展I/O口時,要在中間加入一個74LS373,74LS373是一個三態門的8D鎖存器,它可以作為AT89C51外部的一個擴展輸入口,借口電路的工作原理是當外設把數據準備好后,發出一個控制信號加到373的G端,即鎖存端,使輸入數據在373中鎖存,同時信號加到AT89C51單片機的中斷請求  端,單片機響應中斷,在中斷服務程序中執行下面程序: MOV DPTR,#0BFFFH MOVX A,@DPTR 在執行上面的第二條指令時,P2.6=0,  有效,通過或門后加到373的  端,即373的三態門控制端,使三態門暢通,鎖存的數據讀入到累加器A中。 電路如圖所示:
3.6 外部存儲器擴展電路
自動加料機存在兩條生產線的輸送、排料、滿料、空料,共8個設置的重要數據需要讀/寫,并且能夠提供掉點保護,所以就需要外闊程序存儲器。程序存儲器一般采用自讀存儲器,因為這種存儲器在電源關斷后,仍能保存程序,在系統上電后,CPU可取出這些指令予以重新執行。只讀存儲器簡稱ROM。ROM中的信息一旦寫入之后,就不能隨意更改,特別是不能在程序運行的過程中寫入新的內容,故稱之為只讀存儲器。 向ROM中寫入信息叫做ROM編程。根據編程的方式不同,ROM分為以下幾種: (1)掩膜ROM是在制造過程中編程。因編程是以掩膜工藝實現的,因此稱為掩膜ROM。這種芯片存儲結構簡單,集成度高,但由于掩膜工藝由于成本較高,因此只適合于大批量生產。 (2)可編程ROM(PROM) PROM芯片出廠是并沒有任何程序信息,是由用戶用獨立的編程器寫入的,但PROM只能寫入一次,寫入內容后,就不能在進行修改。 (3)EPROM EPROM是用電信號編程,用紫外線擦除的只讀存儲器芯片。在芯片外殼上的中間位置有一個圓形窗口,通過這個窗口照射紫外線射就可擦除原有的信息。 (4)E2PROM 這是一種用電信號編程,也用電信號擦除的ROM芯片,對E2PROM的讀寫操作與RAM存儲器幾乎沒有什么差別,只是寫入的速度慢一些,但斷電后能夠保存信息。 此設計采用外擴E2PROM的擴展方式。E2PROM是電擦除可編程自讀存儲器,其突出優點是能夠在線擦除和改寫,無須像ERPOM那樣必須用紫外線照射才能擦徹,較新的E2PROM產品在寫入時能自動完成擦除,且不再需要專用的編程電源,可以直接使用單片機系統的+5V電源。 常用的E2PROM芯片有2816/1816A,2817/2817A,2864A。本設計采用的是用2864A的擴展方式。 2864A有四種工作方式: 當  為高電平時,2864A進入低耗維持方式。此時,輸出線呈高阻態,芯片的電流從140mA降至維持電流60mA。 當  和  均為低電平而  為高電平時,內部的數據緩沖器被打開,數據送上總線,此時,可進行讀操作。 2864A提供了兩種數據 方式:字節寫入和頁寫入 頁寫入:2864A片內設置了16字節的“頁緩沖器”,并將整個存儲器陣列劃分成512頁,每頁16個字節。頁的區分可由地址的高9位來確定,地址線的低4位用以選擇頁緩沖器中的16個地址單元之一。寫方式時,  為低電平,在  下降沿,地址碼A0~A12被片內鎖存器鎖存,在上升時數據被鎖存。片內還有一個字節裝載限時定時器,只要時間未到,數據可以隨機地寫入頁緩沖器。在連續向頁緩沖器寫入數據的過程中,不用擔心限時定時器會益處,因為每當  下降沿時,限時定時器自動被復位并重新啟動計時。 字節寫入:字節寫入的過程與頁寫入的過程類似,不同之處是僅寫入一個字節,限時定時器就溢出。 數據查詢是指用軟件來檢測寫操作中的頁存儲周期是否完成。 在頁存儲期間,如對2864A執行讀操作,那么讀出的是最后寫入的字節,若芯片的轉儲工作未完成,則讀出數據的最高位是原來寫入字節最高位的反碼。據此,CPU可判斷 的編程是否結束。如果讀出的數據與寫入的數據相同,表示芯片已完成編程,CPU可繼續向2864A裝載下一頁數據。 2864A與單片機接口時,2864A的片選端  與高地址線P2.7連接,P2.7=0才能選中2864A,這種線選法決定了2864A對應多組地址空間,即:0000H~1FFFFH,2000H~3FFFH,4000H~5FFFH,6000H~7FFFH。這8K字節存儲器可作為數據存儲器使用,但掉電后數據不丟失。2864A與AT89C51接口電路如圖:單片機由于受引腳數的限制,數據線和地址線是復用的,由P0口兼用。為了將它們分離出來,以便同單片機片外的擴展芯片正確的連接,需要在單片機外部增加地址鎖存器。我們這本設計中使用74LS373。74LS373是一種帶有三態門的8D鎖存器,其引腳如圖所示
圖 3.6.1 鎖存器74LS373的引腳 其引腳的功能如下: D7~D0:8位數據輸入線 Q7~Q0:8位數據輸出線 G:數據輸入鎖存選通信號,高電平有效。當該信號為高電平的時候,外部數據選通到內部鎖存器,負跳變時,數據鎖存到鎖存器中。  :數據輸出允許信號,低電平有效。當該信號為低電平的時候,三態門打開,鎖存器中數據輸出到數據輸出線。當該信號為高電平的時候,輸出線為高阻態。 74LS373的功能表見表
連接電路圖:
3.7 看門狗MAX813L電路幾乎所有的單片機都需要復位電路,對復位電路的基本要求是:在單片機上電時能可靠復位,在下電時能防止程序亂飛導致EPROM中的數據被修改;另外,單片機系統在工作時,由于干擾等各種因素的影響,有可能出現死機現象導致單片機系統無法正常工作,為了克服這一現象,除了充分利用單片機本身的看門狗定時器(有些單片機無看門狗定時器)外,還需外加看門狗電路;除此以外,有些單片機系統還要求在掉電瞬間單片機能將重要數據保存下來,因掉電的發生往往是根隨機的,因而此類單片機系統需要電源監控電路,在掉電剛發生時能告知單片機。MAXIM公司推出的MAX813L剛好能滿足這些要求,下面具體介紹該芯片的性能特點及使用方法。
MAX813L有雙列直插和貼片兩種封裝形式,其雙列直插如圖所示,引腳功能如下: 第①腳為手動復位輸入,低電平有效;第②、②腳分別為電源和地;第④腳為電源故障輸入;第⑤腳為電源故障輸出;第⑥腳為看門狗輸入,第⑦腳為復位輸出,第⑧腳為看門狗輸出。 MAX813L的性能特點:
MAX813L的內部結構框圖如圖所示,具有以下主要性能特點:由圖可知該芯片具有以下主要性能特點: (1)復位輸出。系統上電、掉電以及供電電壓降低時,第⑦腳產生復位輸出,復位脈沖寬度的典型值為200ms,高電平有效,復位門限的典型值為4.65V。 (2)看門狗電路輸出。如果在1.6s內沒有觸發該電路(即第⑥腳無脈沖輸入),則第⑧腳輸出一個低電平信號。 (3)手動復位輸入,低電平有效,即第①腳輸入一個低電平,則第⑦腳產生復位輸出。 (4)1.25V門限值檢測器,第④腳為輸入,第⑤腳為輸出。當第④腳電壓低于1.25V時,第⑤腳輸出一個低電平信號。
MAX813L的典型應用電路:
MAX813L的典型應用電路如圖所示。圖中單片機以AT89C51為例,MAX813L的第①腳與第⑧腳相連。第⑦腳接單片機的復位腳(AT89C51的第⑨腳);第⑥腳與單片機的P1.4相連。在軟件設計中,P1.4不斷輸出脈沖信號,如果因某種原因單片機進入死循環,則P 1.4無脈沖輸出。于是1.6s后在MAX813L的第⑧腳輸出低電平,該低電平加到第①腳,使MAX813L產生復位輸出,使單片機有效復位,擺脫死循環的困境。另外,當電源電壓低于門限值4.65V時,MAX813L也產生復位輸出,使單片機處于復位狀態,不執行任何指令,直至電源電壓恢復正常,可有效防止因電源電壓較低時單片機產生錯誤的動作。
電源故障輸入PFI通過一個電阻分壓器監測未穩壓的直流電源。當PFI低于1.25V時,電源故障輸出腳第⑤腳PF0變低,可引起AT89C51中斷,進行電源故障處理,或將重要數據保存下來。把分壓器接到未穩壓的直流電源是為了更早地對電源故障告警。
MAX813L是一體積小、功耗低、性價比高的帶看門狗和電源監控功能的復位芯片;它使用簡單、方便,它所提供的復位信號為高電平,因而是應用于復位信號為高電平場合的單片機系統的理想芯片。 3.8 料位開關在料體進入料斗式干燥機后,要能檢測到什么時候到達滿料狀態,所以就選用簡單的阻力式傳感器,阻力式料位傳感器是指物料對機械運動所呈現的阻擋力。粉末顆粒狀物料比液態物質流動性差,對運動物體有明顯的阻力,利用這一特點可構成各種料位傳感器。 采用音叉法,音叉法:根據物料對振動中的音叉有無阻力探知料位是否到達或超過某高度,并發出通斷信號,這種原理不需要大幅度的機械運動,驅動功率小,機械結構簡單、靈敏而可靠。 音叉由彈性良好的金屬制成,本身具有確定的固有頻率,如外加交變力的頻率與其固有頻率一致,則叉體處于共振狀態。由于周圍空氣對振動的阻尼微弱,金屬內部的能量損耗又很少,所以只需微小的驅動功率就能維持較強的振動。當粉粒體物料觸及叉體之后,能量消耗在物料顆粒間的摩擦上,迫使振幅急劇衰減,音叉停振。 為了給音叉提供交變的驅動力,利用放大電路對壓電元件施加交變電場,靠逆壓電效應產生機械力作用在叉體上。用另外一組壓電元件的正壓電效應檢測振動,它把振動力 為微弱的交變電信號。再由電子放大器和移相電路,把檢振元件的信號放大。經過移相,施加到驅動元件上去,構成閉環振蕩器。在這個閉環中,既有機械能也有電能,叉體是其中的一個環節,倘若受到物料阻尼難以振動,正反饋的幅值和相位都將明顯的改變,破壞了振蕩條件,就會停振。只要在放大電路的輸出端接以適當的器件,不難得到開關信號。 為了保護壓電元件免受物料損壞和粉塵污染,將驅動和檢振元件裝在叉體內部,經過金屬膜片傳遞振動。如果在容器的上下方都裝叉體,可以實現自動進料或自動出料的邏輯控制,或者把料位越限信號遠傳到控制室。在控制室里的控制電路判斷料位是否越限,并按要求使被控的進出料設備啟停。 并且叉體的制造和裝配良好時,音叉也可用于液體測量和控制。在測量時不需要大幅度的機械運動,驅動功率小,機械結構簡單、靈敏而可靠。 系統采用LD-YC/YG 型 音叉式物位限位開關
LD-YC/YG型音叉式物位限位開關作為一種新型的物位傳感器,具有安裝簡單,不用標定,攪動、氣泡對測量無影響等優點。在未來工業過程中將全面取代如浮球液位開關等落后的檢測方式廣泛應用于各行各業。 原理 傳感器安裝于倉的頂部或倉的側壁上。音叉由壓電晶體驅動產生振動,當叉體被液體浸沒或被物料埋沒時振動頻率發生變化。這個變化由電子電路檢出并輸出一個開關量用于報警或控制。 適用范圍 中等粘度、腐蝕性液體。流動性好的粉狀物料和顆粒狀物料。 禁用范圍 高溫、高粘度液體。高溫、易結垢固體、塊狀物料。 主要技術指標 [YC 部分] 供電電壓:直流 24V 或 10-55V (防爆型用 DC 24V) 交流 25-250V 50Hz 工作溫度:叉體 -40-80℃ 儀表 -20-45℃ 輸出方式: 直流24V 供電時為繼電器輸出(AC 220V 1A) 直流10-55V 供電時為集電極開路輸出(350mA 防爆型產品≤50mA) 交流25-250V 供電時為兩線制輸出(220V 4.4W-77W) 功 耗:直流供電時 0.25W(DC 24V) 交流供電時 1.5W(AC 220V) 安裝方式:G1 管螺紋 防爆標志:本安 iaⅡBT4 隔爆型 dⅡBT4 [YG 部分] 供電電壓:直流 24V 或 18-55V 交流50-250V 50Hz 工作溫度:叉體 -40-150℃ 儀表 -20-70℃ 輸出方式: 直流24V 供電時為繼電器輸出(AC 220V 1A) 直流18-55V 供電時為集電極開路輸出 (350mA) 交流50-250V 供電時為兩線輸出(220V 350mA 防爆型產品≤50mA) 功 耗:直流供電時 0.25W(DC 24V) 交流供電時 1.5W(AC 220V) 安裝方式:G1.5 管螺紋
第四章 系統的抗干擾及可靠性
單片機系統供電線路是干擾的主要來源,電源采用隔離變壓器接入電網,隔離變壓器在初級和次級之間加了一層屏蔽層。交流接觸器是繼電器控制的,在緊靠交流接觸器的輸入端口并上一個電阻和電容串聯的電路濾去高次諧波。每個集成電路芯片的電源和地之間要并上0.1  F的陶瓷電容。在輸入輸出通道上要加光藕P521。除了在繼電器通道上外,兩個滿料信號也要經過P521光藕才送至 INT0、INT1。另外,數字地和模擬地要分開,數字地線要粗而短。 軟件抗干擾方面,本系統采用指令冗余和軟件陷阱。當CPU受到干擾后,會把一些操作數當作指令碼來執行,引起程序混亂。由于當PC指針飛到單字節指令上時,會自動步入正軌。因此我們在程序中人為地在 RET、RET1、LCALL、LJMP、AJMP、DJZE、JZ、CJNE等處插入一些單字節指令(NOP)。并在繼電器開閉指令 SET、CLR前插入兩條NOP指令。同時,當程序飛到ROM中未使用的非程序區時,非程序區要能捕獲PC指針并強行拉到處理故障程序中。所以非程序區要每隔一段設置一個軟件陷阱。軟件陷阱 由三條指令構成: NOP NOP LJMP ERROR ERROR 處理過程放在 0030H 開始處
第五章 軟件設計 程序設計包括主程序、中斷程序、故障處理程序,系統中用到了兩個定時器中斷:定時器0每隔1.2s使P1.7產生脈沖信號;定時器1產生1s的定時,使LED顯示遞減。故障處理程序使PC指針跳回到原來起動的相應程序段;主程序完成內部RAM數據區初始化、8255初始化,并根據按鍵信號跳轉到想應程序段。
第六章 結論語本設計是基于AT89C51的自動加料系統沒有外擴ROM和RAM,程序直接放在AT89C51內部閃存中。設定數據通過串行口存入2864A中,另外,系統從硬件和軟件方面采取了抗干擾措施。 但是在物體送到料斗式干燥機后沒有設計如何把物體從干燥機排除來,如果考慮到這一點,那設計就更加完美了。
附錄A:系統框圖
附錄B:系統硬件框圖
單片機源程序如下:
- ORG
- LJMP IINT0
- ORG 0080H
- MAIN:MOV SP,#60H
- MOV PSW,#00H
- MOV 71H,#14H
- MOV 72H,#
- MOV 73H,#00H
- MOV 74H,#00H
- MOV 75H,#00H
- MOV 76H,#00H
- MOV TMOD,#01H
- MOV TL0,#0B0H
- MOV TH0,#3CH
- SETB TR0 ;,開中斷
- SETB EA
- SETB ET0
- JMCGS:JMB P1.2,KK
- NOP
- NOP
- JB P1.2,KK
- NOP
- MOV 70H,#01H
- KK:LJMP JMCGS ;等待中斷
- ORG 0100H ;中斷服務子程序
- IINT0:PUSH A ;入棧保護
- PUSH PSW
- CLR EA ;關中斷
- CLR TR0
- DJNZ 71H,ZDFH ;不到2秒直接中斷返回
- MOV A,70H
- MOV B,72H
- MVL AB
- MOV R6,B
- MOV R5,A
- MOV R2,#02H
- LCALL CHUFA
- MOV 73H,R5
- LCALL KZCX
- MOV 74H,73H
- ZDFH:SETB EA ;開中斷
- SETB ET0
- MOV TMOD,#01H 0重新賦初值
- MOV TL0,#0B0H
- MOV TH0,#3CH
- SETB TR0
- POP PSW ;出棧
- POP A
- RETI ;中斷返回
- CHUFA:MOV R7,#08H
- CHU1:CLR C
- MOV A,R5
- RLC A
- MOV R5,A
- MOV A,R6
- RLC A
- MOV 07H,C
- CLR C
- SUBB A,R2
- JB 07H,CHU2
- JNC CHU2
- ADD A,R2
- AJMP CHU3
- CHU2:INC R5
- CHU3:MOV R6,A
- JNE R7,CHU1
- RET
- KZCX:MAIN A,73H ;控制子程序
- CJNE A,74H,KZ2
- ZJFH:RET ;直接返回
- KZ2:JC PFKZ
- CFKZ:MOV B,#03H
- DIV AB
- MOV 75H,A
- CJNE A,#04H,ZJFH
- JC ZJFH
- MOV A,75H
- CJNE A,#0AH,CFKZ1
- JNC CFKZ2
- CFKZ1:MOV TMOD,#10H
- MOV TL0,#0B0H
- MOV TH0,#3CH
- SETB TR1
- SETB P1.0
- DELAY:JNB TF1,DELAY
- CLR TR1
- CLR TF1
- CLR P1.0
- LJMP ZJFH
- CFKZ2:MOV R4,#02H
- CFKZ3:MOV TMOD,#10H
- MOV TH0,#3CH
- SETB TR1
- SETB P1.0
- DELAY:JNB TF1,DELAY1
- CLR TR1
- CLR TF1
- CLR P1.0
- DJNZ R4,CFKZ3
- LJMP ZJFH
- PFKZ:MOV B,#03H
- DIV AB
- MOV 76H,A
- CJNE A,#08H,ZJFH
- JC ZJFH
- MOV A,76H
- CJNE A,#0AH,PFKZ1
- JNC PFKZ2
- PFKZ1:MOV TMOD,#10H
- MOV TL0,#3CH
- SETB TR1
- SETB P1.1
- DELAY:JNB TF1,8
- CLR TR1
- CLR TF1
- CLR P1.1
- LJMP ZJFH
- PFKZ2:MOV R4,#02H
- PFKZ3:MOV TMOD,#10H
- MOV TL0,#0B0H
- MOV TH0,#3CH
- SETB TR1
- SETB P1.1
- DELAY4:JNB TF1,DELAY4
- CLR TR1
- CLR TF1
- CLR P1.1
- DJNZ R4,PFKZ3
- LJMP ZJFH
-
-
-
- 存儲器擴展子程序
- STORE: SETB VSDA;
- SETB VSCL;
- NOP;
- NOP;
- NOP;
- NOP;
- CLR VSDA;
- NOP;
- CLR VSDA;
- NOP;
- NOP;
- NOP;
- NOP;
- CLR VSCL;
- RET;
- STOP:CLR VSDA;
- SETB VSCL;
- NOP;
- NOP;
- NOP;
- NOP;
- SETB VSDA;
- NOP;
- NOP;
- NOP;
- NOP;
- CLR VSDA;
- CLR VSCL;
- RET;
- MACK: CLR VSDA;
- SETB VSCL;
- NOP;
- NOP;
- NOP;
- NOP;
- CLR VSCL;
- SETB VSDA;
- RET;
- MNACK:SETB VSDA;
- SETB VSCL;
- NOP;
- NOP;
- NOP;
- NOP;
- CLR VSCL;
- CLR VSDA;
- RET;
- CACK: SETB VSDA;
- SETB VSCL;
- CLR F0;
- MOV C,VSDA;
- JNC CEND;
- SETB F0;
- CEND:CLR VSCL;
- RET;
- WRBYT: MOV R0,#08H;
- WLP: RLC A;
- JC WR1;
- AJMP WR0;
- WLP1:DJNZ R0,WLP;
- RET;
- WR1:SETB VSDA;
- SETB VSCL;
- NOP;
- NOP;
- NOP;
- NOP;
- CLR VSCL;
- CLR VSDA;
- AJMP WLP1;
- WR0:CLR VSDA;
- SETB VSCL;
- NOP;
- NOP;
- NOP;
- NOP;
- CLR VSCL;
- AJMP WLP1;
- RDBYT:MOV R0,#08H;
- RLP: SETB VSDA;
- SETB VSCL;
- MOV C,VSDA;
- MOV A,R2;
- RLC A;
- MOV R2,A;
- CLR VSCL;
- DJNZ R0,RLP;
- RET;
- WRNBYT:MOV R3,NUMBYT;
- LCALL STA;
- MOV A,SLA;
- LCALL WRBYT;
- LCALL CACK;
- JB F0,WRNBYT;
- MOV R1,#MTD;
- WRDA:MOV A,@R1;
- LCALL WRBYT;
- LCALL CACK;
- JB F0,WRNBYT;
- INC R1;
- DJNZ R3,WRDA;
- LCALL STOP;
- RET;
- RDNBYT:MOV R3,NUMBYT;
- LCALL STA;
- MOV A,SLA;
- LCALL WRBYT;
- LCALL CACK;
- JB F0,RDNBYT;
- RDN:MOV R1,#MRD;
- RDN1:LCALL RDBYT;
- MOV @R1,A;
- DJNZ R3,ACK;
- LCALL MNACK;
- LCALLSTOP;
- RET;
- ACK:LCALL MACK;
- INC R1;
- SJMP RDN1;
-
- 中斷服務子程序:
- X0S: MOV DPTR,#2000H
- MOVX @DPTR,A
- SETB TR0
- MOV 3AH,#20H
- MOV 3BH,#00H
- MOV R7,#00H
- MOV R6,#04H
- CLR 70H
- X0S0: CLR01H
- X0S1: JNB 01H,X0S1
- CJNE R6,#00H,X0S0
- CJNE R7,#00H,X0S0
- CLR TR0
- CLR EX0
- SETB 00H
- RETI
-
-
- 鍵盤程序:
- KEYI:ACALL KS1 ;調用判有無鍵閉合子程序
- JNZ LK1 ;有鍵閉合,跳LK!
- NI: ACALL DIR ;無鍵閉合,調用顯示子程序,延時
- AJMP KEYI
- LK1: ACALL DIR ;可能有鍵閉合,延時12MS軟件區
- ACALL DIR
- ACALL KS1 ;調用判有無子程序
- JNZ LK2 ;經去消抖,判斷確實有鍵按下跳
- ACALL DIR ;調用顯示子程序延時6MS
- AJMP KEYI ;抖動引起跳KEYI去處理
- LK2: MOV R2,#0FEH ;列選碼—〉R2
- MOV R4,#00H ;R4 為列號計數器
- LK4: MOV DPTR,#7F01H ;列選碼—〉8155H
- MOV A,R2
- MOVX @DPTR,A
- INC DPTR ;數據指針增2,指向PC口
- INC DPTR
- MOVX A,@DPTR ;讀8155H的PC口
- JB Acc.0,LONE ;第0行線為高,無鍵閉合,跳LONE
- ;轉判第1行
- MOV A,#00H ;第0行有鍵閉合,首鍵號—〉A
- AJMP LKP ;跳LKP,計算鍵號
- LONE: JB Acc.1,LTOW ;1行線為高,無鍵閉合,跳LTW0
- ;轉判斷第2行
- MOV A,#08H ;1行有鍵閉合,首鍵號8—〉A
- AJMP LKP ;跳LKP ,計算鍵號
- LTW0: JB Acc.2,LTHR ;2行線為高,無鍵閉合跳LTHR
- ;轉判;第3行
- MOV A,#10H ;2行有鍵閉合,首鍵號10H—〉A
- AJMP LKP ;跳LKP,計算鍵號
- LTHR: JB Acc.3,NEXT ;3行線為高,無鍵閉合跳NEXT,
- ;準備下一列的掃描
- MOV A,#18H ;3行有鍵按下,首鍵號18H—>A
- LKP: ADD A,R4 ;計算鍵號
- PUSH A ;鍵號進棧保護
- LK3: ACALL DIR ;調用顯示子程序,延時6MS
- ACALL DIR ;調用判有無鍵閉合子程序,延時6MS
- JNZ LK3 ;判鍵釋放否,未釋放,則循環
- POP A ;鍵已釋放,鍵號出棧->A
- RET
- NEXT: INC R4 ;列計數器加1,為下一列掃描做準備
- MOV A,R2 ;判是否已掃到最后一列(最右一列)
- NB Acc.7,KND ;鍵掃描已到最后一列,跳KND重新
- ;進行整個
- ;鍵盤的掃描
- RL A ;鍵掃描未掃到最后一列,位選碼左
- ;移一位
- MOV R2,A ;位選碼->R2
- AJMP LK4
- KND: AJMP KEYI
- KS1: MOV DPTR ,#7F01H ;判有無鍵閉合子程序,全0->掃描(PA口)
- MOV A,#00H ;列線全為低電平
- MOVX @DPTR,A ;
- INC DPTR ;DPTR增2,指向PC 口
- INC DPTR
- MOVX A,@DPTR ;從PC口讀行線的狀態
- CPL A 行線的狀態取反,如無鍵按下,則A
- ;中內容為0
- ANL A,#0FH ;屏蔽無用的高4位
- RET
-
- PID: MOV R5,3 1H ;取W
- MOV R4,32H
- MOV R3,#00H :取Yi
- MOV R2,2AH
- ACALL CPL1 ;取Yi的補碼
- ACALL DSUM ;計算ei=W-Yi
- MOV 39H,R7 ;存ei
- MOV 3AH,R6
- MOV R5,35H ;取I
- MOV R4,36H
- MOV R0,#4 AH ;R0放乘積高位字節地址指針
- ACALL MULT1 ;計算Pi=I*ei
- MOV R5,39H :取ei
- MOV R4,3AH
- MOV R3,3BH ;取ei-1
- MOV R2,3CH
- ACALL CPL1 ;求ei-1:的補碼
- ACALL DSUB ;求pp=△ei=ei-ei-1:
- MOV A,R7
- MOV R5,A :存△ei
- MOV A,R6
- MOV R4,A
- MOV R3,4BH ;取Pi
- MOV R2,4AH
- ACALL DSUM ;求Pi+Pp
- MOV 4BH,R7
- MOV 4AH,R6 ;存和(Pi+即)
- MOV R5,39H
- MOV R4,3AH ;取ei
- MOV R3,3DH
- MOV R2,3EH ;取ei-2
- ACALL DSUM :計算ei=ei-2
- MOV A,R7
- MOV R5,A
- MOV A,R6
- MOV R4,A
- MOV R3, 3BH
- MOV R2,3CH ;取ei-1
- ACALL CPL1 :求ei-1,補碼
- ACALL DSUM ;計算ei=ei-2-ei-1
- MOV A,R7
- MOV R5,A ;存和
- MOV A,R6
- MOV R4,A
- MOV R3,3BH
- MOV R3,3CH ;取ei-l
- ACALL CPL1 :求ej-1補碼
- ACALL DSUM ;計算ei=ei- 2-2e i-1、
- MOV R5,37H ;取D
- MOV R4,38H
- MOV R0,#46H
- ACALL MULT1 ;求出Pd=D*(ei=ei-2-2ei-1)
- MOV R5,47H
- MOV R4,46H :存Pd
- MOV R3,4BH
- MOV R2,4AH ;取(pi+PP)
- ACALL DSUM ;計算pi+pp+pd
- MOV R5,33H ;取Kp
- MOV R4,34H
- MOV R0,#46H
- ACALL MULTl ;計算Kp*(Pi+Pp+Pd)
- MOV R3,47H
- MOV R2,46H
- MOV R5,2FH ;取ui-1
- MOV R4,30H
- ACALL DSUM ;求出ui=ui-l+KP*(Pi+Pp +pd)
- MOV 2FH,R7 ;存ui~ui_,
- MOV 30H,R6
- MOV 3DH,3BH ;ei-l-ei-2
- MOV 3EH,3CH
- MOV 3BH,39H :ei-ei-1
- MOV 3CH,3AH
- RET
- DSUM: MOV A,R4
- ADD A,R2
- MOV R6,A
- MOV A,R5
- ADDC A,R3
- MOV R7,A
- RET
- CPLI: MOV A,R2
- CPL A
- ADD A,#0lH
- MOV R2,A
- MOV A,R3
- CPL A
- ADDC A,#00H
- MOV R3,A
- RET
- MULTI: MOV A,R7
- RLC A
- MOV SIGN1,C ;存被乘數符號位
- JNC POS1 ;被乘數為正轉
- MOV A,R6 ;求補
- CPL A
- ADD A,#0lH
- MOV R6,A
- MOV A,R7
- CPL A
- ADDC A,#00H
- MOV R7,A
- POSI: MOV A,R5
- RLC A
- MOV SIGN2,C :存乘數符號位
- JNC POS2 ;乘數為正轉
- MOV A,R4
- CPL A
- ADD A,#0lH
- MOV R4,A
- MOV A,R5
- CPL A
- ADDC A,#00H
- MOV R5,A
- POSZ: ACALL MUL1,
- MOV C,SIGN1
- ANL C,SIGN2
- JC TPL ;C=1是兩個負數相乘轉
- MOV C,SIGN1
- ORL C,SIGN2
- JNC TPL ;C=0是兩個正數相乘轉
- DEC R0
- DEC R0
- DEC R0
- MOV A,@R0
- CPL A
- ADD A,#0lH
- MOV @R0,A
- INC R0
- MOV A,@RO
- CPL A
- ADDC A,#00H
- TPL: RET
- MULT: MOV A,R6 ;取b
- MOV B,R4 ;取d
- MUL AB ;求bd
- MOV @Ro,A ;求bdL
- MOV R3, B ;求bdL~R3
- MOV A, R4 ;取d
- MOV B,R7 ;取a
- MUL AB ;求ad
- ADD A,R3 ;求adL+bdH
- MOV R3,A ;暫存adL+bdH
- MOV A,B
- ADDC A,#00H ;adH+進位
- MOV R2, A ;暫存
- MOV A,R6 ;取b
- MOV B,R5 ;取c
- MUL AB ;求bc
- ADD A, R3 ;求adL+bcL+bdH
- INC R0 ;修改指針
- MOV @R0,A ;乘積第三字節存入
- CLR 55BH ;清標志
- MOV A,R2
- ADDC A,B ;求adH+bcH
- MOV R2,A
- JNC LAST ;無進位數
- SETB 5BH ;置進位標志
- MOV A,R7 ;取a
- MOV B,R5 ;取c
- MUL AB ;求ac
- ADD A,R2 ;求acL+adH+bcH
- INC R0
- MOV @R0,A ;存積的第二個字節
- MOV A,B
- ADDC A,#00H
- MOV C,5BH
- ADDC A,#00H
- INC R0 :修改指針
- MOV @R0,A ;存積的最高字節
- RET
-
- 顯示子程序:
- ORG 055CH
- MOV R0,#79H
- MOV @R0,#01H
- INC R0
- MOV @R0,#01H
- INC R0
- MOV R0,#05H
- INC R0
- MOV @R0,#16H
- INC R0
- MOV @R0,#1BH
- INC R0
- MOV @R0,#1EH
- MOV DPTR,#4F00H
- ……………………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
所有資料51hei提供下載:
自動加料機控制系統.doc
(807 KB, 下載次數: 34)
2018-11-7 22:35 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|