新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > SN 8 位單片機 SN8P2743 應用實踐(2)

        SN 8 位單片機 SN8P2743 應用實踐(2)

        作者: 時間:2016-12-02 來源:網絡 收藏


        ===========================================================

        使用 2743 不能對 P0.N 位操作的問題
        在使用 SN8P2743 時,代碼里有:
        BSET FP03
        BCLR FP03
        這樣的指令,結果,編譯器提示出錯! "Only can use MOV command to change the Bit.."
        查閱芯片手冊,對 I/O 配置描述是:
        IO 引腳配置
        雙向輸入輸出IO 口:P0、P1、P4
        具有喚醒功能的IO 口:P0、P1 電平變換
        具有上拉電阻的IO 口:P0、P1、P4
        OP-amp/比較器引腳:P1、P4
        ADC 輸入引腳:P4.0~P4.7
        這里,沒有看見我為什么遇見的問題所在!
        又查閱軟件文件夾里的 SN8P2743.INC 文件,文件里對 P0 口的內容如下:

        P0M EQU 0B8H
        FP06M EQU P0M.6
        FP05M EQU P0M.5
        FP03M EQU P0M.3
        FP02M EQU P0M.2
        FP00M EQU P0M.0
        P0 EQU 0D0H
        FP06 EQU P0.6
        FP05 EQU P0.5
        FP04 EQU_R P0.4;只讀
        FP03 EQU P0.3
        FP02 EQU P0.2
        FP01 EQU_W P0.1 ;只寫
        FP00 EQU P0.0
        留意到,P0 端口有一位只讀,有一位只寫! ----- 對一組端口里有只讀位的,并不會影響其它位的位操作,是不是有只寫位就不行了呢?
        又再查閱芯片手冊,在引腳說明里看見只寫位 FP01 :

        P0.1/PWM0 I/O P0.1:漏極開路的輸出引腳。PWM0:PWM輸出引腳和脈沖輸出引腳。

        再看看對端口 P0 的系統寄存器內容:

        I/O 口模式
        寄存器PnM 控制I/O 口的工作模式。
        0B8H Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0
        P0M - P06M P05M - P03M P02M - P00M
        讀/寫 - R/W R/W - R/W R/W - R/W
        復位后 - 0 0 - 0 0 - 0
        I/O 口數據寄存器 P0
        0D0H Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0
        P0 - P06 P05 P04 P03 P02 P01 P00
        讀/寫 - R/W R/W R R/W R/W W R/W
        復位后 - 0 0 0 0 0 0 0

        注:
        1、當通過編譯選項使能外部復位時,P04 保持為1。
        2、若需要設置P0 寄存器的某位(P0.n)時,建議使用“MOV”或者“B0MOV”指令,而不要使用“read & modify write(讀-改寫)”型的指令(如,BSET、BCLR、B0BSET、B0BCLR…),否則執行這些指令后,P0 寄存器的只寫位P0.1 會被更改。
        原來問題是:
        如果一組端口有某位為只寫位,為了避免位操作指令的"讀-改寫"破壞只寫位的狀態,因此,對這組端口的其它位不能使用位操作指令!
        這種情況很少遇見,芯片手冊里 I/O 配置說明也不夠具體和明確,
        ----- 為避免使用 2743 時出現類似麻煩,特貼出供大家參考!

        =============================================================

        注意 2743 的 P0 端口使用問題與解決方法:
        最近使用 2743 做項目,其 P0 口的使用確實遇見一些麻煩事!
        首先,它的 P0.1 是只能作為輸出使用.屬于開漏輸出.(普通I/O模式時).不能輸出高電平!
        其次,這組端口不能使用位操作指令,非常的不方便!
        如果使用它做數碼管筆段驅動,低電平有效,如果包含小數點位置在內,是不能通過位操作指令快捷設置的!
        先把端口狀態讀進來,到一個臨時 RAM ,然后操作這個小數點,之后再送回到 P0 口!
        此時,會出現錯誤, P0.1 這位狀態會出錯!
        利用 AND 與 OR 等指令配合來操作,仍然會出現錯誤! --- 有點莫名其妙!
        注意了: 偏偏在仿真器上沒有這些錯誤,都是燒寫芯片后才發現錯誤!
        冷靜下來,重新閱讀芯片手冊,終于幡然大悟! ---- P0.1 是只寫位,不能讀! 讀進來就是錯的!
        凡是經過"讀--改--寫"過程的指令,操作它都會出錯!
        解決辦法:
        使用一個 P0 口的"影子"寄存器 EME,專門對付操作 P0 口的輸出. 這樣,不僅僅方便了,也與其它芯片做法一致了!所有對 P0 口的輸出操作都變成對這個影子寄存器的操作,之后再及時" MOV_ P0,EME"去!
        經過這樣處理,較好地避免了對 P0 口操作出錯的問題. ------ 輸入模式下可以逐位讀入,僅僅 P0.1 不能讀!

        =========================================================

        SN8P2743 的比較器初試
        SN8P2743 芯片內部帶有 3 個比較器,今天,終于抽空對其進行了一些測試.
        3 個比較器匯編叫做比較器 0 ,比較器 1 ,比較器 2 .
        3 個比較器都是軌到軌輸出的,就是在 5V 供電下,高/低電平輸出幅度幾乎達到 5V 和 GND 電平!
        (芯片內部還有一個放大器,放大器的測試已經發布過帖子了!)
        3 個比較器都可以作為普通比較器使用或特殊比較器器使用. 所謂特殊就是可以觸發或停止 TC0 定時器的 PWM 輸出脈沖.
        與常規集成電路比較器更多選擇的是,可以選擇比較器翻轉方向和進入中斷! 可以選擇是否使用比較器輸出的引腳(與普通 I/O 口共享). 如果不用硬件引腳,就僅僅是軟件內部處理結果或數據,則可以節省 3 個 I/O 口. 這是一大特色!
        而比較器 1 和比較器 2 更有意思,可以軟件選擇內部參考到同相輸入作為參考電壓,此時,也可以不用硬件引腳,成為功能齊全而僅僅一個外接引腳的比較器! -------- 太棒了!
        比較器是進行 2 個電壓比較大小的重要元件,我對比較器 0 進行測試,方法是:
        使用 2 個 1% 精度 3K 的電阻,串聯后接到 5V 與 GND ,中間就是 5V/2 了,把這個 2.5V 接到比較器 0 的反相輸入引腳,然后,利用微調定位器給比較器 0 的同相輸入電壓, 用數字萬用表實時測量 2 個輸入引腳的電壓差, 并且讓其比較輸出低電平時或高電平時進入中斷,結果都是 OK 的!
        它還可以選擇延時輸出,但是我沒有使用,一律不用延時輸出.
        而其比較的動作電壓,一開始感覺有些大,高達上百 mV ! 查閱手冊,分別給 2 個輸入端口加上一只 1u 的濾波電容器, 結果,翻轉電壓差下降到僅僅 0.6~0.8mV 左右. ------ 就是在 5/2=2.5V 電壓附近, +0.8V,輸出=5V, -0.8V 輸出=0 !

        上一頁 1 2 下一頁

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 临漳县| 囊谦县| 蓬安县| 六盘水市| 仁布县| 碌曲县| 彩票| 南汇区| 佛教| 崇仁县| 定陶县| 玛曲县| 静宁县| 偃师市| 图片| 板桥市| 刚察县| 满城县| 阿拉善右旗| 巩义市| 长春市| 镇江市| 武强县| 黑河市| 铜川市| 涡阳县| 乐东| 辰溪县| 邢台市| 息烽县| 扬州市| 彝良县| 平邑县| 白沙| 祁门县| 林周县| 阳曲县| 岳西县| 上栗县| 萍乡市| 安溪县|