基于嵌入式芯片組的16路PLC的開發(fā)_第1頁
基于嵌入式芯片組的16路PLC的開發(fā)_第2頁
基于嵌入式芯片組的16路PLC的開發(fā)_第3頁
基于嵌入式芯片組的16路PLC的開發(fā)_第4頁
基于嵌入式芯片組的16路PLC的開發(fā)_第5頁
已閱讀5頁,還剩13頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、基于嵌入式芯片組的16路PLC的開發(fā)華中科技大學(xué) 孫兆沛內(nèi) 容 摘 要這里介紹了一種新型軟PLC嵌入式PLC的開發(fā)過程。它基于EASY CORE 嵌入式芯片組,通過軟件來實現(xiàn)所有傳統(tǒng)硬件PLC的控制功能,嵌入式PLC的硬件體系結(jié)構(gòu)不再封閉,用戶可以自己選擇合適的硬件組成滿足要求的PLC。本文介紹的是最基本的16路數(shù)字量輸入輸出通用PLC的開發(fā)。關(guān)鍵詞:嵌入式PLC芯片組 實時內(nèi)核 用戶驅(qū)動接口ABSTRACTHere introduces a new development of SoftPLCDevelopment of Embedded PLC. It is based on the Ea

2、sy Core embedded chipset,which achieves all the traditional hardware PLC control functions by software.The hardware system structure of embedded PLC is not closed.Users can choose the appropriate hardware to constitute the PLC that meet the requirements .This article describes the development of the

3、 most basic 16-channel digital input and output common PLC.KEY WORDS:Embedded PLC chipset Real-time kernel User-driven interfaces1、 前言如今工業(yè)控制產(chǎn)品已發(fā)展到一個追求個性化、差異化的階段。傳統(tǒng)的PLC產(chǎn)品已經(jīng)無法滿足更加細(xì)分化的市場需求,究其本質(zhì)原因,不是梯形圖語言,而是PLC的硬件不夠靈活。為了滿足這種需求,嵌入式PLC產(chǎn)品應(yīng)運(yùn)而生。它以PLC梯形圖語言為內(nèi)核,強(qiáng)化過程控制的運(yùn)算能力,提供開放式擴(kuò)展結(jié)構(gòu),增加網(wǎng)絡(luò)互連功能。它融合嵌入板的特殊要求,發(fā)揚(yáng)PLC梯形

4、圖語言優(yōu)勢,為特定對象控制問題的解決提供了一個通用開發(fā)平臺。2、 基本原理嵌入式PLC是將PLC系統(tǒng)軟件構(gòu)建于控制器內(nèi),根據(jù)用戶控制需要定制硬件,以PLC的應(yīng)用方式解決對象控制問題的PLC。它由兩部分組成:嵌入式PLC內(nèi)核和嵌入式PLC芯片組。2.1 嵌入式PLC系統(tǒng)軟件嵌入式PLC系統(tǒng)軟件以PLC梯形圖語言為內(nèi)核,強(qiáng)化過程控制的運(yùn)算能力,提供開放式擴(kuò)展結(jié)構(gòu),增加網(wǎng)絡(luò)互連功能。它融合嵌入板的特殊要求,發(fā)揚(yáng)PLC梯形圖語言優(yōu)勢,為特定對象控制問題的解決提供了一個通用開發(fā)平臺。該系統(tǒng)軟件具有以下特點(diǎn):1.以梯形圖語言為內(nèi)核,添加了中斷管理系統(tǒng),能實現(xiàn)PLC無法實現(xiàn)的硬實時操作;2.強(qiáng)化運(yùn)算能力,增

5、加了CANBUS函數(shù)庫、浮點(diǎn)數(shù)庫、專家自整定PID、嵌入式WEB等,豐富了PLC的功能;3.提供開放式擴(kuò)展結(jié)構(gòu),支持第三方開發(fā)擴(kuò)展單元的接線;4.增加了網(wǎng)絡(luò)互連功能,在遠(yuǎn)程端加載專用瀏覽器后,即可實現(xiàn)遠(yuǎn)程監(jiān)控。系統(tǒng)軟件包括三個部分。2.1.1 嵌入式PLC內(nèi)核它完成實時任務(wù)調(diào)度、梯形圖語言解釋、執(zhí)行、通訊等基本功能,并提供二次開發(fā)驅(qū)動接口;2.1.2 二次開發(fā)驅(qū)動程序通過系統(tǒng)軟件提供的外掛任務(wù),使用內(nèi)核開發(fā)各種面向具體對象個性化、差異化的驅(qū)動程序;用戶驅(qū)動接口是為滿足用戶DI/DO、AI/AO處理及用戶專用功能(如高速對象)設(shè)計而準(zhǔn)備的用戶程序嵌入接口,包括七個基本嵌入接口及多個中斷入口。七個

6、基本嵌入接口如下:1、 用戶I/O口配置程序:根據(jù)設(shè)計的輸入輸出功能配置相應(yīng)的端口,用戶不可配置的I/O口資源為P4.4、P4.5、P4.6、P4.7、P5、P6、P7及UART0。內(nèi)核程序中已對串口1和CAN口(有CAN時)配置,內(nèi)核中串口1配置為OC輸出,當(dāng)需要SPI功能或配置串口1為電平輸出方式時,必須對串口1重新配置,此程序在內(nèi)核重新上電后調(diào)用一次。2、 用戶上電初始化程序:用戶嵌入程序中用到的輸入輸出變量,中間變量,指針變量,位變量等以及IO、AD、DA,定時、計數(shù),SPI,SMBUS,高速計數(shù),高速輸出,外部中斷等外設(shè)功能在重新上電后必需進(jìn)行初始化處理,此程序在內(nèi)核重新上電后調(diào)用一

7、次。3、 用戶運(yùn)行初始化程序:內(nèi)核重新上電后第一次運(yùn)行梯型圖或內(nèi)核從下載梯型圖狀態(tài)進(jìn)入梯型圖運(yùn)行狀態(tài)時調(diào)用此程序一次,此程序必須使用戶嵌入程序中用到的變量及CPU(C8051F040/020/120)外設(shè)處于所需要的狀態(tài)。4、 用戶設(shè)置初始化程序:內(nèi)核重新上電后進(jìn)入梯型圖下載狀態(tài)或內(nèi)核從梯型圖運(yùn)型狀態(tài)進(jìn)入梯型圖下載狀態(tài)時調(diào)用此程序一次,此程序必須使用戶嵌入程序中用到的CPU(C8051F040/020/120)外設(shè)處于所需要的狀態(tài)。5、 用戶每步執(zhí)行程序:梯形圖每執(zhí)行一步,即調(diào)用此程序一次。需要快速執(zhí)行的事件可在此程序或用戶中斷程序中完成,內(nèi)核周期性地調(diào)用此程序。6、 用戶0.5mS定時運(yùn)行程

8、序:需要定時采樣的流程可放在此程序中完成,但該段程序代碼執(zhí)行時間必須小于50 US。數(shù)據(jù)處理程序不宜放在此段程序中執(zhí)行。7、 用戶演算周期掃描程序:所有梯形圖執(zhí)行完后,即調(diào)用該程序,調(diào)用周期為梯型圖演算周期,一般的數(shù)據(jù)處理、開關(guān)量輸入/輸出的刷新及代碼執(zhí)行時間較長的程序均放在此程序中執(zhí)行。 中斷入口:EASYV1.00中斷包括系統(tǒng)中斷及用戶中斷。其中系統(tǒng)中斷是用戶不可干預(yù)的,用戶中斷則是用戶通過中斷完成與系統(tǒng)實時上異步的各類事件處理。USER-CONFIG、USER-START、USER-SET-INIT、USER-RUN-INIT為四個非實時部分嵌入的程序,而USER-STEP、USER-S

9、CAN、USER-TMS則直接影響系統(tǒng)的實時性,用戶另行嵌入的中斷在異步狀態(tài)下占用CPU時間,其調(diào)度上建議如下:USER_STEP:處理100us級軟實時任務(wù)USER_SCAN:處理I/O、AI/AOUSER_TMS:處理硬實時任務(wù),程序占用時間應(yīng)小于40us用戶中斷:每1ms小于100us。當(dāng)大于500us時,有可能產(chǎn)生系統(tǒng)崩潰2.1.3 終端應(yīng)用程序指面向工藝流程控制的梯形圖語言程序。2.2 嵌入式PLC芯片組EASY CORE 1.00 是一個加載了嵌入式PLC系統(tǒng)軟件的核心芯片組,作為一款加載了系統(tǒng)軟件的硬件平臺,可以用來設(shè)計通用和專用PLC。2.2.1芯片組基本性能:供電:+5V 2

10、00mA,RAM掉電保護(hù)5年。CPU: C8051F040。嵌入擴(kuò)展能力32 I/O:可復(fù)用成SPI、I2C接口及外中斷、外計數(shù)、AD等。4 AD:12位精度,100 KPS。2 DA:12位精度,100 KPS。通信接口CANBUS:系統(tǒng)軟件管理,使用工具軟件CANSet構(gòu)建CANBUS總線網(wǎng)絡(luò)。UART0:系統(tǒng)軟件管理,用于梯形圖編程、監(jiān)控,支持人機(jī)界面及用戶驅(qū)動程序下載。UART1:系統(tǒng)軟件管理,用于下載CANBUS網(wǎng)絡(luò)參數(shù)、構(gòu)建RS485網(wǎng)絡(luò)及支持第三方設(shè)備互連。2.2.2芯片組原理框圖:3、 應(yīng)用開發(fā)基于嵌入式芯片組的PLC開發(fā)的主體思路是:對所要開發(fā)的PLC進(jìn)行需求分析;根據(jù)需求設(shè)

11、計搭載外部硬件電路;根據(jù)要實現(xiàn)的PLC的功能及設(shè)計好的硬件,在內(nèi)核提供的七個嵌入程序接口及用戶中斷程序中寫入驅(qū)動程序;設(shè)計測試梯形圖,寫入PLC并運(yùn)行,進(jìn)行PLC功能實現(xiàn)的調(diào)試。3.1 需求分析這里要設(shè)計的是最基本的16路數(shù)字量通用PLC,要求:8個開關(guān)量輸入通道,其中有兩路可以用作高速計數(shù)通道。8個開關(guān)量輸出通道。16個LED燈顯示輸入輸出狀態(tài),兩個LED燈顯示PLC運(yùn)行狀態(tài)。高速單相計數(shù)功能3.2 硬件設(shè)計這里借用了科威公司出產(chǎn)的LP-08M08R-Z嵌入式PLC的硬件電路。根據(jù)需求分析,硬件部分主要是要用到輸入輸出接口電路和LED燈顯示電路兩部分。現(xiàn)分析這部分電路。3.2.1 開關(guān)量輸入

12、接口電路兩路高速輸入六路普通輸入兩路高速輸入:采用6N173光耦合器并添加相應(yīng)的外圍電路。X0為信號輸入引腳,在P0.6X引腳輸出3.3V(高電平),0V(低電平)。六路普通輸入:采用TLP421普通數(shù)字型光耦合器,適用于一般信號隔離場合的中低速普通輸入。X2為信號輸入引腳,AX2輸出。3.2.2 開關(guān)量輸出驅(qū)動電路六路達(dá)林頓反向驅(qū)動器三極管驅(qū)動電路使用ULN2003驅(qū)動芯片(包含六路達(dá)林頓反向驅(qū)動器)或三極管將單片機(jī)的輸出電平3.3V驅(qū)動為12V以適應(yīng)外圍電路(繼電器),并起到隔離的作用。3.2.3 LED燈顯示電路RUN燈,ERR燈,低電平使能。八路輸入LED燈和八路輸出LED燈復(fù)用八路控

13、制通道,控制端采用三極管開關(guān)。另有兩路三極管開關(guān)作為輸入LED燈和輸出LED燈的使能信號,來實現(xiàn)輸入輸出燈的交替控制。采用這樣的方式可以有效縮減IO中間信號處理電路的規(guī)模。3.2.4 中間信號處理電路中間信號處理電路將外部的輸入輸出接口和LED燈顯示電路連接到芯片組IO口上,并通過邏輯電路實現(xiàn)對芯片組IO口的復(fù)用,最大程度節(jié)省芯片組IO口資源。如電路圖所示,主要使用了一個雙向緩沖器74HC245,來控制P2口總的輸入輸出復(fù)用;一個單向緩沖器74HC244,來控制六路普通開關(guān)量輸入通道的輸入(另兩路為高速計數(shù)通道,另接專用IO口P0.6,P0.7);兩個八路鎖存器,分別控制八路輸出通道的輸出和L

14、ED燈顯示的驅(qū)動。下面來具體分析工作過程。中間信號處理電路輸入信號處理過程信號從光耦輸入端輸入到單片機(jī)內(nèi)部之前,先送入74HC244緩沖器,起信號緩沖隔離的作用。但是由于IO口的復(fù)用,輸入之前要先拉低雙向緩沖器74HC245的DIR端(P3.6),使它工作在輸入方向信號傳遞,然后拉低74HC244的低有效使能端(P3.5),開通輸入通路。之后就可以進(jìn)行輸入信號的讀取了。完成之后置高使能位,關(guān)閉緩沖器通路,單片機(jī)P2口就可以進(jìn)行其他輸入輸出工作了。(注意:輸入通路開通前要保證另兩個鎖存器處在鎖存狀態(tài),否則會引起輸出狀態(tài)和LED燈的變化,鎖存器的鎖存在輸出過程時就要完成。)高速計數(shù)通道X0,X1單

15、獨(dú)連接單片機(jī)P0.6,P0.7口,可以直接讀取。輸出信號處理過程信號從單片機(jī)內(nèi)部輸出之前,首先要關(guān)閉輸入通道的使能,即拉高74HC244使能端(P3.5),然后拉高雙向緩沖器74HC245的DIR端(P3.6),使它工作在信號輸出傳遞方向。向P2端口寫入數(shù)據(jù)后置高74HC573的鎖存使能端(即拉低P1.6),開通通路,信號就輸入到鎖存器中。等待三個機(jī)器周期后,拉低鎖存使能端(置高P1.6),將本次的輸出信號鎖存。這時,單片機(jī)端口P2就重新解放出來,可以進(jìn)行其他輸入輸出通道工作了。通過這樣的輸入緩沖,輸出鎖存方式,可以有效將各輸入輸出信號隔離起來,分別導(dǎo)通,達(dá)到對單片機(jī)P2口的復(fù)用,節(jié)省了單片機(jī)

16、的IO負(fù)擔(dān),優(yōu)化了電路和PCB設(shè)計。3.3 軟件設(shè)計PLC指令的解釋、與上位機(jī)的通信等核心功能已由EASYCORE內(nèi)核完成,用戶程序只要根據(jù)接口規(guī)范,結(jié)合用戶設(shè)計要求,編制少量的接口驅(qū)動程序。3.3.1 驅(qū)動程序的功能和規(guī)劃驅(qū)動程序要完成三個功能:PLC開關(guān)量輸入輸出口的驅(qū)動輸入驅(qū)動程序:對輸入口進(jìn)行八次采樣,并進(jìn)行比較是否相同,進(jìn)而判斷是否作為一次有效的輸入值。每個掃描周期將輸入值寫入PLC資源區(qū)一次。輸出驅(qū)動程序:每個掃描周期從PLC資源區(qū)讀出一次輸出量,并寫入輸出口。LED指示燈的驅(qū)動從PLC資源區(qū)讀出輸入輸出值,并周期性寫到LED燈驅(qū)動端口來保持LED燈的刷新,輸入燈輸出燈交替賦值刷新

17、。高速單向計數(shù)功能的驅(qū)動利用C8051F020內(nèi)部的PCA的捕捉模塊,捕捉高速脈沖的上升沿,在PCA中斷中進(jìn)行加一計數(shù)操作,并寫入數(shù)據(jù)寄存器中。3.3.2 驅(qū)動程序的實現(xiàn)和嵌入驅(qū)動程序的嵌入接口包括:INIT_CONFIG:用戶I/O配置程序入口INIT_START:用戶上電初始化程序入口INIT_RUN:用戶運(yùn)行初始化程序入口INIT_SET:用戶設(shè)置初始化程序入口STEP:用戶軟中斷程序入口(響應(yīng)時間<100us) TMS:用戶2.5ms定時運(yùn)行程序入口SCAN:用戶演算周期掃描程序入口以及要用到的PCA用戶中斷程序入口端口初始化:這里將單片機(jī)的所有控制端口P1.6 , P1.7 ,

18、 P3.0 , P3.3 , P3.4 , P3.5 , P3.6和專用輸出端口P4.0 , P4.1配置為推挽輸出。將輸入輸出復(fù)用的P2口初始化為數(shù)字輸入口(后面將根據(jù)P2的工作通道重新配置)。配置交叉開關(guān),將高速計數(shù)輸入端口P0.6 , P0.7分配給PCA0模塊的CEX0,CEX1。INIT_CONFIG:ORL P1MDOUT,#0C0H ;初始化為推挽輸出ORL P3MDOUT,#79H ORL P74OUT,#03H MOV P2MDOUT,#00H ;初始化P2口為數(shù)字輸入MOV P2,#0FFHMOV P0MDOUT,#00H;初始化交叉開關(guān),配置P0.6 P0.7為高速計數(shù)M

19、OV P0,#0FFHMOV XBR0,#15HORL XBR2,#40HRET復(fù)位初始化:PLC上電時執(zhí)行一次,由于PLC通常情況下不斷電,而是在運(yùn)行和編程狀態(tài)間轉(zhuǎn)換,所以初始化的部分都寫在運(yùn)行初始化和編程初始化程序接口中。INIT_START:RET運(yùn)行初始化:梯形圖第一次運(yùn)行時執(zhí)行一次,這里將輸出端口和LED驅(qū)動電路的使能端開通,并初始化PCA0的捕捉模塊,開通PCA中斷。然后調(diào)用一次輸入輸出的刷新作為梯形圖第一次掃描的數(shù)據(jù)。INIT_RUN:CLR P1.7 ;輸出端口和LED使能MOV PCA0CN,00H ;PCA0捕捉模塊初始化MOV PCA0CPM0,21H ;開中斷,捕捉上升

20、沿MOV PCA0CPM1,21HORL EIE1,#08HLCALLSCAN ;進(jìn)行一次輸入輸出刷新RET編程初始化:這里把所有運(yùn)行過程中要用到的變量都初始化:輸入采樣次數(shù)8次,輸入輸出燈刷新標(biāo)志,高速計數(shù)的數(shù)據(jù)寄存器,PLC資源區(qū)的X0X7,Y0Y7,輸入輸出LED燈的值。并且關(guān)閉PCA中斷,禁止高速計數(shù)運(yùn)行。INIT_SET:MOVINPUT_CNT,#08H;輸入采樣次數(shù)初始化SETB FLAG0;輸入輸出燈刷新標(biāo)志位MOV A,#00HMOV DPTR,#RAM_PD;高速計數(shù)器初始化MOVX DPTR,AINC DPTRMOVX DPTR,AINC DPTRMOVX DPTR,AI

21、NC DPTRMOVX DPTR,AMOV DPTR,#RAM_PD+4MOVX DPTR,AINC DPTRMOVX DPTR,AINC DPTRMOVX DPTR,AINC DPTRMOVX DPTR,AMOVDPTR,#RAM_PX+1;輸入輸出初始化MOVXDPTR,AMOVDPTR,#RAM_PY+1MOVXDPTR,AMOV INPUT_LED,#0FFH;LED燈賦值初始化MOV OUTPUT_LED,#0FFHANL EIE1,#0F7H;PCA0捕捉模塊關(guān)中斷 MOV PCA0CN,00HRET指令周期掃描:梯形圖每執(zhí)行一步,調(diào)用此程序一次。需要快速執(zhí)行的事件可在此程序或完成

22、。不需要。STEP:RET2.5ms周期掃描:程序每隔2.5ms執(zhí)行一次,不斷重復(fù)執(zhí)行。這里可以完成輸入的采樣工作和LED燈的刷新工作。LED燈刷新:由于輸入燈和輸出燈共用八路P2口作為驅(qū)動,所以不能同時刷新,而采用交替刷新的方式,設(shè)置標(biāo)志位FLAG0來判斷是輸入燈還是輸出燈的刷新。具體刷新的實現(xiàn):設(shè)P2口為推挽輸出,寫P3.5 P3.6口來開通輸出通路,判斷FLAG0進(jìn)入相應(yīng)賦值程序,將存好的LED值INPUT_LED或OUTPUT_LED讀出并寫入P2口,寫P3.0口開鎖存器通路,等待三個指令周期后鎖存。最后取反FLAG0供下次判斷使用。燈RUN ERR直接賦值刷新。輸入采樣:設(shè)置一個計數(shù)

23、字INPUT_CNT,記錄采樣的次數(shù),每次的采樣值存入連續(xù)地址,地址通過計數(shù)字INPUT_CNT和首地址計算得來,采樣八次之后就不再采樣,這意味著每個掃描周期只進(jìn)行這一個八次采樣,這樣既可以有效濾波,又可以減輕內(nèi)核負(fù)擔(dān)。每次的采樣都要先配置P2口為數(shù)字輸入模式,寫P3.5 P3.6口來開通輸入通路,然后讀入P2口的值,并把高速通道的P0.6 P0.7的值一并讀入存儲到相應(yīng)地址。這里只進(jìn)行采樣工作,而八個采樣結(jié)果將在掃描周期函數(shù)中進(jìn)行運(yùn)算和判斷,進(jìn)而產(chǎn)生一次有效的輸入值。TMS:MOVC,KEY_SET;燈RUN ERR的刷新CPL C MOVACC.1,CMOVC,PLC_PRO_ERRMOV

24、ACC.0,CMOV P4,AMOV P2MDOUT,#0FFH;P2口設(shè)置為推挽輸出ORL P3,#60H;SETB P3.5SETB P3.6開輸出通路JB FLAG0,USER_TMS_OUTLEDUSER_TMS_INLED: MOV P2,INPUT_LED ;輸入燈刷新CLR P3.3;關(guān)輸出燈使能 SETB P3.4 SETB P3.0NOPNOPNOPCLR P3.0 ;鎖存器鎖存SJMP USER_TMS_SUSER_TMS_OUTLED:MOV P2,OUTPUT_LED;輸出燈刷新CLR P3.4 ;關(guān)輸入燈使能SETB P3.3 SETB P3.0NOPNOPNOPCL

25、R P3.0 ; 鎖存器鎖存USER_TMS_S:CPL FLAG0MOVA,INPUT_CNT ;輸入口八次采樣JZUSER_TMS_S1 ;若八次采樣完成就跳轉(zhuǎn)DECAMOVDPTR,#XINPUT ;計算采樣值儲存地址ADDA,DPLMOVDPL,AMOVA,DPHADDCA,#00HMOVDPH,AMOV P2MDOUT,#00H ;P2口設(shè)為數(shù)字輸入MOV P2,#0FFHANL P3,#9FH ;開輸入通路MOVA,P2 ;輸入采樣MOV C,P0.6MOV ACC.7,CMOV C,P0.7MOV ACC.6,CMOVX DPTR,ASETB P3.5;關(guān)閉輸入緩沖器DECINP

26、UT_CNT USER_TMS_S1:RET用戶掃描周期執(zhí)行程序:每個掃描周期結(jié)束時執(zhí)行一次。傳統(tǒng)PLC的集中輸入采樣集中輸出刷新在這里進(jìn)行實現(xiàn)。并進(jìn)行LED燈的賦值。輸出刷新:從PLC資源區(qū)RAM_PY+1讀Y0Y7的值,經(jīng)解碼(這是由于硬件連接順序和內(nèi)部存儲順序不同)后賦給存儲輸出LED燈值的變量OUTPUT_LED。配置P2口為推挽輸出,開輸出通路,將值寫入P2口,開鎖存器通路,延遲一段時間,鎖存。輸入刷新:將本個掃描周期的八個采樣值取出進(jìn)行比較,不夠八次采樣或八次采樣值不相同則不進(jìn)行本次輸入刷新,保持之前的輸入值。如果合格,就作為一次有效的輸入值,刷新到PLC資源區(qū)RAM_PX+1和賦

27、值到輸入燈值變量INPUT_LED(注意要結(jié)合硬件的連接順序進(jìn)行解碼)。SCAN:MOVDPTR,#RAM_PY+1;Y00-Y07MOVXA,DPTR ;對輸出LED的賦值 OUTPUT_LEDLCALLUSER_SCAN_CHGMOV OUTPUT_LED,AMOVXA,DPTR;刷新輸出 MOVC,ACC.7;調(diào)整輸出位SWAP ARLC ARLC ARLC ARLC ARLC ASWAP AMOV P2MDOUT,#0FFH;P2口設(shè)置為推挽輸出ORL P3,#60H ;開輸出通路MOV P2,ACLR P1.6NOPNOPNOPSETB P1.6LCALL USER_SCAN_I M

28、OVDPTR,#RAM_PX+1;X00-X07MOVA,INPUT_PORTAMOVXDPTR,A;更新X00-X07LCALLUSER_SCAN_CHG;對輸入LED的賦值 INPUT_LEDMOV INPUT_LED,ARETUSER_SCAN_CHG:MOVC,ACC.7;LED賦值調(diào)整MOVF0,C MOVC,ACC.6MOVACC.7,CMOVC,F0MOVACC.6,CMOVC,ACC.5MOVF0,CMOVC,ACC.4MOVACC.5,CMOVC,F0MOVACC.4,CMOVC,ACC.3MOVF0,CMOVC,ACC.2MOVACC.3,CMOVC,F0MOVACC.2,

29、CMOVC,ACC.1MOVF0,CMOVC,ACC.0MOVACC.1,CMOVC,F0MOVACC.0,CCPL ARETUSER_SCAN_I:MOVA,INPUT_CNTJZUSER_SCAN_I1RET USER_SCAN_I1:LCALLUSER_SCAN_IS;八次采樣結(jié)束,判斷是否有效JBF0,USER_SCAN_I2;有效則更新輸入數(shù)據(jù)寄存器MOVC,ACC.7;調(diào)整輸入口MOVF0,CMOVC,ACC.0MOVACC.7,CMOVC,F0MOVACC.0,CMOVC,ACC.6MOVF0,CMOVC,ACC.1MOVACC.6,CMOVC,F0MOVACC.1,CMOVC,

30、ACC.5MOVF0,CMOVC,ACC.2MOVACC.5,CMOVC,F0MOVACC.2,CMOVC,ACC.4MOVF0,CMOVC,ACC.3MOVACC.4,CMOVC,F0MOVACC.3,CMOVINPUT_PORTA,AUSER_SCAN_I2:MOVINPUT_CNT,#08H ;重新賦計數(shù)值RET;判斷8個采樣數(shù)據(jù)是否相同,相同則F0=0USER_SCAN_IS:MOVDPTR,#XINPUT MOVXA,DPTRMOVM0,AMOVR7,#7USER_SCAN_IS1:INCDPTRMOVXA,DPTRCJNEA,M0,USER_SCAN_IS2DJNZR7,USER_

31、SCAN_IS1CLRF0RETUSER_SCAN_IS2:SETBF0RET用戶中斷程序:PCA模塊的用戶中斷程序,用來實現(xiàn)高速單相計數(shù)功能。由于用戶中斷發(fā)生的隨機(jī)性,所以進(jìn)中斷要進(jìn)棧保護(hù)重要寄存器,以免內(nèi)核出現(xiàn)未知錯誤。當(dāng)PCA0捕捉模塊在P0.6或P0.7口捕捉到上升沿時,進(jìn)入中斷。在中段程序中通過檢查寄存器 PCA0CN的0,1位來判斷是哪個口發(fā)生的中斷請求,然后將該口對應(yīng)的數(shù)據(jù)寄存器的值進(jìn)行加一操作,注意雙字的加1對字節(jié)的操作順序。然后清中斷標(biāo)志位,恢復(fù)現(xiàn)場即可出中斷等待下一次中斷的發(fā)生。PCA :PUSH ACCPUSH PSWPUSH DPLPUSH DPH;現(xiàn)場保護(hù)USER_P

32、CA_CPM0:JNB PCA0CN.0,USER_PCA_CPM1 ;判斷是哪個口的中斷響應(yīng) LCALL USER_PCA_ADD0USER_PCA_CPM1:JNB PCA0CN.1,USER_PCA_RET LCALL USER_PCA_ADD1USER_PCA_RET: MOV PCA0CN ,#00H ;清中斷標(biāo)志POP DPHPOP DPLPOP PSW ;現(xiàn)場恢復(fù)POP ACC RETIUSER_PCA_ADD0:CLR CMOV DPTR,#RAM_PD+1 ;數(shù)據(jù)寄存器D0D1雙字地址MOVX A,DPTRADD A,#01HMOVX DPTR,AMOV DPTR,#RAM_

33、PDMOVX A,DPTRADDC A,#00HMOVX DPTR,AMOV DPTR,#RAM_PD+3MOVX A,DPTRADDC A,#00HMOVX DPTR,AMOV DPTR,#RAM_PD+2MOVX A,DPTRADDC A,#00HMOVX DPTR,ARETUSER_PCA_ADD1:CLR CMOV DPTR,#RAM_PD+4+1 ;數(shù)據(jù)寄存器D2D3雙字地址MOVX A,DPTRADD A,#01HMOVX DPTR,AMOV DPTR,#RAM_PD+4MOVX A,DPTRADDC A,#00HMOVX DPTR,AMOV DPTR,#RAM_PD+4+3MOV

34、X A,DPTRADDC A,#00HMOVX DPTR,AMOV DPTR,#RAM_PD+4+2MOVX A,DPTRADDC A,#00HMOVX DPTR,ARET3.2.3 驅(qū)動程序的調(diào)試下載空梯形圖進(jìn)入PLC,調(diào)試PLC的輸入采樣驅(qū)動程序和輸入指示燈驅(qū)動程序。首先發(fā)現(xiàn)RUN燈,ERR燈工作不正常,輸入指示燈未工作,輸入采樣情況不得而知。錯誤原因是對RUN和ERR燈的賦值沒有根據(jù)硬件電路而取反,對LED燈沒有交替刷新且沒有鎖存。改正程序后繼續(xù)調(diào)試,觀察到RUN燈,ERR燈,輸入指示燈正常工作,輸入指示燈隨著輸入的變化而變化,說明輸入采樣驅(qū)動程序正確工作。下載測試梯形圖1,調(diào)試PLC的指示燈驅(qū)動程序

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論