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

正文內(nèi)容

基于單片機的plc編譯程序設(shè)計研究畢業(yè)設(shè)計論文-資料下載頁

2025-07-27 02:49本頁面
  

【正文】 語句的識別、翻譯、生成目標代碼、裝配目標代碼的過程。依F i_仃(Mi)(3.3中定理1中的公式(3))裝配活動代碼的過程包括源程序語句的整句識別、源程序語句的類型識別(形成映射F i盯(Mi)的當(dāng)前序號j)、目標代碼裝配等過程。依F i盯(Mi)裝配活動代碼的程序流程如圖5.1所示。翻譯的時候,要將源程序語句從源程序文件中讀出來。因此,先要進行源程序語句的整句識別。這一過程中使用的方法和4.3中的方法類似。源程序語句的整句識別包括讀入源語句字符、源程序文件尾判斷、語句尾判斷、源語句字符送C這樣四部分組成。程序中,用ch=fgetc(fp)語句,從源程序文件中讀一個字符。用if(ch=一1)語句進行源程序文件尾判斷。用if(ch==’\xod’)語句進行語句尾判斷。用c[i1]=ch語句實現(xiàn)源語句字符送C數(shù)組操作。結(jié)果,讀出來的源程序語句存放在數(shù)組C中。 圖5.1Fi=( Mi )裝配活動代碼的程序流程5.2 源程序語句的類型識別翻譯的過程是依據(jù)源程序語句去得到目標代碼的過程。在3.3中,通過定理1,通過建立映射F i= (M i)的方法,建立了基于單片機的PLC源程序語句和目標代碼之間的關(guān)系。應(yīng)用了F i=(M i)的方法以后,可以省略生成中間代碼這一階段,直接得到目標代碼,使基于單片機的PLC編譯方法得到簡化。對某一個PLC源語句X,要找到對應(yīng)的F i,只需找到相應(yīng)的Mi即可。所以,任務(wù)就變成:根據(jù)PLC源程序語句,找到相應(yīng)的Mi。這一過程就是源程序語句的類型識別的過程。源程序語句的類型識別的程序如下:cmpe: for(j=l:j=16:){k=l:while(ki1)fif(m[j][k]!=c[k]){goto next7:}if(C[k]==’’){goto scdm;}k++:}next7: j++:}5.2.1 c[k]hh存放著當(dāng)前被翻譯的源程序語句在源程序語句的整句識別時,已經(jīng)通過C[i1]=ch語句實現(xiàn)源語句字符送C數(shù)組操作,并且做i1++操作。結(jié)果,C[k]中存放著當(dāng)前被翻譯的源程序語句。(k=1,2,3,?,i1)以源程序語句AND 58為例,其C數(shù)組為:C[1]=‘A’;C[2]=‘N’;C[3]=‘D’;C[4]=‘’;C[5]=‘5’;C[6]=‘8’;5.2.2 當(dāng)前源程序語句的類型識別當(dāng)前源程序語句的類型識別是通過M數(shù)組逐行搜索實現(xiàn)的。而M數(shù)組逐行搜索又是通過for(j=l:j=16:)和while(kil)這兩個語句結(jié)構(gòu),經(jīng)過if(m[j][k]!=c[k])條件判斷實現(xiàn)的。在C數(shù)組的‘’字符前的那些數(shù)組變量中,只要出現(xiàn)m[j][k]專c[k]情況,就說明在當(dāng)前M數(shù)組的行中沒有搜索到和C數(shù)組中源程序語句同類的。因此換行,實行j加1(做j++:操作),到M數(shù)組的下一行中繼續(xù)搜索。在連續(xù)幾次沒有換行,m[j][k]=c[k]成立的情況下,當(dāng)出現(xiàn)條件if(c[k]==一)滿足時(即發(fā)現(xiàn)空格字符時),便表明此時已經(jīng)核對關(guān)鍵詞相等。說明當(dāng)前源程序語句類型識別已經(jīng)完成。以源程序語句AND 58為例,其C數(shù)組為:C[1]=‘A’;C[2]=‘N’;C[3]=‘D’;C[4]=‘’;C[5]‘5’:C[6]=‘8’:對應(yīng)的M數(shù)組行為:mE3][1]=’A’:mE4][2]=’N’:m[33[3]=’D’;m[33[4]=’’:m[3][53=’\x06’:這時已經(jīng)找到了相應(yīng)的Mi。此時M數(shù)組行號用J表示(本例中,j=3)。j作為當(dāng)前源程序語句的類型識別的結(jié)果(形成映射F i.仃(Mi)的當(dāng)前序號j)。目標代碼裝配模塊用于實現(xiàn)依F i= (Mi)的活動代碼裝配過程。映射F i= (Mi)的裝配實現(xiàn)過程不是一個簡單的直接套用公式的過程,而是根據(jù)不同語句的映射關(guān)系采用不同程序結(jié)構(gòu)實現(xiàn)的過程,分為簡單活動代碼的裝配過程和復(fù)雜活動代碼的裝配過程兩種情況。5.3 簡單活動代碼的裝配在1.1中建立了基本邏輯指令A(yù)ND、ANI、OR、ORI、LD、LDI、OUT、STORE指令的單片機程序模塊,并且指出它們的單片機程序模塊只需12條單片機指令組成。這些目標代碼稱為簡單活動代碼。在活動代碼的裝配中都要用到一種字符轉(zhuǎn)化函數(shù)。下面先做定義。5.3.1 引用名(位地址)字符轉(zhuǎn)化函數(shù)cvt(x,y)的定義在源程序語句中的一些數(shù)字都是ASCII字符的形式。例如,源程序語句LD 75中的引用名(位地址)數(shù)字“7和“5都是ASCII字符的形式。但單片機目標代碼中需要的是十六進制形式’\x75’。為此,需要設(shè)計一個字符轉(zhuǎn)化函數(shù)cvt(x,Y),將ASCII字符轉(zhuǎn)化成十六進制數(shù)。該函數(shù)定義如下:int cvt(X,Y)char X,Y:{char Z,zh,zl:if((x=’\x30’)&amp。(x=’\x39’)){zh=x一’\x30’:goto nextlO:)if((x=’\x41’)&amp。(x=’\x46’)){zh=x一’\x37’:goto nextlO:)goto errorlO:nextlO: if((y=’\x30’)&&(y=’1x39’)){zl=y一’\x30’:goto nextl 1:}if((y=’\x41’)&&(y=’\x46’)){zl=y一’1x37’:goto nextll:)errorlO:printf(”pile error,in number%d statement,digit error.\n”,j1): z=’\xFF’:goto nextl2:nextll: zh=zh,’\x10’:z=zh+zl:nextl2: return(z):}在上例中,對ASCII字符“7和“5”,函數(shù)的返回值是’\x75’。若轉(zhuǎn)化出錯,函數(shù)的返回值是’\xFF’。5.3.2 實現(xiàn)映射F i=口(Mi)的第一種程序結(jié)構(gòu)從6.3.36.3.10,給出了第一種程序結(jié)構(gòu),實現(xiàn)映射F i_D(Mi),將基于單片機的PLC源程序翻譯成目標程序。5.3.3 LD語句的目標代碼裝配LD語句的目標代碼裝配程序如下:scdm: if(j==1){chl=’\xA2’:fputc(chl,fpl):chl=cvt(C[4],C[5]):if(chl==’\xFF’){goto next9:}fputc(chl,fpl):goto next8:)其中next9是出錯處理程序入口標號。goto next8是正常出口。對于LD語句,根據(jù)表2.1常用PLC邏輯指令的單片機程序模塊表可知,PLC邏輯指令為LD bit,目標程序代碼為A2,bit。用chl=’\xA2’和fputc(chl,fpl)兩條語句向目標文件中寫入代碼A2(fpl為目標文件指針變量);用chl=cvt(C[4],C[5])語句實現(xiàn)將C[4]和C[5]中的bit值轉(zhuǎn)化成十六進制數(shù)。再用fputc(chl,fpl)語句向目標文件中寫入該十六進制數(shù)。5.3.3 LDI語句的目標代碼裝配LDI語句的目標代碼裝配程序如下:if(j==2){chl=’\xA2’:fputc(chl,fpl):chl=cvt(C[5],C[6]):if(chl==’\xFF’){goto next9:)fputc(chl,fpl):chl=’\xb3’:fputc(chl,fpl):goto next8:}對于LDI語句,PLC邏輯指令為LDI bit,目標程序代碼為A2,bit,B3。用chl=’\xA2’和fputc(chl,fpl)兩條語句向目標文件中寫入代碼A2(fpl為目標文件指針變量);用chl=cvt(C[5],c[6])語句實現(xiàn)將C[5]和c[6]中的bit值轉(zhuǎn)化成十六進制數(shù)。再用fputc(chl,fpl)語句向目標文件中寫入該十六進制數(shù)。最后,再用chl=’\xb3’和fputc(chl,fpl)兩條語句向目標文件中寫入代碼B3。5.3.4 AND語句的目標代碼裝配AND語句的目標代碼裝配程序如下:if(j一3){chl=’\x82’:fputc(chl,fpl):chl=cvt(c[5],c[6]):if(chl==’\xFF’){goto next9:)fputc(chl,fpl):goto next8:)對于AND語句,PLC邏輯指令為AND bit,目標程序代碼為82,bit。用chl=’\x82’和fputc(chl,fpl)兩條語句向目標文件中寫入代碼82(fpl為目標文件指針變量);用chl=cvt(c[53,C[6])語句實現(xiàn)將C[5]和c[6]中的bit值轉(zhuǎn)化成十六進制數(shù)。再用fputc(chl,fpl)語句向目標文件中寫入該十六進制數(shù)。5.3.5 ANI語句的目標代碼裝配ANI語句的目標代碼裝配程序如下:if(j==4){chl=’\xB0’:fputc(chl,fpl):chl=cvt(c[5],C[6]):if(chl==’\xFF’){goto next9:)fputc(chl,fpl):goto next8:)對于ANI語句,PLC邏輯指令為ANI bit,目標程序代碼為B0,bit。用chl=’\xB0’和fputc(chl,fpl)兩條語句向目標文件中寫入代碼B0(fpl為目標文件指針變量);用chl=cvt(c[5],C[6])語句實現(xiàn)將C[5]和c[6]中的bit值轉(zhuǎn)化成十六進制數(shù)。再用fputc(chl,fpl)語句向目標文件中寫入該十六進制數(shù)。5.3.6 OR語句的目標代碼裝配OR語句的目標代碼裝配程序如下:if(j==5)fchl=’\x72’:fputc(chl,fpl):chl=cvt(C[4],C[5]):if(chl一’\xFF’){goto next9:】fputc(chl,fpl):goto next8:}對于0R語句,PLC邏輯指令為0R bit,目標程序代碼為72,bit。用chl=’\x72’和fputc(chl,fpl)兩條語句向目標文件中寫入代碼72(fpl為目標文件指針變量):用chl=cvt(c[4],c[5])語句實現(xiàn)將c[4]和c[5]中的bit值轉(zhuǎn)化成十六進制數(shù)。再用fputc(chl,fpl)語句向目標文件中寫入該十六進制數(shù)。5.3.7 ORI語句的目標代碼裝配ORI語句的目標代碼裝配程序如下:if(j==6){chl=’\xA0’:fputc(chl,fpl):chl=cvt(c[5],C[63):if(chl==’\xFF’)(goto next9:}fputc(chl,fpl):goto next8:}對于ORI語句,PLC邏輯指令為ORI bit,目標程序代碼為A0,bit。用chl=’\xA0’和fputc(chl,fpl)兩條語句向目標文件中寫入代碼AO(fpl為目標文件指針變量);用chl=cvt(c[5],c[6])語句實現(xiàn)將C[5]和C[6]中的bit值轉(zhuǎn)化成十六進制數(shù)。再用fputc(chl,fpl)語句向目標文件中寫入該十六進制數(shù)。5.3.8 STORE語句的目標代碼裝配STORE語句的目標代碼裝配程序如下:if(j==7){chl=’\x92’:fputc(chl,fpl):chl=cvt(C[7],C[8]):if(chl==’\xFF’){goto next9:)fputc(chl,fpl):goto next8:)對于STORE語句,PLC邏輯指令為STORE bit,目標程序代碼為92,bit。用chl=’\x92’和fputc(chl,fpl)兩條語句向目標文件中寫入代碼92(fpl為目標文件指針變量);用chl=cvt(c[7],C[8])語句實現(xiàn)將c[7]和c[8]中的bit值轉(zhuǎn)化成十六進制數(shù)。再用fputc(chl,fpl)語句向目標文件中寫入該十六進制數(shù)。5.3.9 OUT語句的目標代碼裝配OUT語句的目標代碼裝配程序如下:if(j==8){chl=’\xB3’:fputc(chl,fpl):chl=’\x92’:fputc(chl,fpl):chl=cvt(C[5],C[6]):if(chl==’\xW’){goto next9:)fputc(chl,fpl):goto next8:}對于OUT語句,PLC邏輯指令為OUT bit,目標程序代碼為B3,92,bit。用chl=’\xB3’和fputc(chl,fpl)以及chl=’\x92’和fputc(chl,fpl)語句向目標文件中分別寫入代碼B3和92(fpl為目標文件指針變量);用chl=cvt(c[5],C[6])語句實現(xiàn)將C[5]和c[6]中的bit值轉(zhuǎn)化成十六進制數(shù)。再用fputc(chl,fpl)語句向目標文件中寫入該十六進制數(shù)。5.4 復(fù)雜活動代碼的裝配及其盲碼的修正基于單片機的PLC的TIM,CNT,RST,PLS,DIN,SFT邏輯語句的單片機程序模塊較大,需十幾條或幾十條單片機指令組成。這些目標代碼稱為復(fù)雜活動代碼。5.4.0 實現(xiàn)映射F i= (Mi)的第二種程序結(jié)構(gòu)從5.4.15.4.7,給出了第二種程序結(jié)構(gòu),實現(xiàn)映射F i=(Mi),將基于單片機的PLC源程序翻譯成目標程序。5.4.1 TIM語句的目標代碼的裝配及其盲碼的修正TIM語句的目標代碼裝配程序由兩部分組成。第一部分:if(j==9){goto TIM:TIMret:goto next8:)第二部分:TIM:ti=cvt(C[5],C[6]);if(ti==’\xFF’){goto
點擊復(fù)制文檔內(nèi)容
環(huán)評公示相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1