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

正文內(nèi)容

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

2025-07-27 02:49本頁(yè)面
  

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