freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

plc單片機(jī)嵌入式系統(tǒng)畢業(yè)論文-閱讀頁

2025-07-04 14:28本頁面
  

【正文】 接定位器等工具,Windows集成編譯環(huán)境μVision等。另外,Keil C51還帶有嵌入式實(shí)時(shí)操作系統(tǒng)RTX51。為了完成下位機(jī)的軟件功能并保證系統(tǒng)的實(shí)時(shí)性和可靠性,采用基于嵌入式實(shí)時(shí)操作系統(tǒng)RTX51 Tiny的軟件設(shè)計(jì),并且用C51高級語言和MCS51匯編語言來編寫程序,從而可以引入多任務(wù)機(jī)制進(jìn)行管理。 基于RTX 51Tiny操作系統(tǒng)的微控制器軟件設(shè)計(jì)過程,就是把應(yīng)用軟件的功能按照一定的原則劃分為若干個(gè)任務(wù)模塊,并對各個(gè)任務(wù)間的通信和任務(wù)的時(shí)延進(jìn)行仔細(xì)的確認(rèn)。進(jìn)入運(yùn)行模式后,先讀取輸入端口的數(shù)據(jù)至輸入映像寄存器,然后依次讀取外部RAM中的指令,并對其進(jìn)行解碼,轉(zhuǎn)到對應(yīng)的解釋函數(shù),最后將輸入映像寄存器的數(shù)據(jù)寫到輸出端口。對每條指令都編寫一個(gè)對應(yīng)的C函數(shù),執(zhí)行該指令應(yīng)完成的功能。由于單片機(jī)經(jīng)常工作在干擾比較大的環(huán)境中,各種各樣的干擾可能使單片機(jī)不能執(zhí)行正常的程序。控制LCD和薄膜鍵盤的工作。用戶可通過薄膜鍵盤干預(yù)控制器的工作,如選擇工作模式等等。對每個(gè)獨(dú)立的硬件進(jìn)行操作的驅(qū)動程序段放在一個(gè)任務(wù)中。這樣做能夠避免嵌入式操作系統(tǒng)的特殊問題—資源沖突和重入問題,而且利于系統(tǒng)維護(hù)與升級[6]。任務(wù)0:系統(tǒng)初始化任務(wù)。啟動任務(wù)1~9,并最后刪除任務(wù)0。根據(jù)當(dāng)前工作模式,顯示人機(jī)操作界面或者各I/O端口狀態(tài)。任務(wù)2:喂狗任務(wù)。任務(wù)3:按鍵處理任務(wù)。任務(wù)4:串行口通信任務(wù)。等待觸發(fā)信號,若SIGNAL被置位,讀串口中的數(shù)據(jù),然后發(fā)信號給任務(wù)5,觸發(fā)存儲用戶程序任務(wù)。等待觸發(fā)信號,若SIGNAL被置位,將當(dāng)前讀取的PLC指令字節(jié)寫入外部RAM中。等待觸發(fā)信號,若SIGNAL被置位,將所有輸入端口的狀態(tài)讀入對應(yīng)的輸入映像寄存器。若輸入端口狀態(tài)與上一個(gè)掃描周期相比有變化,則發(fā)信號給任務(wù)1,觸發(fā)LCD顯示更新任務(wù)。等待觸發(fā)信號,若SIGNAL被置位,從起始地址開始讀取外部RAM中的數(shù)據(jù),直到遇到表示結(jié)束的字節(jié)為止。任務(wù)8:指令解釋任務(wù)。發(fā)信號給任務(wù)9,觸發(fā)寫輸出端口任務(wù)。等待觸發(fā)信號,若SIGNAL被置位,將輸出映像寄存器中的數(shù)據(jù)寫入相對應(yīng)的輸出端口。下位機(jī)軟件的程序結(jié)構(gòu)如圖51所示。多個(gè)任務(wù)分別在各自的時(shí)間片內(nèi)訪問CPU,從而產(chǎn)生了微觀上輪流運(yùn)行、宏觀上并行運(yùn)行的多任務(wù)效果,故程序結(jié)構(gòu)圖中顯示各任務(wù)是并行的關(guān)系。為此,系統(tǒng)往往把這些對象作為任務(wù)的軟件模塊來處理;另外,系統(tǒng)對實(shí)時(shí)的要求也比較高,用來快速響應(yīng)各種事件的處理。因此在系統(tǒng)要處理的對象比較多時(shí),常會加載RTOS來減少工作量并保證可靠性。RTX51是由德國Keil公司開發(fā)的,專門針對8051兼容MCU所作的多任務(wù)實(shí)時(shí)操作系統(tǒng),使復(fù)雜的系統(tǒng)和軟件設(shè)計(jì)以及有時(shí)間限制的工程開發(fā)變得簡單。可以使用標(biāo)準(zhǔn)C語言編寫RTX51應(yīng)用程序,并且用C51來編譯它們。RTX51 Tiny沒有優(yōu)先級之分,沒有郵箱機(jī)制,沒有動態(tài)內(nèi)存的管理。本節(jié)將介紹各任務(wù)的實(shí)現(xiàn),重點(diǎn)介紹其中與實(shí)現(xiàn)PLC功能相關(guān)的任務(wù)。PLC內(nèi)部有輸入過程映像寄存器(I)、輸出過程映像寄存器(Q)、變量存儲區(qū)(V)、位存儲區(qū)(M)等存儲區(qū)。由于本系統(tǒng)下位機(jī)軟件采用C語言編程,只需聲明一組全局變量與各存儲區(qū)的標(biāo)識符相對應(yīng),并將其初始化即可,C51編譯器為會自動為這些全局變量分配空間,大大減少了工作量??晌粚ぶ穮^(qū)標(biāo)準(zhǔn)8051單片機(jī)內(nèi)部都有至少16字節(jié)的空間可以以位為單位進(jìn)行尋址,本系統(tǒng)所使用的ADuC841單片機(jī)也不例外。在位定義中,允許定義存儲類型,位變量都被放入一個(gè)位段,此段總位于單片機(jī)內(nèi)部RAM中。這為定義PLC存儲區(qū)提供了很大的方便。 //定義3個(gè)字節(jié)即24個(gè)點(diǎn)的I存儲區(qū),位于可位尋址區(qū)中sbit I00=I[0]^0; // I存儲器中的第一個(gè)字節(jié)單元的第1位,一下類似sbit I01=I[0]^1;sbit I02=I[0]^2;sbit I03=I[0]^3;sbit I04=I[0]^4;sbit I05=I[0]^5;sbit I06=I[0]^6;sbit I07=I[0]^7;……這樣就定義了輸入過程映像存儲區(qū)中的第一個(gè)字節(jié),在程序中就可以用這些全局變量來表示對應(yīng)的PLC功能存儲區(qū)。data區(qū)data區(qū)指的是8051單片機(jī)內(nèi)部的數(shù)據(jù)存儲器區(qū),主要指片內(nèi)前128字節(jié)的內(nèi)部RAM。PLC中的變量存儲區(qū)(V)不需要進(jìn)行位尋址,但是也需要對這個(gè)存儲區(qū)的數(shù)據(jù)段進(jìn)行比較快的存取,故適合聲明在data區(qū)。于是V存儲區(qū)的可以用如下所示的代碼來聲明,它在使用時(shí)會自動在data區(qū)分配空間:char VB[64]。要按字或雙字進(jìn)行存取就要進(jìn)行強(qiáng)制類型轉(zhuǎn)換,比較繁瑣而且容易出錯(cuò)。聯(lián)合是可以(在不同時(shí)刻)保存不同類型和長度的對象的變量,編譯器負(fù)責(zé)跟蹤對象的長度和對齊要求。見下面的代碼:union u_tag{charB[64]。long int D[16]。這樣,就定義了可以在不同時(shí)間分別以字節(jié)、字或雙字進(jìn)行存取的V存儲區(qū)。這些寄存器包括控制寄存器、配置寄存器和數(shù)據(jù)寄存器,提供了CPU和所有片上外圍設(shè)備的接口。通過配置ADCCON13,單片機(jī)片上的ADC模塊將輸入的模擬量轉(zhuǎn)換結(jié)果存放在寄存器ADCDATAH和ADCDATAL中。因此可以說,寄存器ADCDATAH/L就是現(xiàn)成的AIW存儲區(qū)。0x0F)*256)+ADCDATAL)將ADCDATAH的低4位乘以256,再與ADCDATAL相加,即得到一個(gè)字的ADC轉(zhuǎn)換結(jié)果。單片機(jī)內(nèi)部的DAC模塊的輸出是通過寫寄存器DACxH/L(x代表0或1)來實(shí)現(xiàn)的,CPU會負(fù)責(zé)將DACxH/L寫到模擬輸出端口。在實(shí)現(xiàn)了以上這些PLC功能存儲區(qū)在單片機(jī)內(nèi)部RAM中的映射之后,要完成控制器的I/O掃描就非常簡單了。在讀寫顯示單元之前應(yīng)先讀狀態(tài)寄存器,確認(rèn)控制器當(dāng)前狀態(tài),以便指令和數(shù)據(jù)被正確地接受。在單片機(jī)一次讀、寫指令和數(shù)據(jù)時(shí),STA0和STA1要同時(shí)有效――處于“準(zhǔn)備好”狀態(tài)【7】。圖形方式下,T6963C還提供對位的操作,即通過命令使液晶屏上任一個(gè)點(diǎn)顯示或不顯示【3】。若選擇停止模式,則顯示開始或停止用戶程序下載的選擇界面;若選擇運(yùn)行模式,則顯示各I/O端口的狀態(tài)。要實(shí)現(xiàn)這個(gè)功能,方法是對每個(gè)時(shí)刻的當(dāng)前菜單用反色顯示,在有鍵按下時(shí),先取消當(dāng)前菜單的反顯,再根據(jù)按鍵信號將選中的菜單反顯。使用看門狗定時(shí)器后,如果在預(yù)定的時(shí)間內(nèi)沒有進(jìn)行“喂狗”操作,即對WDCON中的WDE位置1,看門狗定時(shí)器將使系統(tǒng)復(fù)位或產(chǎn)生中斷。 串口通信的方式選擇、接收和發(fā)送控制以及串口的狀態(tài)標(biāo)志均由專用寄存器SCON控制和指示。任務(wù)代碼如下: define UART 4 void UART(void)_task_UART { while(1){ os_wait(K_SIG,0,0)。 //清標(biāo)志位 cmd=SBUF。 } } 本系統(tǒng)對外部RAM的存取采用24位尋址,采用匯編語言編程對24位地址空間進(jìn)行尋址,則可以直接寫3個(gè)地址寄存器來對外部RAM進(jìn)行讀寫。本系統(tǒng)設(shè)計(jì)的鍵盤比較簡單,采用按鍵與單片機(jī)的某輸入端口一一對應(yīng)的接線方式,當(dāng)某個(gè)按鍵按下時(shí)該端口對應(yīng)的位被與地短接,輸入為0。按鍵處理任務(wù)的代碼如下: unsigned char KeyValue //按鍵的鍵值 define KEY 3 //按鍵處理任務(wù)的編號 void KEY(void)_task_KEY { while(1){ KeyValue=U1A。 //若切換到運(yùn)行模式,則給讀用戶程序任務(wù)發(fā)送信號 if(KeyValue==RUN)isr_send_signal(RUN_USR_CODE)。//每隔50ms掃描,sec根據(jù)實(shí)際晶振頻率及系統(tǒng)的INIT_CLOCK參數(shù)值決定 }} PLC指令解釋任務(wù)的實(shí)現(xiàn)在上位機(jī)軟件中,根據(jù)編碼規(guī)律對PLC指令表進(jìn)行了唯一的編碼并生成二進(jìn)制文件。根據(jù)不同指令的不同意義,進(jìn)行不同的操作,使指令表程序可以實(shí)現(xiàn)特定環(huán)境下的控制。然后從usr_code_ptr指針指向的地址開始讀取用戶程序。根據(jù)操作碼的含義和操作數(shù)的類型,可以判斷每個(gè)操作數(shù)需要讀幾個(gè)字節(jié)。這是一個(gè)“以空間換時(shí)間”的策略,因?yàn)楹瘮?shù)指針數(shù)組需要占用256字節(jié)。因此用這點(diǎn)空間換取程序效率的大大提高是非常值得的。堆棧中的數(shù)據(jù)一般按“先進(jìn)后出”的原則存取。Keil的庫函數(shù)_cror_和_crol_能分別實(shí)現(xiàn)字節(jié)的右移和左移,可以通過對字節(jié)的移位操作來模擬堆棧的入棧和出棧操作。后面幾節(jié)具體介紹常用PLC指令的解釋方法。常閉觸點(diǎn)對應(yīng)的存儲器地址位為0狀態(tài)時(shí),該觸點(diǎn)閉合,在PLC語句表中,分別用LDN(Load Not)、AN(And Not)和ON(Or Not)來表示開始、串聯(lián)和并聯(lián)的常閉觸點(diǎn),觸點(diǎn)符號中間的“/”表示常閉。見圖54。執(zhí)行A指令時(shí),同樣判斷其帶單操作數(shù),從下一個(gè)存儲單元中讀取操作數(shù)地址后將指令指定的位地址中的二進(jìn)制數(shù)據(jù)和棧頂status中的二進(jìn)制數(shù)據(jù)相“與”,結(jié)果存入棧頂status。執(zhí)行常閉觸點(diǎn)對應(yīng)的LCD、AN和ON指令時(shí),取出指令指定的位地址中的二進(jìn)制數(shù)據(jù)后,將它取反,然后再作對應(yīng)的裝載、與、或操作。本系統(tǒng)采用的與堆棧有關(guān)的指令有6個(gè),它們的意義及實(shí)現(xiàn)原理解釋如下:裝載或(OLD,Or Load)指令,用于將兩個(gè)電路塊并聯(lián)。裝載與(ALD,And Load)指令,用于將兩個(gè)電路塊串聯(lián)。邏輯入棧指令(Logic Push,LPS)。邏輯讀棧指令(Logic Read,LPR)。邏輯出棧指令(Logic Pop,LPP)。裝載堆棧指令(Load Stack,n=1~8,LDS n)。立即(Immediate)觸點(diǎn)指令只能用于輸入量I,執(zhí)行立即觸點(diǎn)指令時(shí),立即讀入物理輸入點(diǎn)的值,根據(jù)該值決定觸點(diǎn)的接通/斷開狀態(tài),但是并不更新該物理輸入點(diǎn)對應(yīng)的輸入過程映像寄存器。立即觸點(diǎn)指令用C語言實(shí)現(xiàn)比較簡單,只需在讀該觸點(diǎn)值時(shí)直接讀對應(yīng)的物理端口。正/負(fù)跳變指令的助記符分別為EU(Edge Up,上升沿)和ED(Edge Down,下降沿),它們沒有操作數(shù),觸點(diǎn)符號中間的“P”和“N”分別表示正跳變和負(fù)跳變。在每個(gè)掃描周期的末尾將各位元件的值賦給對應(yīng)的存儲變量,在下一個(gè)掃描周期中,若位元件的狀態(tài)發(fā)生變化,則通過與對應(yīng)的存儲變量的值進(jìn)行比較就可知道其是正跳變還是負(fù)跳變。若位元件為1,存儲變量為0,則為正跳變,EU被觸發(fā);若位元件為0,存儲變量為1,則為負(fù)跳變,ED被觸發(fā)。當(dāng)CPU掃描到輸出指令時(shí),解釋程序?qū)m斨祻?fù)制到對應(yīng)的映像寄存器。執(zhí)行置位指令或復(fù)位指令時(shí),從指定的位地址開始的N個(gè)連續(xù)的位地址都被置位(變?yōu)?)或復(fù)位(變?yōu)?),N=1~255。取反(NOT)觸點(diǎn)將存放在堆棧頂部的邏輯運(yùn)算結(jié)果取反,故其在下位機(jī)解釋程序中的實(shí)現(xiàn)只需將status位取反再存入status即可:status=~status。故其在下位機(jī)解釋程序中可以用空循環(huán)來實(shí)現(xiàn),先取下一個(gè)字節(jié)中的操作數(shù)N,然后執(zhí)行N次空循環(huán):char i。iN。PLC系統(tǒng)一般要三種不同時(shí)間間隔的定時(shí)器:1ms間隔定時(shí)器、10ms間隔定時(shí)器和100ms間隔定時(shí)器。然后要設(shè)計(jì)一個(gè)結(jié)構(gòu)體變量Timer來記錄定時(shí)器的狀態(tài)。由于本系統(tǒng)很少需要使用到精確到1ms的定時(shí),故只在總共16個(gè)定時(shí)器中設(shè)置一個(gè)為1ms定時(shí)器;100ms定時(shí)器用戶需要使用的最多,因此系統(tǒng)需要提供的也最多,設(shè)置其中10個(gè)為100ms定時(shí)器,剩余5個(gè)為10ms定時(shí)器。定時(shí)器的當(dāng)前值、設(shè)定值均為16位有符號整數(shù),允許最大值為32767。當(dāng)前值大于等于預(yù)置時(shí)間(Preset Time,PT)端指定的設(shè)定值時(shí),定時(shí)器位變?yōu)镺N,梯形圖中該定時(shí)器的常開觸點(diǎn)閉合,常閉觸點(diǎn)斷開。定時(shí)器指令的指令格式為:TON T0 E100在上述格式中,TO表示定時(shí)器的編號,可以根據(jù)該操作數(shù)找到定時(shí)器元件的變量。在上述指令中定時(shí)器的定時(shí)時(shí)間為100ms。彈出輸入值堆棧中的棧頂元素(該元素即為定時(shí)器的驅(qū)動元件),判斷該元素的值是否為l,如果是,定時(shí)器開始計(jì)時(shí),在到達(dá)時(shí)間基準(zhǔn)后,在定時(shí)器當(dāng)前值的基礎(chǔ)上加1。判斷當(dāng)前值是否等于預(yù)置值,如果相等,則定時(shí)器輸出值置l,如果不是,定時(shí)器輸出值置0。操作數(shù)K100表示計(jì)數(shù)器的預(yù)置值。當(dāng)解釋程序遇到計(jì)數(shù)器指令時(shí)(以CNT為例),解釋子程序需要完成如下操作:根據(jù)第一個(gè)操作數(shù)計(jì)算出當(dāng)前計(jì)數(shù)器的編號和變量存儲地址。如果不是,則計(jì)數(shù)器當(dāng)前值不變。否則置OFF。利用這個(gè)指針,程序才能正確地按順序執(zhí)行。當(dāng)CPU掃描到指令中有LBL時(shí),解釋程序先讀取下一個(gè)字節(jié)中LBL指令的操作數(shù),并為該操作數(shù)聲明一個(gè)對應(yīng)的全局變量。當(dāng)掃描到JMP指令時(shí),則從與指令操作數(shù)對應(yīng)的全局變量中取出跳轉(zhuǎn)地址,從該地址的下一個(gè)字節(jié)開始執(zhí)行。 下位機(jī)軟件的特色本系統(tǒng)的下位機(jī)軟件的特色就是使用專門的存儲區(qū)來存儲用戶程序本系統(tǒng)將上位機(jī)發(fā)送過來的用戶程序編碼存儲在外部數(shù)據(jù)RAM中,在執(zhí)行用戶程序時(shí)從該存儲區(qū)中讀取。(2)、便于訪問,方便PLC指令解釋程序的執(zhí)行。函數(shù)指針數(shù)組能高效地實(shí)現(xiàn)PLC指令的解釋。 本章小結(jié)本章主要介紹了系統(tǒng)的下位機(jī)部分的具體設(shè)計(jì)以及實(shí)現(xiàn)。后面分別介紹各任務(wù)的具體實(shí)現(xiàn)方法,重點(diǎn)介紹了指令表的解釋執(zhí)行原理以及各指令的解釋執(zhí)行方法和程序?qū)崿F(xiàn)所采取的方法。總 結(jié) 本課題的主要任務(wù)是開發(fā)出一個(gè)能模擬小型可編程控制器(PLC)功能的通用控制器。 本論文的主要工作包括以下幾個(gè)方面: 以ADuC841單片機(jī)作為核心控制芯片設(shè)計(jì)了控制
點(diǎn)擊復(fù)制文檔內(nèi)容
法律信息相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1