音影先锋亚洲天堂网|电影世界尽头的爱完整版播放|国产 熟女 91|高清无码免费观看欧美日韩|韩国一区二区三区黄色录像|美女亚洲加勒比在线|亚洲综合网 开心五月|7x成人在线入口|成人网站免费日韩毛片区|国产黄片?一级?二级?三级

登錄 免費(fèi)注冊(cè) 首頁 | 行業(yè)黑名單 | 幫助
維庫電子市場(chǎng)網(wǎng)
技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測(cè)控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng)
驅(qū)動(dòng)編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機(jī) | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計(jì) | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe

PIC 運(yùn)算子程序(1)

作者:BLACKHILL 欄目:單片機(jī)
PIC 運(yùn)算子程序(1)
PIC16F877 運(yùn)算子程序
1  PIC16F877匯編語言程序主體框架
以下是一個(gè)典型的程序結(jié)構(gòu):
;***************程序說明區(qū)*******************
    LIST    p=16F877    ;指定微控制器型號(hào)和文件輸出格式
    INCLUDE    p16F877.inc    ;讀入MPLAB提供的定義文件P16F877.INC
;***片內(nèi)RAM常用資源、變量定義和相應(yīng)的說明*********
    ACCALO    EQU  20    ;存放加數(shù)或減數(shù)低8位
    ACCAHI     EQU  21    ;存放加數(shù)或減數(shù)高8位
    ACCBLO     EQU     23    ;存放被加數(shù)或被減數(shù)低8位
    ACCBHI     EQU     24    ;存放被加數(shù)或被減數(shù)高8位
    S_W    EQU     25    ;棧存W寄存器值
    S_STATUS    EQU    26    ;棧存STATUS寄存器值
;****************芯片復(fù)位矢量*******************
    ORG          0X0000    ;由于PIC16F877芯片復(fù)位矢量在0000h單
        ;元,所以常在0000h單元處放置一條跳轉(zhuǎn)
        ;指令,使單片機(jī)復(fù)位后能跳過中斷矢量,
                                ;直接執(zhí)行主程序
START    GOTO        MAIN        
;******************中斷矢量**********************
    ORG          0X0004    ;由于PIC16F877的中斷矢量為0004h,所以
        ;當(dāng)中斷開放時(shí), 需在此處加入中斷程序,
        ;使單片機(jī)能在中斷到來時(shí)及時(shí)進(jìn)入相應(yīng)的
        ;中斷服務(wù)程序。為了可靠起見,如果單片
        ;機(jī)不使用中斷,則常常在該中斷矢量處放
        ;置RETFIE指令,可以使單片機(jī)不會(huì)因
        ;干擾產(chǎn)生誤中斷而導(dǎo)致程序跑飛
    CALL    PUSH    ;調(diào)用保護(hù)現(xiàn)場(chǎng)子程序
    BTFSS    PIR1,ADIF
    CALL    AD    ;若AD中斷到,則執(zhí)行中斷服務(wù)程序
    ……..        ;此處可放多個(gè)中斷子程序,并以軟件安排
            ;中斷優(yōu)先級(jí)
    CALL    POP    ;恢復(fù)中斷現(xiàn)場(chǎng)
    RETFIE    ;中斷返回
;****************主程序區(qū)*****************
    ORG    0X0100    ;將主程序、子程序和中斷服務(wù)程序等存放
        ;在0100h單元之后,在中斷矢量和主程序
        ;區(qū)之間預(yù)留一些存儲(chǔ)單元,以便寫入判
        ;跳指令和一些必要的現(xiàn)場(chǎng)保護(hù)程序。此外
        ;用戶也可以根據(jù)實(shí)際需要,使主程序從其
        ;它地址開始存放
MAIN    BSF          STATUS,RP0    ;選擇存儲(chǔ)體1
    MOVLW    0XFF    ;定義RA口為輸入端口
    MOVWF    TRISA
    BCF    STATUS,RP0    ;選擇存儲(chǔ)體0
    MOVLW    0X04    ;初值化ACCALO
    MOVWF    ACCALO    
    CALL    DX    ;調(diào)用DX子程序
LOOP1    ……    ;任務(wù)1
    ……    ;任務(wù)2
    :
    :
    :
    GOTO    LOOP1    ;反復(fù)執(zhí)行任務(wù)一和任務(wù)二等
;***************子程序區(qū)*********************
DX    MOVF        ACCALO,0    ;ACCB和ACCA低半字節(jié)相加
    ADDWF     ACCBLO
    RETURN        ;子程序返回
;****************************************
PUSH    MOVWF      S_W    ;保護(hù)W寄存器
    MOVF    STATUS,0    ;保護(hù)STATUS寄存器
    MOVWF    S_STATUS
    RETURN        ;子程序返回
;****************************************
POP    MOVF        S_STATUS,0    ;恢復(fù)STATUS寄存器
    MOVWF    STATUS
    MOVF    S_W,0    ;恢復(fù)W寄存器
    RETURN    ;子程序返回
;****************中斷服務(wù)子程序區(qū)************************
AD        BCF            PIR1,ADIF    ;清AD中斷標(biāo)志
    ……                        ;中斷服務(wù)主體程序
    RETURN                    ;子程序返回
            END
2  四則運(yùn)算子程序
2.1  16×16位定點(diǎn)數(shù)加、減法子程序
以下子程序?qū)崿F(xiàn)2個(gè)16×16位有符號(hào)數(shù)加、減運(yùn)算,其和或差用一個(gè)16位數(shù)表示。在子程序中,減法是通過對(duì)減數(shù)求補(bǔ)后再與被減數(shù)相加來實(shí)現(xiàn)的。因此,當(dāng)程序從D_sub進(jìn)入子程序時(shí)為減法,當(dāng)從D_add進(jìn)入子程序時(shí)為加法。
子程序的入口條件和出口條件如下:
入口條件:16位被加數(shù)/被減數(shù)存放在ACCBHI、ACCBLO中;
              16位加數(shù)/減數(shù)存放在ACCAHI、ACCALO中;
出口條件:16位和/差存放在ACCBHI和ACCBLO中。
以下為16×16位有符號(hào)數(shù)加、減法子程序。
注意:在以下注釋程序中均以ACCA代替ACCAHI、ACCALO兩個(gè)字節(jié),以ACCB代替ACCBHI、ACCBLO兩個(gè)字節(jié)。

    LIST            p=16F877
    INCLUDE        p16F877.inc
    ACCALO     EQU     20    ;存放加數(shù)或減數(shù)低8位
    ACCAHI    &nbs
2樓: >>參與討論
BLACKHILL
本人有大量的pic子程序,希望與各位共享
 
3樓: >>參與討論
sosomj
我支持一下。
當(dāng)下的許多人被外面的世界沖昏了腦袋。以為什么都簡單,上手就要做這項(xiàng)目那項(xiàng)目,殊不知最簡單的道理--循序漸進(jìn)卻是不變的真理。浮躁的心理是不會(huì)有作為的,靜下心來仔細(xì)的耐心的學(xué)習(xí)基礎(chǔ)的東東,仔細(xì)的揣摩基本的子程序,也許有一天你會(huì)發(fā)現(xiàn)你的耐心和努力收到了回報(bào)。

4樓: >>參與討論
ljmxinhun
那你有沒有兩個(gè)CPU之間通信的程序啊?
可以發(fā)一份這樣的程序給我嗎?54+57兩個(gè)cpu之間的通信.沒有主從之分,因?yàn)閮蓚(gè)cpu都有獨(dú)立的工作,但又有相互的聯(lián)系.用三條線的.
E-mail:LJM@zspost.com

5樓: >>參與討論
真水無香
to blackhill
你好能把你的程序給我一份嗎,謝謝
rwns@etang.com

6樓: >>參與討論
fineasy
雙機(jī)通訊要有協(xié)議,現(xiàn)成的程序估計(jì)不能用!
 
7樓: >>參與討論
legend_my
能不能共享一下,按需所取嘛
 
8樓: >>參與討論
BLACKHILL
雙機(jī)通訊的例子,一回貼出來,供參考
 
9樓: >>參與討論
goof
有電路圖可以給一份嗎?
gooftrue@163.com

參與討論
昵稱:
討論內(nèi)容:
 
 
相關(guān)帖子
PIC 運(yùn)算子程序(2)
急問
關(guān)于PHILIPS單片的一點(diǎn)問題!
哪位好心人告訴我16F84最低價(jià)錢?多謝了!
福建高齊的Picmate2002和哪種c編譯器聯(lián)合使用,怎么用?請(qǐng)指教
免費(fèi)注冊(cè)為維庫電子開發(fā)網(wǎng)會(huì)員,參與電子工程師社區(qū)討論,點(diǎn)此進(jìn)入


Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號(hào)