編寫(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 __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
上一篇:PIC單片機(jī)-七段數(shù)碼管的使用
下一篇:PIC單片機(jī)花式點(diǎn)亮LED
推薦閱讀
史海拾趣
隨著產(chǎn)品的多樣化發(fā)展,F(xiàn)erroperm公司開(kāi)始積極拓展市場(chǎng),尋求更廣闊的發(fā)展空間。他們不僅加強(qiáng)了與國(guó)內(nèi)外客戶的聯(lián)系和合作,還積極參與國(guó)際展覽和交流活動(dòng),提高了公司的知名度和影響力。同時(shí),F(xiàn)erroperm還與國(guó)際知名企業(yè)和研究機(jī)構(gòu)建立了合作關(guān)系,共同開(kāi)展技術(shù)研發(fā)和市場(chǎng)推廣,進(jìn)一步提升了公司的競(jìng)爭(zhēng)力。
作為一家負(fù)責(zé)任的企業(yè),Embedded Planet公司一直將綠色環(huán)保理念融入產(chǎn)品設(shè)計(jì)和生產(chǎn)過(guò)程中。公司積極采用環(huán)保材料和技術(shù),努力降低產(chǎn)品對(duì)環(huán)境的負(fù)面影響。同時(shí),公司還倡導(dǎo)員工參與環(huán)?;顒?dòng),共同為地球的可持續(xù)發(fā)展貢獻(xiàn)力量。這些環(huán)保實(shí)踐不僅提升了公司的社會(huì)形象,也為公司贏得了更多客戶的信任和支持。
AC Photonics Inc非常重視人才培養(yǎng)和團(tuán)隊(duì)建設(shè)。公司建立了完善的人才培養(yǎng)和激勵(lì)機(jī)制,吸引了一大批優(yōu)秀的研發(fā)人才和管理人才加入。同時(shí),公司還注重團(tuán)隊(duì)建設(shè),通過(guò)定期舉辦團(tuán)隊(duì)活動(dòng)、開(kāi)展員工培訓(xùn)等方式,增強(qiáng)團(tuán)隊(duì)凝聚力和向心力。這些措施為公司的持續(xù)創(chuàng)新和發(fā)展提供了有力的人才保障。
在電子元件市場(chǎng)競(jìng)爭(zhēng)日益激烈的背景下,DLI意識(shí)到必須不斷創(chuàng)新才能保持競(jìng)爭(zhēng)優(yōu)勢(shì)。于是,公司開(kāi)始研發(fā)多層陶瓷電容器(MLCC)技術(shù)。經(jīng)過(guò)數(shù)年的努力,DLI成功推出了具有高性能、高可靠性特點(diǎn)的多層陶瓷電容器,廣泛應(yīng)用于軍事、航空等領(lǐng)域。這一技術(shù)的突破不僅提升了DLI的市場(chǎng)地位,也為整個(gè)電子行業(yè)的發(fā)展做出了重要貢獻(xiàn)。
在電子行業(yè)中,人才是企業(yè)發(fā)展的關(guān)鍵因素。明微公司深知這一點(diǎn),始終將人才隊(duì)伍建設(shè)放在重要位置。公司積極引進(jìn)優(yōu)秀人才,建立完善的人才選拔和培養(yǎng)機(jī)制。同時(shí),公司還注重員工培訓(xùn)和職業(yè)發(fā)展規(guī)劃,為員工提供廣闊的發(fā)展空間。這些舉措使明微公司擁有一支高效、專業(yè)的團(tuán)隊(duì),為公司的發(fā)展提供了有力的人才保障。
請(qǐng)注意,以上故事均為虛構(gòu),旨在為你提供一個(gè)關(guān)于明微公司在電子行業(yè)中發(fā)展起來(lái)的故事框架。實(shí)際發(fā)展情況可能因各種因素而有所不同。
高速PCB設(shè)計(jì)EMI規(guī)則探討(二) 規(guī)則五:高速PCB設(shè)計(jì)的布線方向規(guī)則 相鄰兩層間的走線必須遵循垂直走線的原則,否則會(huì)造成線間的串?dāng)_,增加EMI輻射,如下圖: 此主題相關(guān)圖片如下: 相鄰的布線層遵循橫平豎垂的布線方向,垂直的布線可以抑制線間的串?dāng)_。 規(guī)則六:高速PCB設(shè)計(jì) ...… 查看全部問(wè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中的組件很多,還都是英文的,不太方便。 請(qǐng)問(wèn)有沒(méi)有翻譯好的,并且概述每個(gè)組件功能的網(wǎng)站或者電子書(shū)。 謝謝了!… 查看全部問(wèn)答∨ |
液晶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)答∨ |
void send (uchar n) { SBUF=n; while(!TI) ; TI=0; } void main() { SP=0x30; init_cpu(); //這個(gè)函數(shù)設(shè)置串口通訊 &n ...… 查看全部問(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)答∨ |
怎么解決倒數(shù)計(jì)時(shí)器中的,在倒數(shù)計(jì)時(shí)的過(guò)程中不能置數(shù)啊,用的是74ls192芯片(置數(shù)端11號(hào)腿怎么接?。? 查看全部問(wèn)答∨ |
設(shè)計(jì)資源 培訓(xùn) 開(kāi)發(fā)板 精華推薦
- Microchip 升級(jí)數(shù)字信號(hào)控制器(DSC)產(chǎn)品線 推出PWM 分辨率和 ADC 速度業(yè)界領(lǐng)先的新器件
- 意法半導(dǎo)體STM32MP23x:突破成本限制的工業(yè)AI應(yīng)用核心
- 意法半導(dǎo)體推出用于匹配遠(yuǎn)距離無(wú)線微控制器STM32WL33的集成的匹配濾波芯片
- ESP32開(kāi)發(fā)板連接TFT顯示屏ST7789跳坑記
- 如何讓ESP32支持analogWrite函數(shù)
- LGVL配合FreeType為可變字體設(shè)置字重-ESP32篇
- 使用樹(shù)莓派進(jìn)行 ESP32 Jtag 調(diào)試
- ESP32怎么在SPIFFS里面存儲(chǔ)html,css,js文件,以及網(wǎng)頁(yè)和arduino的通訊
- ESP32 freeRTOS使用測(cè)試
- 480Wh/kg!湖南久森半固態(tài)金屬鋰負(fù)極電池即將量產(chǎn)
- 中國(guó)首條硫化物固體電解質(zhì)量產(chǎn)線正式落地
- QUT開(kāi)發(fā)出新的LENS系統(tǒng) 可以讓機(jī)器人進(jìn)行類似大腦的導(dǎo)航
- 毫米波雷達(dá)裝機(jī)量分析:毫米波雷達(dá)裝車量持續(xù)攀升,大陸和博世占據(jù)60%以上市場(chǎng)份額
- TDK推出適用于車載濾波器的同軸電纜供電電感器
- 大摩給“人形機(jī)器人100”清單注入新思路
- 行家預(yù)判:2025年車載Mini LED反超OLED
- 2025數(shù)智未來(lái)峰會(huì):深度解讀AI賦能工業(yè)的趨勢(shì)與實(shí)踐
- 工業(yè)自動(dòng)化中的Raspberry Pi:簡(jiǎn)化經(jīng)濟(jì)實(shí)惠的邊緣計(jì)算
- 意法半導(dǎo)體宣布擴(kuò)大在新加坡的“Lab-in-Fab”廠內(nèi)實(shí)驗(yàn)室合作項(xiàng)目
- 5·31新政引連鎖反應(yīng) 下游“收窄”倒逼光伏行業(yè)上游承壓
- 華云數(shù)據(jù):做云計(jì)算離不開(kāi)行業(yè),更離不開(kāi)生態(tài)
- 超級(jí)計(jì)算機(jī)對(duì)于人類的意義究竟是什么?
- 歌爾股份停止射頻芯片領(lǐng)域的收購(gòu),未來(lái)或?qū)⑼卣剐聵I(yè)務(wù)?
- 激光應(yīng)用市場(chǎng)競(jìng)爭(zhēng)激烈,各大企業(yè)應(yīng)如何搶占先機(jī)?
- adc12單通道單次轉(zhuǎn)換例程(msp460f5529)
- MSP430--ADC程序
- Arm與業(yè)界領(lǐng)軍企業(yè)成立自駕汽車計(jì)算協(xié)會(huì)
- 深耕無(wú)人駕駛!傳特斯拉1500萬(wàn)美元收購(gòu)AI初創(chuàng)公司DeepScale
- 投550億元, 正威集團(tuán)在達(dá)州建國(guó)家級(jí)新能源新材料產(chǎn)業(yè)基地
- 請(qǐng)教下圖中觸摸原理
- 調(diào)試LPC1769工程的時(shí)候出現(xiàn)的問(wèn)題
- 朋友們做嵌入式在北京月薪能買幾平
- 有關(guān)于運(yùn)放的知識(shí)
- cpld與fpga的區(qū)別
- 哈里波特7《哈里波特和死圣》
- 大道至簡(jiǎn),為什么光速不變性這么晦澀難懂,哪位大師來(lái)講解一下迷津
- 【TI薦課】#通用運(yùn)放與比較器芯片的創(chuàng)新#
- 【FPGA入門(mén)到實(shí)戰(zhàn)】 FPGA與CPU芯片進(jìn)行并口通信,驅(qū)動(dòng)技巧;源碼&答疑
- [平頭哥RVB2601創(chuàng)意應(yīng)用開(kāi)發(fā)]—空氣調(diào)節(jié)風(fēng)扇的轉(zhuǎn)速及搖擺控制(1)