機(jī)電之家資源網(wǎng)
單片機(jī)首頁(yè)|單片機(jī)基礎(chǔ)|單片機(jī)應(yīng)用|單片機(jī)開發(fā)|單片機(jī)文案|軟件資料下載|音響制作|電路圖下載 |嵌入式開發(fā)
培訓(xùn)信息
贊助商
PIC單片機(jī)的bank和PC的出錯(cuò)問題
PIC單片機(jī)的bank和PC的出錯(cuò)問題
 更新時(shí)間:2009-12-10 13:33:51  點(diǎn)擊數(shù):0
【字體: 字體顏色
1、 BANK設(shè)置錯(cuò)誤:

先來看一段程序:

include <p16f877.inc>

PORTDB EQU 20H

……

START

movlw b‘11110000’

movwf PORTDB

clrf TRISD

MAIN

bcf STATUS,C

rlf PORTDB,1

btfsc STATUS,C

bsf PORTDB,0

movf PORTDB,W

movwf PORTD

call DELAY

goto MAIN

……

上面的是一個(gè)將D口的發(fā)光二極管循環(huán)點(diǎn)亮的小程序,實(shí)際運(yùn)行發(fā)現(xiàn)并不能達(dá)到點(diǎn)亮的效果。通過設(shè)置斷點(diǎn)和觀察變量的手段發(fā)現(xiàn),單片機(jī)在執(zhí)行“clrf TRISD”這一語句后,TRISD寄存器的值為0FFH,而PORTD的值被清成了0。這是因?yàn)槲丛O(shè)置BANK的緣故,此時(shí)BANK=0,而TRISD寄存器卻是位于BAKN1的。因此,在該語句前要加上一句“bsf STATUS,RP0”,使BANK=1。

經(jīng)過改動(dòng),運(yùn)行后發(fā)現(xiàn)程序仍然不正常。同樣使用設(shè)置斷點(diǎn)和觀察變量的手段來分析程序,發(fā)現(xiàn)同樣由于BANK設(shè)置的錯(cuò)誤,單片機(jī)并未對(duì)位于BANK0的PORTD、 PORTDB操作。因此,在該語句前要加上一句“bcf STATUS,RP0”,使BANK=0。經(jīng)過這樣的調(diào)整后,程序運(yùn)行正常了。

實(shí)際上,這樣的錯(cuò)誤很容易發(fā)生,在編寫比較復(fù)雜的需要常常切換BANK的程序時(shí)更是如此。建議初學(xué)者在寫程序時(shí)在有可能的情況下,在每次對(duì)BANK0以外的寄存器操作完成后都將BANK切換回BANK0。這樣做雖然會(huì)麻煩一些,但會(huì)減少錯(cuò)誤的發(fā)生,使調(diào)試更為簡(jiǎn)單一些。

2、 PC操作錯(cuò)誤:

在進(jìn)行查表操作時(shí)需要對(duì)PCL進(jìn)行操作,這項(xiàng)操作也比較容易出錯(cuò)。舉個(gè)例子來說:

……

00CA bcf PCLATH,0

00CB movf RTCCSIG,W

00CC addwf PCL,1

00CD goto main

00CE goto RtccS1

00CF goto RtccS2

00D0 goto Rtccs3

00D1 goto Rtccs4

……

0130 bsf PCLATH,0

0131 movf RTCCSIG1,W

0132 addwf PCL,1

0133 goto SetHour

0134 goto SetMins

……

上面的程序是高奇ICD教學(xué)實(shí)驗(yàn)套件的演示程序CLKTEST.ASM編譯完成之后的List文件中的一段,前面的4位數(shù)據(jù)是16進(jìn)制數(shù),代表了該程序行在單片機(jī)內(nèi)程序存儲(chǔ)器的裝載位置。其中00CA句和0130句保證了執(zhí)行“addwf PCL,1”語句后PC能跳轉(zhuǎn)到正確的位置,感興趣的朋友可以將這兩句屏蔽后看一下結(jié)果。

在PIC16F877單片機(jī)中PCLATH寄存器是一個(gè)低5位有效的寄存器,單片機(jī)在執(zhí)行“addwf PCL,1”語句時(shí),會(huì)將PCLATH和PCL寄存器的值(PCLATH:PCL)一起送入程序計(jì)數(shù)器PC。以上面的程序0132H句為例,此時(shí)PCL=32H如果此時(shí)PCLATH=00H,RTCCSIG1=1則執(zhí)行完該句后PC=PCLATH:PCL=0033H,這樣在下一個(gè)指令周期到來時(shí)就發(fā)生了錯(cuò)誤。本來該執(zhí)行第0134H句的,卻變成了執(zhí)行第0034H句。同樣的,我們能夠知道第00CAH句的作用。避免發(fā)生這樣錯(cuò)誤的方法是:在調(diào)試程序的時(shí)候調(diào)出List文件,特別關(guān)注一下有這類操作的語句,再根據(jù)實(shí)際的情況來決定PCLATH的值。

  • 上一篇: PIC單片機(jī)或運(yùn)算指令XORWF的應(yīng)用
  • 下一篇: 沒有了
  • 發(fā)表評(píng)論   告訴好友   打印此文  收藏此頁(yè)  關(guān)閉窗口  返回頂部
    熱點(diǎn)文章
     
    推薦文章
     
    相關(guān)文章
    網(wǎng)友評(píng)論:(只顯示最新5條。)
    關(guān)于我們 | 聯(lián)系我們 | 廣告合作 | 付款方式 | 使用幫助 | 機(jī)電之家 | 會(huì)員助手 | 免費(fèi)鏈接

    點(diǎn)擊這里給我發(fā)消息66821730(技術(shù)支持)點(diǎn)擊這里給我發(fā)消息66821730(廣告投放) 點(diǎn)擊這里給我發(fā)消息41031197(編輯) 點(diǎn)擊這里給我發(fā)消息58733127(審核)
    本站提供的機(jī)電設(shè)備,機(jī)電供求等信息由機(jī)電企業(yè)自行提供,該企業(yè)負(fù)責(zé)信息內(nèi)容的真實(shí)性、準(zhǔn)確性和合法性。
    機(jī)電之家對(duì)此不承擔(dān)任何保證責(zé)任,有侵犯您利益的地方請(qǐng)聯(lián)系機(jī)電之家,機(jī)電之家將及時(shí)作出處理。
    Copyright 2007 機(jī)電之家 Inc All Rights Reserved.機(jī)電之家-由機(jī)電一體化網(wǎng)更名-聲明
    電話:0571-87774297 傳真:0571-87774298
    杭州濱興科技有限公司提供技術(shù)支持

    主辦:杭州市高新區(qū)(濱江)機(jī)電一體化學(xué)會(huì)
    中國(guó)行業(yè)電子商務(wù)100強(qiáng)網(wǎng)站

    網(wǎng)站經(jīng)營(yíng)許可證:浙B2-20080178-1