娇小w搡bbbb搡bbb,《第一次の人妻》,中国成熟妇女毛茸茸,边啃奶头边躁狠狠躁视频免费观看

歷史上的今天

今天是:2025年05月11日(星期日)

2019年05月11日 | PIC單片機(jī)實(shí)現(xiàn)冒泡排序算法

發(fā)布者:innovator8 來(lái)源: eefocus關(guān)鍵字:PIC單片機(jī)  冒泡排序  算法 手機(jī)看文章 掃描二維碼
隨時(shí)隨地手機(jī)看文章

編寫(xiě)子程序paixu,實(shí)現(xiàn)1Byte數(shù)的順序排列。待排序的10個(gè)二進(jìn)制數(shù)(自定義數(shù)據(jù)大?。┐娣旁趦?nèi)存空間內(nèi)。

編寫(xiě)宏定義實(shí)現(xiàn)大小比較和換位,入口參數(shù)為待比較的兩個(gè)數(shù)據(jù)地址。

注意排序過(guò)程中需要使用間接尋址方式,即利用FSR和INDF兩個(gè)特殊功能寄存器實(shí)現(xiàn)尋址操作。

編寫(xiě)子程序,調(diào)用宏定義,使用冒泡排序算法實(shí)現(xiàn)排序。

1、冒泡排序算法

冒泡排序是一種簡(jiǎn)單的排序算法。它重復(fù)地走訪過(guò)要排序的數(shù)列,一次比較兩個(gè)元素,如果他們的順序錯(cuò)誤就把他們交換過(guò)來(lái)。走訪數(shù)列的工作是重復(fù)地進(jìn)行直到?jīng)]有再需要交換,也就是說(shuō)該數(shù)列已經(jīng)排序完成。


冒泡排序算法的運(yùn)作如下:


比較相鄰的元素。如果第一個(gè)比第二個(gè)大,就交換他們兩個(gè)。

對(duì)每一對(duì)相鄰元素作同樣的工作,從開(kāi)始第一對(duì)到結(jié)尾的最后一對(duì)。這步做完后,最后的元素會(huì)是最大的數(shù)。

針對(duì)所有的元素重復(fù)以上的步驟,除了最后一個(gè)。

持續(xù)每次對(duì)越來(lái)越少的元素重復(fù)上面的步驟,直到?jīng)]有任何一對(duì)數(shù)字需要比較。

2、編寫(xiě)宏定義實(shí)現(xiàn)大小比較與換位



;*****************宏定義*********************************************************

compare_swap  macro  DATAI,DATAJ,TEMP   

BCF      STATUS,C                ; 標(biāo)志位清零

MOVF     DATAJ,W

SUBWF    DATAI,W                 ; 比較大小

BTFSC    STATUS,C                ; TEMP1>TEMP2? 

GOTO     NEXT1

GOTO     NEXT2     

NEXT1              

swap     DATAI,DATAJ,TEMP        ; 是,則交換兩者的值

NEXT2

nop                              ; 否則,不做操作

endm

 

swap   macro   DATAI,DATAJ,TEMP    

MOVF     DATAI,W

MOVWF    TEMP

MOVF     DATAJ,W

MOVWF    DATAI

MOVF     TEMP,W

MOVWF    DATAJ

endm

進(jìn)行宏指令嵌套時(shí),要十分注意宏指令調(diào)用與子程序調(diào)用的區(qū)別,否則很容易產(chǎn)生錯(cuò)誤。例如下面這段代碼


BTFSC    STATUS,C                ; TEMP1>TEMP2? 

GOTO     NEXT1

GOTO     NEXT2     

NEXT1              

swap     DATAI,DATAJ,TEMP        ; 是,則交換兩者的值

NEXT2

nop    

如不慎寫(xiě)作:


BTFSC    STATUS,C                ; TEMP1>TEMP2?               

swap     DATAI,DATAJ,TEMP        ; 是,則交換兩者的值

nop                              ; 否則,不做操作

就會(huì)發(fā)生錯(cuò)誤。


3、編寫(xiě)子程序,調(diào)用宏定義實(shí)現(xiàn)排序



;*************************子程序************************** ********************

    ORG    0x0100

paixu

LOOP1

    MOVLW  0x20

    MOVWF  FSR                   ; FSR=0x20,起始位置

    CLRF   COUNT2

LOOP2   

    MOVF   INDF,W

    MOVWF  DATAI

    INCF   FSR,F

    MOVF   INDF,W

    MOVWF  DATAJ

    compare_swap   DATAI,DATAJ,TEMP 

    MOVF   DATAJ,W               ; 數(shù)據(jù)還原

    MOVWF  INDF

    DECF   FSR,F

    MOVF   DATAI,W

    MOVWF  INDF

    INCF   FSR,F

    INCF   COUNT2,F              ; COUNT2++,COUNT2<9-COUNT1?

    MOVF   COUNT1,W

    SUBWF  SIZE,W 

    BSF    STATUS,C

    SUBWF  COUNT2,W

    BTFSS  STATUS,C   

    GOTO   LOOP2

    INCF   COUNT1,F              ; COUNT1++,COUNT1<9?               

    BSF    STATUS,C

    MOVF   SIZE,W

    SUBWF  COUNT1,W

    BTFSS  STATUS,C

    GOTO   LOOP1

    NOP

    RETURN

;*****************************************************************************

完整程序:


list        p=16f877A            ;標(biāo)明所用的處理器類型

#include           ;調(diào)用頭文件 

__CONFIG    _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_OFF & _HS_OSC & _WRT_OFF & _LVP_OFF & _CPD_OFF

 

;*****************宏定義*********************************************************

 

compare_swap  macro  DATAI,DATAJ,TEMP   

BCF      STATUS,C                ; 標(biāo)志位清零

MOVF     DATAJ,W

SUBWF    DATAI,W                 ; 比較大小

BTFSC    STATUS,C                ; TEMP1>TEMP2? 

GOTO     NEXT1

GOTO     NEXT2     

NEXT1              

swap     DATAI,DATAJ,TEMP        ; 是,則交換兩者的值

NEXT2

nop                              ; 否則,不做操作

endm

 

swap   macro   DATAI,DATAJ,TEMP    

MOVF     DATAI,W

MOVWF    TEMP

MOVF     DATAJ,W

MOVWF    DATAI

MOVF     TEMP,W

MOVWF    DATAJ

endm

 

;*****************變量定義*******************************************************

 

DATA1    EQU    0x20             ; 待排序的數(shù)據(jù)

DATA2    EQU    0x21             

DATA3    EQU    0x22          

DATA4    EQU    0x23             

DATA5    EQU    0x24             

DATA6    EQU    0x25 

DATA7    EQU    0x26

DATA8    EQU    0x27

DATA9    EQU    0x28

DATA10   EQU    0x29 

 

SIZE     EQU    0x30             ; 待排序數(shù)據(jù)個(gè)數(shù)-1

 

COUNT1   EQU    0x31             ; 循環(huán)變量

COUNT2   EQU    0x32 

 

TEMP     EQU    0x33             ; 臨時(shí)變量 

DATAI    EQU    0x34

DATAJ    EQU    0x35                               

 

;*******************************************************************************

    ORG         0x0000           ; 復(fù)位入口地址

    nop                          ; 兼容ICD調(diào)試工具,必須加nop

    goto        Main             ; 跳轉(zhuǎn)至Main函數(shù)

;*************************Main 函數(shù)的代碼***************************************

Main                                               

    MOVLW  0x34                  ; 數(shù)據(jù)初始化

    MOVWF  DATA1                

    MOVLW  0x53                 

    MOVWF  DATA2

    MOVLW  0xb5                  

    MOVWF  DATA3

    MOVLW  0x33

    MOVWF  DATA4

    MOVLW  0xA1

    MOVWF  DATA5

    MOVLW  0x42

    MOVWF  DATA6

    MOVLW  0x11

    MOVWF  DATA7

    MOVLW  0x86

    MOVWF  DATA8

    MOVLW  0x65

    MOVWF  DATA9

    MOVLW  0x76

    MOVWF  DATA10

 

    MOVLW  .9

    MOVWF  SIZE 

                          

    CLRF   COUNT1                ; 初始化循環(huán)變量

    CLRF   COUNT2   

 

    CLRF   TEMP                  ; 初始化臨時(shí)變量

    CLRF   DATAI

    CLRF   DATAJ

    

    CALL   paixu                 ; 調(diào)用子程序排序

    nop

    goto   $                     ; 停機(jī)

;*************************子程序************************** ********************

    ORG    0x0100

paixu

LOOP1

    MOVLW  0x20

    MOVWF  FSR                   ; FSR=0x20,起始位置

    CLRF   COUNT2

LOOP2   

    MOVF   INDF,W

    MOVWF  DATAI

    INCF   FSR,F

    MOVF   INDF,W

    MOVWF  DATAJ

    compare_swap   DATAI,DATAJ,TEMP 

    MOVF   DATAJ,W               ; 數(shù)據(jù)還原

    MOVWF  INDF

    DECF   FSR,F

    MOVF   DATAI,W

    MOVWF  INDF

    INCF   FSR,F

    INCF   COUNT2,F              ; COUNT2++,COUNT2<9-COUNT1?

    MOVF   COUNT1,W

    SUBWF  SIZE,W 

    BSF    STATUS,C

    SUBWF  COUNT2,W

    BTFSS  STATUS,C   

    GOTO   LOOP2

[1] [2]
關(guān)鍵字:PIC單片機(jī)  冒泡排序  算法 引用地址:PIC單片機(jī)實(shí)現(xiàn)冒泡排序算法

上一篇:PIC單片機(jī)-七段數(shù)碼管的使用
下一篇:PIC單片機(jī)花式點(diǎn)亮LED

推薦閱讀

買藍(lán)牙耳機(jī)總是要參考一些用戶口碑,品牌專業(yè)度以及品牌知名度等等。今天就為大家盤(pán)點(diǎn)一下目前藍(lán)牙燃機(jī)情況,給大家列舉目前世界十大藍(lán)牙耳機(jī)品牌。??1.jeet w1無(wú)線藍(lán)牙耳機(jī)??Jeet w1無(wú)線藍(lán)牙耳機(jī)是一款網(wǎng)紅耳機(jī),在時(shí)尚界的理念是非時(shí)尚不裝X,并以此走紅。主打平價(jià)享輕奢,注重音質(zhì)效果以及佩戴體驗(yàn),在音質(zhì)、舒適度以及配置上均下足功夫,媲美千...
隨著人工智能、車聯(lián)網(wǎng)、大數(shù)據(jù)、云計(jì)算等技術(shù)的不斷發(fā)展,以及5G時(shí)代的全面到來(lái),將為智能駕駛的發(fā)展掃除障礙。自動(dòng)駕駛、無(wú)人駕駛已由概念,變成趨勢(shì)和大勢(shì)。目前,無(wú)論是傳統(tǒng)車企,還是科技公司,都盯著這塊誘人的蛋糕。5月10日,吉利汽車技術(shù)日暨第二屆龍灣論壇在寧波杭州灣新區(qū)舉行,“科技悅行、萬(wàn)物智聯(lián)”是這次大會(huì)的主題。這里是交流思想和激蕩觀...
5月11日消息,博主@數(shù)碼閑聊站爆料小米下一款工程機(jī)采用的是雙曲面挖孔屏方案,代號(hào)分別是Apollo、Verthandi,刷新率最高為120Hz?! ≠Y料顯示,Apollo是古希臘神話中的光明、預(yù)言、音樂(lè)和醫(yī)藥之神,消災(zāi)解難之神,同時(shí)也是人類文明、遷徙和航海者的保護(hù)神。  Verthandi是北歐神話中掌管命運(yùn)的諾倫三女神其中之一(排行老二)。  有網(wǎng)友猜...
小馬智行與激光雷達(dá)領(lǐng)域頭部企業(yè)Luminar(納斯達(dá)克股票代碼:LAZR)聯(lián)合發(fā)布全新自動(dòng)駕駛傳感系統(tǒng)。該系統(tǒng)使用360度全方位多傳感器融合方案,使車輛在復(fù)雜城區(qū)路況運(yùn)行時(shí)更安全、可靠。雙方還將合作打造可量產(chǎn)的車規(guī)級(jí)傳感器融合方案。小馬智行計(jì)劃于2023年規(guī)模化量產(chǎn)車規(guī)級(jí)自動(dòng)駕駛系統(tǒng),屆時(shí)將搭載Luminar的Iris激光雷達(dá)。這也是Luminar首次在中國(guó)選擇與...

史海拾趣

問(wèn)答坊 | AI 解惑

高速PCB設(shè)計(jì)EMI規(guī)則探討(二)

規(guī)則五:高速PCB設(shè)計(jì)的布線方向規(guī)則 相鄰兩層間的走線必須遵循垂直走線的原則,否則會(huì)造成線間的串?dāng)_,增加EMI輻射,如下圖: 此主題相關(guān)圖片如下: 相鄰的布線層遵循橫平豎垂的布線方向,垂直的布線可以抑制線間的串?dāng)_。 規(guī)則六:高速PCB設(shè)計(jì) ...…

查看全部問(wèn)答∨

無(wú)刷直流的為什么不可以反轉(zhuǎn)啊

來(lái)自EEWORLD合作qq群:49900581 群主:wangkj void SetPhase (unsigned char direction,unsigned char BLDCstatus,unsigned int power) { if(direction==BLDC_CLOCKWISE) //正轉(zhuǎn) { switch(BLDCstatus) { case 1: SetGate(1,2,power);break; ...…

查看全部問(wèn)答∨

控制面板下電源屬性的界面為什么簡(jiǎn)體中文和繁體中文不一樣????

電池屬性->方案 簡(jiǎn)體中文下只有 \"將狀態(tài)切換為系統(tǒng)空閑\" 繁體中文下有 \"切換狀態(tài)為使用者閑置\" \"切換狀態(tài)為系統(tǒng)閑置\" \"切換狀態(tài)為暫停\" 想讓 簡(jiǎn)體中文 和 繁體中文的選項(xiàng)一致,請(qǐng)問(wèn)應(yīng)該怎樣修改?? …

查看全部問(wèn)答∨

串口ReadPortThread讀到數(shù)據(jù)后,怎樣正確顯示出來(lái)?

DWORD WINAPI ReadPortThread(LPVOID lpvoid) { BYTE Byte;     DWORD dwCommModemStatus,         dwBytesTransferred;     CString tempStr;     // Specify a set of events ...…

查看全部問(wèn)答∨

vxWorks 組件

vxWorks中的組件很多,還都是英文的,不太方便。 請(qǐng)問(wèn)有沒(méi)有翻譯好的,并且概述每個(gè)組件功能的網(wǎng)站或者電子書(shū)。 謝謝了!…

查看全部問(wèn)答∨

液晶1602顯示源代碼

液晶1602顯示源代碼 #include<reg52.h>#define uint unsigned int#define uchar unsigned charsbit en=P2^0;sbit rs=P2^1;uchar code table[]=\"I LOVE YOU\";uchar code table1[]=\"FOREVER MAMA!\";uchar num;void delay(uint z);void write ...…

查看全部問(wèn)答∨

程序跳轉(zhuǎn)

void send (uchar n) {     SBUF=n;     while(!TI)   ;    TI=0; }   void main() {    SP=0x30;    init_cpu();   //這個(gè)函數(shù)設(shè)置串口通訊 &n ...…

查看全部問(wèn)答∨

求助F2001定時(shí)器問(wèn)題

各位大哥幫幫忙,我如下設(shè)置了定時(shí)器中斷,但是每次執(zhí)行中斷服務(wù)程序的時(shí)間怎么是設(shè)置時(shí)間的3倍啊! void Init_TimerA(void) { BCSCTL3 |= LFXT1S_2; // ACLK = VLO TACCR0 = 10000; ...…

查看全部問(wèn)答∨

Verilog HDL練習(xí)題和Verilog基礎(chǔ)知識(shí)適合verilog新人.rar

Verilog HDL練習(xí)題和Verilog基礎(chǔ)知識(shí)適合verilog新人 Verilog的135個(gè)經(jīng)典設(shè)計(jì)實(shí)例…

查看全部問(wèn)答∨

74ls192芯片

怎么解決倒數(shù)計(jì)時(shí)器中的,在倒數(shù)計(jì)時(shí)的過(guò)程中不能置數(shù)啊,用的是74ls192芯片(置數(shù)端11號(hào)腿怎么接?。?

查看全部問(wèn)答∨
小廣播
設(shè)計(jì)資源 培訓(xùn) 開(kāi)發(fā)板 精華推薦

最新單片機(jī)文章

 
EEWorld訂閱號(hào)

 
EEWorld服務(wù)號(hào)

 
汽車開(kāi)發(fā)圈

 
機(jī)器人開(kāi)發(fā)圈

電子工程世界版權(quán)所有 京ICP證060456號(hào) 京ICP備10001474號(hào)-1 電信業(yè)務(wù)審批[2006]字第258號(hào)函 京公網(wǎng)安備 11010802033920號(hào) Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 开封县| 闽侯县| 浦县| 洪江市| 和顺县| 新密市| 望江县| 南雄市| 雅安市| 临洮县| 宁明县| 连城县| 田林县| 康马县| 特克斯县| 凉城县| 洞头县| 密云县| 富蕴县| 大理市| 长武县| 兴化市| 离岛区| 宜良县| 肥城市| 星子县| 绥化市| 塔河县| 澄城县| 修水县| 隆林| 通道| 色达县| 龙山县| 读书| 汉阴县| 鄱阳县| 泗洪县| 临西县| 富蕴县| 岳西县|