熱門: 51單片機(jī) | 24小時(shí)必答區(qū) | 單片機(jī)教程 | 單片機(jī)DIY制作 | STM32 | Cortex M3 | 模數(shù)電子 | 電子DIY制作 | 音響/功放 | 拆機(jī)樂園 | Arduino | 嵌入式OS | 程序設(shè)計(jì)
|
發(fā)布時(shí)間: 2019-11-21 20:25
正文摘要:剛學(xué)匯編,想請問一下大家: 用MPLAB寫一個(gè)十六進(jìn)制加法的匯編代碼,其中判斷進(jìn)位那個(gè)一直出現(xiàn)錯誤是啥原因。 |
Y_G_G 發(fā)表于 2019-11-26 14:50 嗯嗯,我會試一下,謝謝昂 |
|
匯編很少有人用的,如果要用匯編,基本就是對某些條件要求很高地方才用到的 比如時(shí)序要求相當(dāng)高的,或者是片上資源很有限的,就會要求用匯編 如果你是要學(xué)匯編,你這程序一定要再加一個(gè)顯示結(jié)果的,然后再燒錄到學(xué)習(xí)板上驗(yàn)證一下,很多匯編的結(jié)果是不能仿真或者想當(dāng)然出來的 |
Y_G_G 發(fā)表于 2019-11-25 08:47 嗯,我八位減一次就判斷一下大小,現(xiàn)在可以了 |
zjjhtony 發(fā)表于 2019-11-25 10:59 好,非常感謝~ |
|
PIC的匯編也是需要添加頭文件的。 比如你這個(gè)的status和C必須在頭文件定義。 看對應(yīng)的單片機(jī)型號的datasheet參看它的地址。 如下定義: STATUS EQU 03H C EQU 0H |
| 受教了,謝謝 |
|
大于十進(jìn)制255的數(shù)值都是這樣運(yùn)算的,不管是加法還是減法 減法運(yùn)算就通過檢測標(biāo)志位來決定高位要不要減1 沒有借位就跳過下一條指令,高位值不變 有借位,高位就減1,高位減1 匯編高于8位的加減運(yùn)算是比較麻煩的事,每次運(yùn)算之后都要檢測一下標(biāo)志位,都要考慮到值有可能是會大于255的結(jié)果. |
Y_G_G 發(fā)表于 2019-11-23 10:16 我還有個(gè)小小的問題,關(guān)于減法借位: 比如說我想FE-FF,結(jié)果是-1,但是我想讓他從高位借位1在減可以實(shí)現(xiàn)嗎 |
Y_G_G 發(fā)表于 2019-11-23 10:16 哈哈哈,感謝感謝,我存著慢慢學(xué) |
傲嬌的獸獸! 發(fā)表于 2019-11-22 21:58 現(xiàn)在竟然還有教學(xué)PIC匯編的 我用8051匯編兩年,才去學(xué)的PIC16系列的匯編,依然覺得很吃力對于PIC匯編,你最好學(xué)會偽指令,這會讓你能更好的學(xué)習(xí),而且效率也會高很多的 以下是一段代碼的開始部分,你可以參考一下: #include <p16f877a.inc> ;包含了PIC16F877A的寄存器聲稱文件,像C,F,W之類的就可以直接引用了 __CONFIG _FOSC_HS & _WDTE_OFF & _PWRTE_OFF & _BOREN_ON & _LVP_OFF & _CPD_OFF & _WRT_OFF & _CP_OFF;配置設(shè)置生成的代碼,這個(gè)代碼有的編譯器是在軟件燒錄,或者是在配置選項(xiàng)那,先配置好,再生成代碼,然后復(fù)制到這里的 CBLOCK 020H ;定義連續(xù)變量,CBLOCK 020H,這是一個(gè)偽指令,意思就是從20H開始連續(xù)定義變量,之后就可以在代碼中使用了 COUNT ;計(jì)數(shù)用的,COUNT 在定義之后,相當(dāng)021H地址,但用COUNT更加直觀一點(diǎn), DEL1 ;用在延時(shí)子程序中 DEL2 ;用在延時(shí)子程序中 DISP_ADDR ;顯示地址用寄存器 DISP_DATA ;顯示數(shù)據(jù)用寄存器 LED_1 ;七段碼的個(gè)位 LED_10 ;七段碼的十位 LED_100 ;七段碼的百位 DIV_DATA ;除法用寄存器 DATA_BUF ;數(shù)據(jù)寫入和讀出用的緩沖器 SESHI ;測試用寄存器 ENDC ;結(jié)束定義 #define S1 PORTB,0 ;按置S1 #define S2 PORTB,1 ;按置S2 #define S3 PORTB,2 ;按置S3 #define COM0 PORTD,0 ; #define COM1 PORTD,1 ; #define COM2 PORTD,2 ; #define COM3 PORTD,3 ;定義幾個(gè)顯示的RA端口 #define CN STATUS,0 ;C為標(biāo)志位,減法有借位=0,無借位=1 #define CS PORTD,4 ;片選信號線 #define SK PORTD,5 ;時(shí)鐘信號線 #define D_I PORTD,6 ;數(shù)據(jù)輸入信號線 #define D_O PORTD,7 ;數(shù)據(jù)輸出信號線 |
Y_G_G 發(fā)表于 2019-11-22 08:33 首先真的非常感謝您的回答。 因?yàn)槲覀冋n程用的是匯編,老師講的也很匆忙所以有些地方?jīng)]有講得很好,所以有些地方不是很懂,現(xiàn)在懂了。 很感謝。! |
|
這個(gè)匯編編譯器不會像KEIL這樣自動根據(jù)單片機(jī)來包含頭文件,你得在代碼最開始的地方先添加一個(gè)像這樣的包含指令 #include <p16f877a.inc> 接下來還要一段代碼來指定單片機(jī)使用晶振,復(fù)位電壓之類的,就像這樣: __CONFIG _FOSC_HS & _WDTE_OFF & _PWRTE_OFF & _BOREN_ON & _LVP_OFF & _CPD_OFF & _WRT_OFF & _CP_OFF; 這個(gè)代碼是在燒錄界面,先由你自己設(shè)定,然后生成代碼,復(fù)制就可以了 匯編很麻煩的,如果不是工程指定要求用匯編的話,最好還是用C吧 但如果是PIC的12XX和16XX系列,特別是OTP型,我倒是見過很多指定用匯編的 |
Powered by 單片機(jī)教程網(wǎng)