日韩床上生活一级视频|能看毛片的操逼网站|色悠悠网站在线观看视频|国产免费观看A淫色免费|国产av久久久久久久|免费A级视频美女网站黄|国产毛片av日韩小黄片|热久久免费国产视频|中文字幕无码色色|成人在线视频99久久久

機電之家資源網(wǎng)
單片機首頁|單片機基礎(chǔ)|單片機應(yīng)用|單片機開發(fā)|單片機文案|軟件資料下載|音響制作|電路圖下載 |嵌入式開發(fā)
培訓(xùn)信息
贊助商
PIC單片機編程漫談(一)
[1] [2]  下一頁
PIC單片機編程漫談(一)
 更新時間:2008-8-17 19:44:40  點擊數(shù):8
【字體: 字體顏色

拋磚引玉:PIC單片機編程漫談(一) 
 
   
PIC的編程是比較簡單的,但是對于初學(xué)者來說還是有些概念不太容易理解,從而影響編程。例如,PIC單片機初學(xué)者在編寫程序時就比較容易在BANK設(shè)置和PC操作上出錯。

1、  BANK設(shè)置錯誤:

先來看一段程序:

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

……

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

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

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

2、  PC操作錯誤:

在進(jìn)行查表操作時需要對PCL進(jìn)行操作,這項操作也比較容易出錯。舉個例子來說:

……

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

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

  • 上一篇: [轉(zhuǎn)載]基于 TLC2543設(shè)計的采集系統(tǒng)
  • 下一篇: [轉(zhuǎn)載]基于單片機的OLED顯示器的應(yīng)用
  • 發(fā)表評論   告訴好友   打印此文  收藏此頁  關(guān)閉窗口  返回頂部
    熱點文章
     
    推薦文章
     
    相關(guān)文章
    網(wǎng)友評論:(只顯示最新5條。)
    關(guān)于我們 | 聯(lián)系我們 | 廣告合作 | 付款方式 | 使用幫助 | 機電之家 | 會員助手 | 免費鏈接

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

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

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