發布日期:2022-04-26 點擊率:108 品牌:西門子_Siemens
在一些C言語資料上看到,“冒泡法”排序通常是從終究一個數據開端,向地址小的方向相鄰兩個數據比照,并依照從小到大或許從大到小排序的一種算法。在數據比照、移動的進程中,數據的運動,看起來如同水中的氣泡向上運動。故而稱之為“冒泡法”排序。
“冒泡法”排序,在知道數據的開端地址、數據個數、數據類型后,需求算出終究一個數據的地址,并從終究的一個地址開端運算排序。我在想,為啥不能從數據的開端地址開端排序呢,假定選用這種“下沉法”排序,還能省去核管用據的完畢地址,程序應當會更簡練。所以自個就試著寫了一下“下沉法”排序的plc程序代碼,并查驗經過。
排序環境:224CPU,從VB1000開端接連20個整數,從小到大排序。“下沉法”排序算法參看代碼如下:
//******************給外循環體、內循環體的循環次數賦初值***********************
LD SM0.0 //開端施行從小到大的排序程序
MOVW 19, LW2 //給外循環次數(數據個數-1)賦初值
MOVW 19, LW6 //給內循環次數(數據個數-1)賦初值
//*******************樹立外循環體并界說排序的正本地址*****************************
FOR LW0, +1, LW2 //FOR外循環體循施行LW2次
MOVD &VB1000, AC1 //將V區的開端地址賦給AC1,界說排序的開端地址
//**************樹立內循環體并開端進行相鄰的兩個數據比照、移動****************
FOR LW4, +1, LW6 //FOR內循環體循施行LW6次
MOVD AC1, AC2 //把其時AC1里邊的地址存儲到AC2里邊
+D +2, AC2 //AC2其時地址+2,存入AC2
LDW< *AC2, *AC1 //假定AC2指向的地址里邊的內容小于AC1指向的地址里邊的內容
MOVW *AC1, LW8 //那么將其時兩個地址里邊的內容溝通
MOVW *AC2, LW10 //假定AC2指向的地址里邊的內容不小于AC1指向的地址里邊的內容
MOVW LW8, *AC2 //那么其時兩個地址里邊的內容堅持不變
MOVW LW10, *AC1 //假定把小于比照指令改成大于比照指令,那么數據即是從大到小排序
LD SM0.0
+D +2, AC1 //AC1其時地址+2,存入AC1
NEXT //跳轉到FOR內循環,假定內循環施行完畢,程序往下施行
//*******************內循環施行完畢,進入外循環施行*****************************
DECW LW6 //內循環體施行完畢,將內循環體的循環次數減1
NEXT //跳轉到FOR外循環,假定外循環施行完畢,程序往下施行
上面代碼底子選用暫時變量作運算的,正本還能夠將其封裝成一個子程序,完畢屢次調用。
下一篇: PLC、DCS、FCS三大控
上一篇: MATLAB和Simulink在航