久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 7056|回復: 0
打印 上一主題 下一主題
收起左側

單片機自動加料機控制系統設計 附源碼

[復制鏈接]
跳轉到指定樓層
樓主
ID:420142 發表于 2018-11-7 22:36 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
目錄
第一章  緒 論
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靜態顯示方式
LED顯示器工作于靜態顯示方式時,各位的共陰極(或共陽極)連接在一起并接地(或+5V);每位的段選線(a~dp)分別與一個8位的鎖存器輸出相連。所以稱為靜態顯示。各個LED的顯示字符一經確定,相應鎖存器的輸出將維持不變,直到顯示另一個字符為止。也正因此如此,靜態顯示器的亮度都較高。這種顯示方式接口編程容易。付出的代價是占用口線較多,若用I/O接口,則要占用4個8位I/O口,若用鎖存器接口,則要用4片74LS373芯片。如果顯示器位數增多,則靜態顯示方式更是無法適應,因此在顯示位數較多的情況下,一般都采用動態顯示方式。






      • LED動態顯示方式
在多位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單片機可提供許多高性價比的應用場合,可靈活應用于各種控制領域。






      • 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口線外,更重要的用途是它的第二功能,如下表所示:
端 口 引 腳
      第  二  功  能
P3.0
RXD  (串行輸入口)
P3.1
TXD  (串行輸出口)
P3.2
(外中斷0)
P3,3
(外中斷1)
P3.4
T0    (定時/計數器0)
P3.5
T1    (定時/計數器1)
P3.6
   (外部數據存儲器寫選通)
P3.7
    (外部數據存儲器讀選通)

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雖然沒有十分嚴格的要求,但電容容量的大小會輕微影響振蕩頻率的高低,振蕩器工作的穩定性,起振的難易程序及溫度穩定性,如果使用石英晶體,則推薦電容使用30pF10pF,而如使用陶瓷振蕩器建議選擇40pF10F。
用戶也可以采用外部時鐘,采用時鐘的電路如圖。在這種情況下,外部時鐘脈沖接到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恢復到正常電平前,復位應無效,且必須保持一定時間以使振蕩器重啟動并穩定工作。
模式
程序存儲器
ALE
/PSEN
P0
P1
P2
P3
空閑模式
   內部
  1
1
數據
數據
數據
數據
空閑模式
   外部
  1
1
浮空
數據
地址
數據
掉電模式
   內部
0
0
數據
數據
數據
數據
掉電模式
   外部
  0
0
浮空
數據
數據
數據
  空閑和掉電模式外部引腳狀態

3.2.7    程序存儲器的加密
AT89C51可使用對芯片上的3個加密位LB1、LB2、LB3進行編程(P)或不編程(U)來得到下表所示的功能:
加密位保護功能表
                        程序加密位
保護類型

LB1
LB2
LB3
1
U
U
U
沒有程序保護功能

2

P

U

U
禁止從外部程序存儲器中執行MOVC指令讀取內部程序存儲器的內容
3
P
P
U
除上表功能外,還禁止程序校驗
4
P
P
P
除以上功能外,同時禁止外部執行
當加密位LB1被編程時,在復位期間,EA端的邏輯電平被采樣并鎖存,如果單片機上電后一直沒有復位,則鎖存起的初始值是一個隨機數,且這個隨機數會一直保存到真正復位為止,為使單片機能正常工作,被鎖存的EA電平必須與該引腳當前的邏輯電平一致。此外,加密位只能通過整片擦除的方法清除。
Flash閃速存儲器的編程
AT89C51單片機內部有4K字節的Flash              PEROM,這個Flash存儲陣列出廠時已處于擦除狀態(即所有存儲單元的內容均為FFH),用戶隨時可對其進行編程。編程接口可接收高電壓(+12V)或低電壓(Vcc)的允許編程信號。低電壓編程模式適合于用戶在線編程系統,而高電壓編程模式可與通用EPROM編程器兼容。
AT89C51單片機中,有些屬于低電壓編程方式,而有些則是高電壓編程方式。用戶可從芯片上的型號和讀取芯片內的簽名字節獲得該信息。如圖

Vpp=12V
Vpp=5V

芯片頂面標識
AT89C51
xxxx
yyww
AT89C51
xxxx—5
yyww

簽名字節
(030H)=1EH
(031H)=51H
(032H)=FFH
(030H)=1EH
(031H)=51H
(032H)=05H
AT89C51的程序存儲器列陣采用字節寫入方式編程的,每次寫入一個字節,要對整個芯片內的PEROM程序存儲器寫入一個非空字節,必須使用擦除的方式將整個存儲器的內容清楚。






      • 編程方法
編程前,先設置好地址,數據及控制信號,編程單元的地址加在P1口和P2口的P2.0—P2.3(11位地址范圍為0000H—0FFFH),數據從P0口輸入,引腳P2.6、P2.7和P3.6、P3.7的電平,PSEN為低電平,RST保持高電平,EA/Vpp引腳是編程電源的輸入端,按要求加上編程電壓,ALE/PROG引腳輸入編程脈沖(負脈沖)。編程時,可采用4—20MHz的時鐘振蕩器,AT89C51編程方法如下:
  • 在地址線上加上要編程單元的地址信號。
  • 在數據線上加上要寫入的數據字節。
  • 激活相應的控制信號。
  • 在高電壓編程方式時,將/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真值表
CLK
D
Q
1
X
X
Q0
0
1
1
0
0
0
X
0
X
Q0







      •   MC14511B芯片介紹


.A~D:四個信號輸入端。
.a~g:七個信號輸出端。
.LT、BI:接地。
.LE:接電源。






      • LED接口電路
   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功能操作
A1
A0
操    作
0
0
1
0
1
0
0
0
0
1
1
1
0
0
0
A口→數據總線
B口→數據總線
C口→數據總線

輸入操作
0
0
1
1
0
1
0
1
1
1
1
1
0
0
0
0
0
0
0
0
數據總線→A口
數據總線→B口
數據總線→C口
數據總線→控制口

輸出操作
x
1
x
x
1
x
X
0
1
x
1
1
1
0
0
數據總線為高阻態
非法狀態
數據總線為高阻態

禁止操作
   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的功能表見表

G
D
Q
0
1
1
1
0
1
0
0
0
0
×
不變
1
×
×
高阻態

連接電路圖:


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.1F的陶瓷電容。在輸入輸出通道上要加光藕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:系統硬件框圖












單片機源程序如下:
  1. ORG
  2. LJMP IINT0
  3. ORG 0080H                 
  4. MAIN:MOV SP,#60H         
  5. MOV PSW,#00H
  6. MOV 71H,#14H
  7. MOV 72H,#           
  8. MOV 73H,#00H
  9. MOV 74H,#00H
  10. MOV 75H,#00H
  11. MOV 76H,#00H
  12. MOV TMOD,#01H     
  13. MOV TL0,#0B0H      
  14. MOV TH0,#3CH
  15. SETB TR0               ;,開中斷
  16. SETB EA
  17. SETB ET0
  18. JMCGS:JMB P1.2,KK           
  19. NOP
  20. NOP
  21. JB P1.2,KK
  22. NOP
  23. MOV 70H,#01H
  24. KK:LJMP JMCGS                ;等待中斷
  25.          ORG 0100H            ;中斷服務子程序
  26. IINT0:PUSH A                   ;入棧保護
  27. PUSH PSW
  28. CLR EA                   ;關中斷
  29. CLR TR0                 
  30. DJNZ 71H,ZDFH            ;不到2秒直接中斷返回
  31. MOV A,70H
  32. MOV B,72H               
  33. MVL AB
  34. MOV R6,B
  35. MOV R5,A
  36. MOV R2,#02H
  37. LCALL CHUFA            
  38. MOV 73H,R5               
  39. LCALL KZCX              
  40. MOV 74H,73H            
  41. ZDFH:SETB EA                   ;開中斷
  42. SETB ET0
  43. MOV TMOD,#01H           0重新賦初值
  44. MOV TL0,#0B0H
  45. MOV TH0,#3CH
  46. SETB TR0                 
  47. POP PSW                  ;出棧
  48. POP A
  49. RETI                       ;中斷返回
  50. CHUFA:MOV R7,#08H
  51. CHU1:CLR C
  52. MOV A,R5
  53. RLC A
  54. MOV R5,A
  55. MOV A,R6
  56. RLC A
  57. MOV 07H,C
  58. CLR C
  59. SUBB A,R2
  60. JB 07H,CHU2
  61. JNC CHU2
  62. ADD A,R2
  63. AJMP CHU3
  64. CHU2:INC R5
  65. CHU3:MOV R6,A
  66. JNE R7,CHU1
  67. RET
  68. KZCX:MAIN A,73H            ;控制子程序
  69. CJNE A,74H,KZ2      
  70. ZJFH:RET                     ;直接返回
  71. KZ2:JC PFKZ                 
  72. CFKZ:MOV B,#03H            
  73. DIV AB
  74. MOV 75H,A
  75. CJNE A,#04H,ZJFH
  76. JC ZJFH
  77. MOV A,75H
  78. CJNE A,#0AH,CFKZ1
  79. JNC CFKZ2
  80. CFKZ1:MOV TMOD,#10H         
  81. MOV TL0,#0B0H
  82. MOV TH0,#3CH
  83. SETB TR1
  84. SETB P1.0
  85. DELAY:JNB TF1,DELAY
  86. CLR TR1
  87. CLR TF1
  88. CLR P1.0
  89. LJMP ZJFH
  90. CFKZ2:MOV R4,#02H            
  91. CFKZ3:MOV TMOD,#10H
  92. MOV TH0,#3CH
  93. SETB TR1
  94. SETB P1.0
  95. DELAY:JNB TF1,DELAY1
  96. CLR TR1
  97. CLR TF1
  98. CLR P1.0
  99. DJNZ R4,CFKZ3
  100. LJMP ZJFH
  101. PFKZ:MOV B,#03H           
  102. DIV AB
  103. MOV 76H,A
  104. CJNE A,#08H,ZJFH
  105. JC ZJFH
  106. MOV A,76H
  107. CJNE A,#0AH,PFKZ1
  108. JNC PFKZ2
  109. PFKZ1:MOV TMOD,#10H        
  110. MOV TL0,#3CH
  111. SETB TR1
  112. SETB P1.1
  113. DELAY:JNB TF1,8
  114. CLR TR1
  115. CLR TF1
  116. CLR P1.1
  117. LJMP ZJFH
  118. PFKZ2:MOV R4,#02H            
  119. PFKZ3:MOV TMOD,#10H
  120. MOV TL0,#0B0H
  121. MOV TH0,#3CH
  122. SETB TR1
  123. SETB P1.1
  124. DELAY4:JNB TF1,DELAY4
  125.         CLR TR1
  126.         CLR TF1
  127.         CLR P1.1
  128.         DJNZ R4,PFKZ3
  129.         LJMP ZJFH



  130. 存儲器擴展子程序
  131. STORE:  SETB VSDA;
  132. SETB VSCL;
  133. NOP;
  134. NOP;
  135. NOP;
  136. NOP;
  137. CLR  VSDA;
  138. NOP;
  139. CLR  VSDA;
  140. NOP;
  141. NOP;
  142. NOP;
  143. NOP;
  144. CLR VSCL;
  145. RET;
  146. STOP:CLR VSDA;
  147. SETB VSCL;
  148. NOP;
  149. NOP;
  150. NOP;
  151. NOP;
  152. SETB VSDA;
  153. NOP;
  154. NOP;
  155. NOP;
  156. NOP;
  157. CLR     VSDA;
  158. CLR     VSCL;
  159. RET;
  160. MACK: CLR VSDA;
  161. SETB    VSCL;
  162. NOP;
  163. NOP;
  164. NOP;
  165. NOP;
  166. CLR     VSCL;
  167. SETB    VSDA;
  168. RET;
  169. MNACK:SETB VSDA;
  170. SETB    VSCL;
  171. NOP;
  172. NOP;
  173. NOP;
  174. NOP;
  175. CLR VSCL;
  176. CLR VSDA;
  177. RET;
  178. CACK: SETB VSDA;
  179. SETB VSCL;
  180. CLR F0;
  181. MOV C,VSDA;
  182. JNC CEND;
  183. SETB F0;
  184. CEND:CLR VSCL;
  185. RET;
  186. WRBYT: MOV R0,#08H;
  187. WLP: RLC A;
  188. JC WR1;
  189. AJMP WR0;
  190. WLP1:DJNZ R0,WLP;
  191. RET;
  192. WR1:SETB VSDA;
  193. SETB VSCL;
  194. NOP;
  195. NOP;
  196. NOP;
  197. NOP;
  198. CLR VSCL;
  199. CLR VSDA;
  200. AJMP WLP1;
  201. WR0:CLR VSDA;
  202. SETB VSCL;
  203. NOP;
  204. NOP;
  205. NOP;
  206. NOP;
  207. CLR VSCL;
  208. AJMP WLP1;
  209. RDBYT:MOV R0,#08H;
  210. RLP: SETB VSDA;
  211. SETB VSCL;
  212. MOV C,VSDA;
  213. MOV A,R2;
  214. RLC A;
  215. MOV R2,A;
  216. CLR VSCL;
  217. DJNZ R0,RLP;
  218. RET;
  219. WRNBYT:MOV R3,NUMBYT;
  220. LCALL STA;
  221. MOV  A,SLA;
  222. LCALL  WRBYT;
  223. LCALL  CACK;
  224. JB  F0,WRNBYT;
  225. MOV  R1,#MTD;
  226. WRDA:MOV A,@R1;
  227. LCALL WRBYT;
  228. LCALL CACK;
  229. JB F0,WRNBYT;
  230. INC R1;
  231. DJNZ R3,WRDA;
  232. LCALL STOP;
  233. RET;
  234. RDNBYT:MOV R3,NUMBYT;
  235. LCALL STA;
  236. MOV A,SLA;
  237. LCALL WRBYT;
  238. LCALL CACK;
  239. JB F0,RDNBYT;
  240. RDN:MOV R1,#MRD;
  241. RDN1:LCALL RDBYT;
  242. MOV @R1,A;
  243. DJNZ R3,ACK;
  244. LCALL MNACK;
  245. LCALLSTOP;
  246. RET;
  247. ACK:LCALL MACK;
  248. INC R1;
  249. SJMP RDN1;

  250. 中斷服務子程序:
  251. X0S:    MOV DPTR,#2000H
  252.             MOVX @DPTR,A
  253.              SETB TR0
  254.              MOV 3AH,#20H
  255.              MOV 3BH,#00H
  256.              MOV R7,#00H
  257.            MOV R6,#04H
  258.              CLR 70H
  259. X0S0:   CLR01H
  260. X0S1:   JNB 01H,X0S1
  261.              CJNE R6,#00H,X0S0
  262.              CJNE R7,#00H,X0S0
  263.             CLR TR0
  264.              CLR EX0
  265.              SETB 00H
  266.              RETI


  267. 鍵盤程序:
  268. KEYI:ACALL   KS1                                          ;調用判有無鍵閉合子程序
  269. JNZ      LK1                                                        ;有鍵閉合,跳LK!
  270. NI:    ACALL  DIR                                          ;無鍵閉合,調用顯示子程序,延時
  271. AJMP   KEYI
  272. LK1:                 ACALL  DIR                            ;可能有鍵閉合,延時12MS軟件區
  273. ACALL  DIR
  274. ACALL  KS1                                                                      ;調用判有無子程序
  275. JNZ     LK2                                                                      ;經去消抖,判斷確實有鍵按下跳
  276. ACALL  DIR                                                                      ;調用顯示子程序延時6MS
  277. AJMP    KEYI                                                                      ;抖動引起跳KEYI去處理
  278.           LK2:  MOV   R2,#0FEH                                                        ;列選碼—〉R2
  279.                 MOV    R4,#00H                                                        ;R4 為列號計數器
  280.           LK4:  MOV    DPTR,#7F01H                                          ;列選碼—〉8155H
  281. MOV    A,R2
  282. MOVX  @DPTR,A
  283. INC     DPTR                                                                      ;數據指針增2,指向PC口
  284. INC     DPTR
  285. MOVX   A,@DPTR                                          ;讀8155H的PC口
  286. JB      Acc.0,LONE                                          ;第0行線為高,無鍵閉合,跳LONE
  287. ;轉判第1行
  288. MOV    A,#00H                                                        ;第0行有鍵閉合,首鍵號—〉A
  289. AJMP   LKP                                                                      ;跳LKP,計算鍵號
  290. LONE: JB      Acc.1,LTOW                                          ;1行線為高,無鍵閉合,跳LTW0
  291. ;轉判斷第2行
  292.                 MOV  A,#08H                                                                      ;1行有鍵閉合,首鍵號8—〉A
  293.                 AJMP  LKP                                                                      ;跳LKP ,計算鍵號
  294. LTW0:  JB   Acc.2,LTHR                                                        ;2行線為高,無鍵閉合跳LTHR
  295. ;轉判;第3行
  296.                 MOV A,#10H                                                                      ;2行有鍵閉合,首鍵號10H—〉A
  297. AJMP LKP                                                                                    ;跳LKP,計算鍵號
  298. LTHR:  JB Acc.3,NEXT                                                                      ;3行線為高,無鍵閉合跳NEXT,
  299. ;準備下一列的掃描
  300.                 MOV  A,#18H                                                                      ;3行有鍵按下,首鍵號18H—>A
  301. LKP:     ADD A,R4                                          ;計算鍵號
  302. PUSH A                                                                                                  ;鍵號進棧保護
  303. LK3:  ACALL DIR                                                                      ;調用顯示子程序,延時6MS
  304. ACALL DIR                                                                      ;調用判有無鍵閉合子程序,延時6MS
  305. JNZ LK3                                                                                    ;判鍵釋放否,未釋放,則循環
  306. POP A                                                                                                  ;鍵已釋放,鍵號出棧->A
  307. RET
  308. NEXT: INC  R4                                                        ;列計數器加1,為下一列掃描做準備
  309.               MOV A,R2                                                                                    ;判是否已掃到最后一列(最右一列)
  310.               NB  Acc.7,KND                                                        ;鍵掃描已到最后一列,跳KND重新
  311. ;進行整個
  312. ;鍵盤的掃描
  313. RL     A                                                                                    ;鍵掃描未掃到最后一列,位選碼左
  314. ;移一位
  315. MOV  R2,A                                                                      ;位選碼->R2
  316. AJMP LK4
  317. KND: AJMP KEYI
  318. KS1:  MOV  DPTR ,#7F01H              ;判有無鍵閉合子程序,全0->掃描(PA口)
  319. MOV   A,#00H                                                        ;列線全為低電平
  320. MOVX  @DPTR,A              ;
  321. INC  DPTR                                                                      ;DPTR增2,指向PC 口
  322. INC  DPTR
  323. MOVX A,@DPTR                                                        ;從PC口讀行線的狀態
  324. CPL A                                                                                                  行線的狀態取反,如無鍵按下,則A
  325. ;中內容為0
  326. ANL A,#0FH                                                                      ;屏蔽無用的高4位
  327. RET

  328. PID: MOV   R5,3 1H            ;取W
  329.                           MOV   R4,32H
  330.                           MOV   R3,#00H                                 :取Yi
  331.                           MOV   R2,2AH
  332.                           ACALL  CPL1                                    ;取Yi的補碼
  333.                           ACALL  DSUM                                   ;計算ei=W-Yi
  334.                           MOV   39H,R7                                  ;存ei
  335.                           MOV   3AH,R6
  336.                           MOV   R5,35H                                               ;取I
  337. MOV   R4,36H
  338. MOV   R0,#4 AH                                ;R0放乘積高位字節地址指針
  339. ACALL  MULT1                                  ;計算Pi=I*ei
  340. MOV   R5,39H                                  :取ei
  341. MOV   R4,3AH
  342. MOV   R3,3BH                                               ;取ei-1
  343. MOV   R2,3CH
  344. ACALL  CPL1                                    ;求ei-1:的補碼
  345. ACALL  DSUB                                                 ;求pp=△ei=ei-ei-1:
  346. MOV   A,R7
  347. MOV R5,A                                       :存△ei
  348. MOV    A,R6
  349. MOV    R4,A
  350. MOV    R3,4BH                                 ;取Pi
  351. MOV    R2,4AH
  352. ACALL  DSUM                                   ;求Pi+Pp
  353. MOV    4BH,R7
  354. MOV    4AH,R6                                 ;存和(Pi+即)
  355. MOV    R5,39H
  356. MOV    R4,3AH                                 ;取ei
  357. MOV    R3,3DH
  358. MOV    R2,3EH                                 ;取ei-2
  359. ACALL  DSUM                                   :計算ei=ei-2
  360. MOV    A,R7
  361. MOV    R5,A
  362. MOV    A,R6
  363. MOV    R4,A
  364. MOV    R3,  3BH
  365. MOV    R2,3CH                                 ;取ei-1
  366. ACALL  CPL1                                    :求ei-1,補碼
  367. ACALL  DSUM                                   ;計算ei=ei-2-ei-1
  368. MOV    A,R7
  369. MOV    R5,A                                   ;存和
  370. MOV    A,R6
  371. MOV    R4,A
  372. MOV    R3,3BH
  373. MOV    R3,3CH                                              ;取ei-l
  374. ACALL  CPL1                                    :求ej-1補碼
  375. ACALL  DSUM                                   ;計算ei=ei- 2-2e i-1、
  376. MOV    R5,37H                                 ;取D
  377. MOV    R4,38H
  378. MOV    R0,#46H
  379. ACALL  MULT1                                                ;求出Pd=D*(ei=ei-2-2ei-1)
  380. MOV    R5,47H
  381. MOV    R4,46H                                 :存Pd
  382. MOV    R3,4BH
  383. MOV    R2,4AH                                 ;取(pi+PP)
  384.                            ACALL  DSUM                                   ;計算pi+pp+pd
  385.                          MOV    R5,33H                                 ;取Kp
  386.                      MOV   R4,34H
  387.                          MOV   R0,#46H
  388.                          ACALL  MULTl                                   ;計算Kp*(Pi+Pp+Pd)
  389.                          MOV   R3,47H
  390.                          MOV    R2,46H
  391.                          MOV    R5,2FH                                 ;取ui-1
  392.                          MOV    R4,30H
  393.                          ACALL  DSUM                                    ;求出ui=ui-l+KP*(Pi+Pp +pd)
  394.                          MOV    2FH,R7                                  ;存ui~ui_,
  395.                          MOV    30H,R6
  396.                          MOV    3DH,3BH                                ;ei-l-ei-2
  397.                          MOV    3EH,3CH
  398.                          MOV    3BH,39H                                :ei-ei-1
  399.                          MOV    3CH,3AH
  400.                             RET
  401. DSUM: MOV   A,R4
  402.                                      ADD   A,R2
  403.                                      MOV   R6,A
  404.                                      MOV   A,R5
  405.                                      ADDC   A,R3
  406.                                      MOV    R7,A
  407.                                      RET
  408. CPLI: MOV    A,R2
  409.                                      CPL     A
  410.                                      ADD    A,#0lH
  411.                                      MOV    R2,A
  412.                                      MOV    A,R3
  413.                                      CPL     A
  414.                                     ADDC   A,#00H
  415.                                      MOV    R3,A
  416.                                      RET
  417. MULTI: MOV     A,R7
  418.                                     RLC     A
  419.                                      MOV     SIGN1,C                                ;存被乘數符號位
  420.                                      JNC      POS1                                    ;被乘數為正轉
  421.                                      MOV     A,R6                                  ;求補
  422.                                     CPL      A
  423.                                      ADD     A,#0lH
  424.                                      MOV     R6,A
  425.                                      MOV     A,R7
  426.                                     CPL      A
  427.                                      ADDC    A,#00H
  428.                                      MOV     R7,A
  429. POSI: MOV    A,R5
  430.                                     RLC     A
  431.                                      MOV    SIGN2,C                                :存乘數符號位
  432.                                      JNC     POS2                                     ;乘數為正轉
  433.                                      MOV    A,R4
  434.                                      CPL     A
  435.                                      ADD    A,#0lH
  436.                                      MOV    R4,A
  437.                                      MOV    A,R5
  438.                                      CPL     A
  439.                                      ADDC   A,#00H
  440.                                      MOV    R5,A
  441. POSZ: ACALL  MUL1,
  442.                                      MOV    C,SIGN1
  443.                                      ANL     C,SIGN2
  444.                                      JC      TPL                                       ;C=1是兩個負數相乘轉
  445.                                      MOV    C,SIGN1
  446.                                      ORL     C,SIGN2
  447.                                      JNC     TPL                                       ;C=0是兩個正數相乘轉
  448.                                     DEC    R0
  449.                                      DEC   R0
  450.                                      DEC   R0
  451.                                      MOV   A,@R0
  452.                                      CPL     A
  453.                                      ADD    A,#0lH
  454.                                     MOV    @R0,A
  455.                                      INC    R0
  456.                                      MOV     A,@RO
  457.                                      CPL      A
  458.                                      ADDC    A,#00H
  459. TPL: RET
  460. MULT: MOV    A,R6                                     ;取b
  461.                                     MOV    B,R4                                    ;取d
  462.                                     MUL    AB                                       ;求bd
  463.                                      MOV    @Ro,A                                  ;求bdL
  464.                                      MOV    R3, B                                   ;求bdL~R3
  465.                                      MOV    A, R4                                  ;取d
  466.                                      MOV    B,R7                                    ;取a
  467.                                      MUL    AB                                       ;求ad
  468.                                      ADD    A,R3                                   ;求adL+bdH
  469.                                      MOV    R3,A                                    ;暫存adL+bdH
  470.                                      MOV    A,B
  471.                                      ADDC   A,#00H                                  ;adH+進位
  472. MOV    R2, A                                   ;暫存
  473. MOV   A,R6                                     ;取b
  474. MOV    B,R5                                    ;取c
  475. MUL    AB                                       ;求bc
  476. ADD    A, R3                                   ;求adL+bcL+bdH
  477. INC    R0                                        ;修改指針
  478. MOV   @R0,A                                   ;乘積第三字節存入
  479. CLR    55BH                                     ;清標志
  480. MOV   A,R2
  481. ADDC  A,B                                     ;求adH+bcH
  482. MOV   R2,A
  483. JNC    LAST                                     ;無進位數
  484. SETB   5BH                                      ;置進位標志
  485. MOV   A,R7                                    ;取a
  486. MOV   B,R5                                    ;取c
  487. MUL  AB                                        ;求ac
  488. ADD   A,R2                                    ;求acL+adH+bcH
  489. INC R0
  490. MOV   @R0,A                                  ;存積的第二個字節
  491. MOV    A,B
  492. ADDC   A,#00H
  493. MOV   C,5BH
  494. ADDC  A,#00H
  495. INC    R0                                                     :修改指針
  496. MOV  @R0,A                                   ;存積的最高字節
  497. RET

  498. 顯示子程序:
  499. ORG 055CH
  500. MOV  R0,#79H
  501. MOV  @R0,#01H
  502. INC  R0
  503. MOV  @R0,#01H
  504. INC  R0
  505. MOV  R0,#05H
  506. INC  R0
  507. MOV  @R0,#16H
  508. INC  R0
  509. MOV  @R0,#1BH
  510. INC  R0
  511. MOV  @R0,#1EH
  512. MOV  DPTR,#4F00H
  513. ……………………
  514. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼

所有資料51hei提供下載:
自動加料機控制系統.doc (807 KB, 下載次數: 34)


評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 久久精品亚洲精品国产欧美 | av资源网站 | 狠狠av| 久久尤物免费一区二区三区 | 91色在线| 日韩视频一级 | 国产精品自拍一区 | 日皮视频免费 | 黄色毛片在线观看 | 久久久久久久久毛片 | 欧美一区在线视频 | 中文字幕91av | 性在线| 日韩在线观看网站 | 2021狠狠干 | 51ⅴ精品国产91久久久久久 | 欧美色综合天天久久综合精品 | 亚洲激情一区二区三区 | 日韩免费福利视频 | а天堂中文最新一区二区三区 | 久久精品色欧美aⅴ一区二区 | 日韩av高清在线 | 毛片视频观看 | 亚洲福利一区二区 | 日本天天操 | 国产99久久精品一区二区永久免费 | 精品欧美一区二区三区免费观看 | 99在线资源 | 亚洲不卡在线观看 | 国产日韩一区二区三区 | 91xxx在线观看 | 国产精品视频在线观看 | www.欧美| 91久久精品日日躁夜夜躁欧美 | a在线观看免费 | 91久久精品一区二区二区 | 亚洲午夜一区二区 | 视频在线一区二区 | 天天久久| 国产二区三区 | 日本激情一区二区 |