• <li id="00i08"><input id="00i08"></input></li>
  • <sup id="00i08"><tbody id="00i08"></tbody></sup>
    <abbr id="00i08"></abbr>
  • 新聞中心

    EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > PIC單片機(jī)的讀/修改/寫(xiě)問(wèn)題及解決方案

    PIC單片機(jī)的讀/修改/寫(xiě)問(wèn)題及解決方案

    作者: 時(shí)間:2012-06-10 來(lái)源:網(wǎng)絡(luò) 收藏

    何謂讀--寫(xiě),導(dǎo)致的及其解決之道:

    本文引用地址:http://www.czjhyjcfj.com/article/171318.htm

      只要micro的命令,所處理的FILE (暫存器,內(nèi)存,和I/O的統(tǒng)稱),其最終的值,和命令處理前的值有關(guān),那么,這種命令便是所謂的讀--寫(xiě)命令。因?yàn)檫@類命令的操作,可以再細(xì)分為三個(gè)小步驟,即是讀(READ),(MODIFY),接著才是寫(xiě)(WRITE)。

      如:ADDWF,DECF,IORWF,XORWF,BSF,BCF,EE等等皆是。

      在使用這類命令的時(shí)候,如果所處理的FILE是I/O, 就必須要特別小心。因?yàn)椋僭O(shè)任務(wù)電壓為5V;而您在PORTB的8支腳,沒(méi)有串接電阻,分別接了8顆二極管(也許是LED)到地。如果,您在先前下了BSF PORTB,0這條命令,使得PORTB第0腳上的LED亮了。當(dāng)您再運(yùn)行了”BSF PORTB,1這條命令后,雖然PORTB第1腳上的LED亮了,但是,PORTB第0腳上的LED卻會(huì)熄掉。原因是因?yàn)?,運(yùn)行”BSF PORTB,1”時(shí),會(huì)先將整個(gè)PORTB的值往回讀,而它讀到的PORTB第0腳,卻是相當(dāng)於低電位(被二極管拉為0.7V)。當(dāng)它再把整個(gè)PORTB的值寫(xiě)出去的時(shí)候,PORTB第0腳就被寫(xiě)成低電位,自然燈就熄了。

      解決之道是:串電阻,或者不要直接對(duì)I/O作讀-修改-寫(xiě)命令。

      另外還有一類要注意的狀況是:如當(dāng)您將”BSF PORTB,0”和”BSF PORTB,1”兩條命令連在一起,沒(méi)有空運(yùn)行時(shí),縱使您沒(méi)有上一段所述線路設(shè)計(jì)不良之狀況,有時(shí)候您也會(huì)發(fā)現(xiàn)PORTB, 0的高電位也會(huì)不見(jiàn)了。導(dǎo)致這個(gè)現(xiàn)象的原因是:因?yàn)橐苍S您這兩支腳的外面接了長(zhǎng)導(dǎo)線,有相當(dāng)大的電容、電感性會(huì)阻止電位的變化;而且,命令運(yùn)行是在最后1/4周期時(shí)”寫(xiě)出”,而在第一個(gè)1/4周期時(shí)”讀入”,PORTB,0還來(lái)不及升至高電位,便被下一個(gè)命令讀回去了。

      解決之道是:通常在兩道命令間插入個(gè)NOP命令就可以了。



    評(píng)論


    相關(guān)推薦

    技術(shù)專區(qū)

    關(guān)閉
    主站蜘蛛池模板: 新巴尔虎右旗| 罗田县| 安新县| 清丰县| 大英县| 荔波县| 得荣县| 马山县| 宁夏| 长武县| 惠安县| 江油市| 延长县| 德江县| 弥渡县| 丹江口市| 于都县| 册亨县| 大荔县| 瓮安县| 龙游县| SHOW| 开远市| 夏津县| 鲁山县| 平乡县| 盐亭县| 收藏| 贡觉县| 仪陇县| 达孜县| 麻阳| 贺兰县| 营山县| 西安市| 松桃| 宿迁市| 灵川县| 婺源县| SHOW| 桑植县|