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

正文內(nèi)容

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

2025-06-30 20:35本頁面

【導(dǎo)讀】專業(yè)年級:電氣工程及其自動化

  

【正文】 ,實(shí)現(xiàn)了用 b數(shù)組記錄一個文件名和源程序文件名相同,但擴(kuò)展名和源程序文件名不同的列表文件名,該列表文件名的擴(kuò)展名為. 1st。 3. 1. 2 列表文件 (. 1st)的建立 下面的程序,先用 fopen,以 rb的方式打開源程序文件。再用 fopen語句,以 wb 的方式,利用 fopen語句以 wb的方式工作的一個特性 :如果原來不存在該文件,則在 打開時新建一個以指定名字命名的文件,從而建立列表文件。 if((fp=fopen(a,” rb” ))==0) {printf(” cannot open file% s!\ n”, a): exit(0): } i f((fpl=fopen(b,” wb” ))==0) {printf(” cannot open or create file% s, disk error.\ n”,b): exit(0): } 經(jīng)過上面的程序以后,列表文件便已建立。并且源程序文件和列表文件也都已經(jīng)打開。其中,指針變量 fp指向源程序文件 (. asm),指針變量 fpl指向列表文件 (. 1st)。 26 3. 2 查錯模塊程序流程 查錯模塊程序流程見圖 3. 2。 其中,列表文件的建立方法見 3. 1。接著,讀入源程序語句。從源程序文件中讀 入源程序語句的過程是需要各個字符逐一讀入的,讀入后的一項(xiàng)重要工作是進(jìn)行整句識別。整句識別由讀入源語句字符、源程序文件尾判斷、語句尾判斷、源語句字符送C數(shù)組,這樣四部分組成。當(dāng)識別出一個整句時,進(jìn)行一次語句語法檢查。 3. 3 整句識別 整句識別由讀入源語句字符、源程序文件尾判斷、語句尾判斷、源語句 字符送 C數(shù)組,這樣四部分組成。程序如下: loopO: i1=1 loopi: ch=fgetc(fp): if(ch==1) { if(iI !=1) {goto error1: ) goto next2: } if(ch==’\ xOd’ ) 27 {goto jca: ) fputc(ch, fpl): C[i1]=ch: i1++: I f(i1=21) { printf(” current statement interruted i s too long\ n” ): . bl=l: goto next2: } goto loopl: errorl: printf(” last statement is error, lost’ enter’ key.\ n” ): bl=l; next2: goto next3: 其 中,用 ch=fgetc(fp)語句,從源程序文件中讀一個字符。用 if(ch==i)語句 進(jìn)行源程序文件尾判斷。用 if(ch==’\ xOd’ )語句進(jìn)行語句尾判斷。因?yàn)榛剀嚀Q行的 ASCII碼是 Od和 0A,所以 Od是語句末尾結(jié)束的標(biāo)志,也是我們進(jìn)行整旬識別依據(jù)。用 c[i1]=ch語句實(shí)現(xiàn)源語句字符送 C數(shù)組操作。整句識別完成后,得到的整句存放在數(shù) 組 C中,供語句語法檢查用 。 3. 4 語句語法檢查 在整句識別程序中,當(dāng)識別出一個整句時,便轉(zhuǎn)向語句語法檢查程序。本項(xiàng)目的語句語法檢查方法是針對基于單片機(jī)的 PLC的編譯需要提出的。在 3. 1中已提到,在基于單片機(jī)的 PLC編譯程序中用 M數(shù)組來構(gòu)建源語句標(biāo)準(zhǔn)集合,使問題得到簡化。 M數(shù)組是進(jìn)行源程序查錯時的對照標(biāo)準(zhǔn),也是進(jìn)行翻譯時的判別標(biāo)準(zhǔn)。 M數(shù)組提供了源語句樣板。根據(jù)這一思想,得到語句語法檢查的基本思路和方法。語句語法檢查的基本思路和方法是,將當(dāng)前得到的源程序語句 (在 C數(shù)組中 )和基于單片機(jī)的 PLC源程序標(biāo)準(zhǔn)集合 (M數(shù)組 )中的標(biāo)準(zhǔn)語句模板逐一進(jìn)行對照,看該源程序語句是否和 M數(shù)組中的 某一個標(biāo)準(zhǔn)語句模板相同。若能在 M數(shù)組中找到相同的,則該源程序語句語法正確。 若找不到相同的,則該源程序語句語法不正確。語句語法檢查程序如下: jca: for(j=l: j=16: ). { 28 k=l: while(kil) { if(m[j][k]!=c[k]) {goto nextl: } if(a[k]==’’ ) { if(m[j][k+1]==i1— 1) {goto right: } goto error: } k++: } nextl: j++: } error: fputc(‘ *’, fp1): b1=1: right: fputc(’\ xOD’, fp1): fputc(’\ xOA’, fp1): ch=fgetc(fp): goto loopO: 3. 4. 1 M數(shù)組逐行搜索 當(dāng)前得到的源程序語句在 C數(shù)組中,由 C數(shù)組的各個元素 (數(shù)組變量 )記錄。例 如,對源程序語句 ANI 57,有: C[1]=‘ A’: C[2]=‘ N’; C[3]=‘ I’; C[4]=‘’: C[5]=‘ 5’: C[6]=‘ 7’; 在 4. 3中通過 c[il]=ch語句實(shí)現(xiàn)源語句字符送 C數(shù)組操作,并且做 i1++操作。所以當(dāng) C[6]=‘ 7’完成后,有: i1=7, i11=6。在上述程序中, M數(shù)組逐行搜索是通過 for(j=l: j=16: )和 while(ki1)這兩個語句結(jié)構(gòu),經(jīng)過 if(m[j][k]!=c[k])條件判斷實(shí)現(xiàn)的。在 C數(shù)組的‘’字符前的那些數(shù)組變量中,只要出現(xiàn) m[j][k]≮ c[k]情況,就說明在當(dāng)前 M數(shù)組的行中沒有搜索到和 ANI 57源程序語句同類的。因此實(shí)行 J加 1(做j++:操作 ),到 M數(shù)組的下一行中繼續(xù)搜索。 3. 4. 2 核對關(guān)鍵詞是否相等 在 M數(shù)組的逐行搜索過程中,核對關(guān)鍵詞是否相等是語句語法檢查的重要環(huán)節(jié)。 29 從 C數(shù)組和 M數(shù)組行的對應(yīng)關(guān)系可以找到核對的方法。仍然以源程序語句 ANI 57為例, 其 C數(shù)組為: C[1]=‘ A’; C[23=‘ N’; C[3]=‘ I’; C[4]=‘’; C[5]=‘ 5’; C[63=‘ 7’; 對應(yīng)的 M數(shù)組行為: m[4][1]=’ A’: m[4][2]=’ N’: m[41[33=’ I’; m E4][4]=’’: m[4][5]=’\ x06’; (見 2. 1. 2) 該例中的關(guān)鍵詞是 ANI。依照 3. 1. 1中的定義 1, ANI語句的長度值 =6,標(biāo)識符串為 String lVh={A, N, I, )。由于逐行搜索換行的條件是 if(m[j][k]!=c[k])的條 件滿足 (見 3. 4. 1),所以在沒有換行的情況下,就說明 m[j][k]=c[k]成立。在連續(xù) 幾次沒有換行, m[j][k]=c[k]成立的情況下,當(dāng)出現(xiàn)條件 if(C[k]’’ )滿足時 (即 發(fā)現(xiàn)空格字符時 ),便表明此時已經(jīng)核對關(guān)鍵詞相等。所以,關(guān)鍵詞是否相等的核對, 是通過對條件 if(c[k]==’’ )的判斷實(shí)現(xiàn)的。 3. 4. 3 核對語句長度是否正確 在核對關(guān)鍵詞相等以后,緊接著就是核對語句長度是否正確。依照 3. 1. 1知, Mi中的元素 mi k的值等于源語句應(yīng)有的長度的 ASCII值,所以元素 mi k是語句長度核對 的標(biāo)準(zhǔn)。上例中的標(biāo)準(zhǔn)有: mE4][5]=’\ x06’。 語句長度核對是通過 if(m[j][k+1]: =i卜 1)的判斷實(shí)現(xiàn)的。 if(c[k]==’ ’ ) { if(m[j][k+1]==il— 1) {goto right: ) goto error: } 仍然以源程序語句 ANI 57為例,事先, j=4,當(dāng) if(c[k]==一 )成立時, k=4, k+l=5, 從而得: m[j][k+1]=m[4兒 5]=’\ x06’ 而 i11的值在本例中已經(jīng)在 4. 4. 1中已知為: i1=7, i11=6。所以: if(m[j][k+1]==il— 1)的判斷成立。 至此,語句語法檢查完成。若檢查過程中發(fā)現(xiàn)錯誤,則進(jìn)行出錯處理。 30 3. 4. 4 錯誤標(biāo)記寫入錯誤信息文件 在 3. 1. 2中我們已經(jīng)知道指針變量 fp指向源程序文件 (. asm),指針變量 fpl 指向列表文件 (. 1st)。當(dāng)上述語句語法檢查發(fā)現(xiàn)錯誤時,就將錯誤標(biāo)記寫入列表文件。 在. 1st文件的相應(yīng)行的末尾作標(biāo)記“術(shù) 。這一過程的實(shí)現(xiàn)是通過 fputc(’木, fpl)語句實(shí)現(xiàn)的。 3. 5 查錯模塊程序運(yùn)行結(jié)果 下面給出查錯模塊程序?qū)嶋H運(yùn)行中,遇到源程序語句語法錯誤時,所生成的列表 文件 (. 1st)的情況舉例。見表 3. 5。 表 3. 5 源程序語句語法錯誤時列表文件記錄情況 源程序文件 (. asm) 列表文件 (. 1st) LDll 08 LDll 08 列表文件中的 LDll 08*表示源程序中的 LDll 08語句出現(xiàn)語法錯誤。 4 固定代碼的裝配 在對源程序查錯并確認(rèn)無誤后,就進(jìn)入翻譯階段。翻譯階段要做的第一個工作是 裝配固定代碼。 在表 1. 6的基于單片機(jī)的 PLC目標(biāo)程序框架中,目標(biāo)程序代碼包括定代碼和活動代碼兩部分。在活動代碼前的固定代碼包含專用地址矢量、延時 20ms子程序、 CPU和接口初始化子程序、定時器初值設(shè)定子程序、 TO中斷服務(wù)子程序、主程序開始初始化設(shè)定、輸入刷新。固定代碼的裝配過程較簡單,裝配固定代碼的流程如下: 圖 4. 0固定代碼裝配流程 如下; 。 建立目標(biāo)文件 31 圖 5. 0固定代碼裝配流程 4. 1 基于單片機(jī)的 PLC編譯過程中目標(biāo)文件的建立 和 4. 1中 的方法十分類似,在建立目標(biāo)文件前,先要建立目標(biāo)文件名。目標(biāo)文件中存放的是翻譯的結(jié)果,為二進(jìn)制的目標(biāo)代碼。所以,目標(biāo)文件的擴(kuò)展名為“. bin。 為此,先建立列表文件名。 4. 1. 1 目標(biāo)文件名的建立 仍然用 a數(shù)組記錄源程序文件名,用 b數(shù)組記錄目標(biāo)文件名。已知源程序文件名已 經(jīng)在 a數(shù)組中,建立目標(biāo)文件名的過程如下面的程序: strcpy(b, a): while(b[i]!=.’ ) {i++: } b[i+1]=’\ 0’: b[i+2]=’\ 0’: b[i+3]=’\ 0’: b[i+4]=’\ 0’: strcat(b,” bin” ): 同樣, strcpy(b, a)的作用是將 a數(shù)組的內(nèi)容拷貝給 b數(shù)組。源程序文件的擴(kuò)展名 是. asm,而列表文件的擴(kuò)展名應(yīng)該是“. bin’’。所以在上述程序中用 b[i+1]=’\ O’: b Ei+2]=’\ O’: b[i+3]=’\ 0’: b Ei+4]=’\ 0’:四條語句將已拷貝給 b數(shù)組中的 asm清除,再通過 strcat(b,” bin” )語句將 bin拼接到 b數(shù)組 中。結(jié)果,實(shí)現(xiàn)了用 b數(shù)組記錄一個文件名和源程序文件名相同,但擴(kuò)展名和源程序文件名不同的目標(biāo)文件名,該目標(biāo)文件名的擴(kuò)展名為“. bin。 建立固定代碼數(shù)組 向目標(biāo)文件中裝配固定代碼 32 4. 1. 2 目標(biāo)文件 (. Bin)的建立 先用 fopen,以 rb的方式打開源程序文件。再用 fopen語句,以 wb的方式,利 用 fopen語句以 wb的方式工作的一個特性:如果原來不存在該文件,則在打開時新建 一個以指定名字命名的文件,從而建立目標(biāo)文件。 if((fp=fopen(a,” rb” ))==O) {printf(” when pi le, cannot open fi le% s!\ n”, a): exit(0): } if((fpl=fopen(b,” wb” ))==O) {printf(” cannot open or create fi le% s, di sk error.\ n”,b): exit(0): ) 通過上面的程序,指針變量 fp指向源程序文件 (. asm),指針變量 fpl指向目標(biāo) 文件 (. bin)。 4. 2 建立固定代碼數(shù)組 用 D數(shù)組來構(gòu)建固定代碼數(shù)組。用賦值語句給 D數(shù)組賦予固定代碼值,如下: D[0]=’\ x02’: ;復(fù)位矢量,固定代碼 (專用地址矢量 ) D[1]=’\ x01’: D[2]=’\ x30’: D[11]=’\ xC2’: : TO中斷矢量,固定代碼 (專用地址矢量 ) D[12]=’\ xA9’: D[13]=’\ x02’: D[14]=’\ x00’: D[15]=’\ xEE’: D[54]=’\ xCO’: ;延時 20ms子程序,固定代碼 D[55]=’\ xDO’: ; (大部分省略,未列出 ) D[56]=’\ x75’: . D[57]’
點(diǎn)擊復(fù)制文檔內(nèi)容
研究報告相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1