全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:3835
推到 Plurk!
推到 Facebook!

PIC程式碼的意思 晶片16F877 Microchip軟體撰寫

缺席
dou
一般會員


發表:1
回覆:1
積分:0
註冊:2008-06-05

發送簡訊給我
#1 引用回覆 回覆 發表時間:2008-06-06 10:49:15 IP:59.113.xxx.xxx 訂閱
不好意思來請教各位

下列這段程式碼是Microchip MATLAB IDE撰寫的 目前不接任何硬體只有單純的監控及模擬.....

我先解說一下

黑色部份為程式碼
紅色部份為程式碼意思註解(有可能會不對)
藍色部份為程式意思,但我不太瞭解意思

我想請各位幫我看一下
:PS:我有把書看過 第一次看這程式想瞭其中的意思跟觀念
;----I/O Port Application-------------------- (未知)
;----LED Output control to PORTD------------- (未知)
;----利用clrf PORTDInitialize PORTD ------ (未知)
;-----by clearing output data latch----------- (未知)

list p=16f877 (目錄控制) ;PIC型號及標頭檔宣告

#include16f877.inc> (表逃檔或定義檔)
org 0x00 (ROM位址2進位)[0000 00002 ] ;程式起始位址

MAIN: ;主程式

bcf STATUS,RP0 (清除STATUS,PRO位元) ;Bank0 (選擇分頁0)
bcf STATUS,RP1 (清除STATUS,PR1位元) bsc:位元清除(最右邊向左邊依序清bit)位元清為0

clrf PORTD (清除PROTD) ;Initialize PORTD by clearing (?什麼清除PORTD)
; output data latch (輸出資料栓鎖)

bsf STATUS,RP0 (bsf:位元設定為1) ;select bank1 (選擇分頁1)

movlw 0x00 (把常數0x00存入暫存器K-W關係) ;value used to initialize data (未知)
;direction (未知)

movwf TRISD (把暫存器內的值移到ROM位址W-F關係,TRISD是暫存器)
;set PORTD as output (設定PORTD為輸出)

bcf STATUS,RP0 (清除STATUS,PR0位元) ;select bank0 (選擇分頁0)

movlw 0x01 (把常數0x01存入暫存器[TRISD]K-W關係)

movwf PORTD (把暫存器內的值移到ROM位址W-F關係,PROTD是暫存器)

end (程式結束)

sansam
高階會員


發表:4
回覆:141
積分:164
註冊:2007-08-20

發送簡訊給我
#2 引用回覆 回覆 發表時間:2008-06-06 10:55:25 IP:125.230.xxx.xxx 訂閱
那是設定PORT的程序
TRISD是設定PORTD輸出入方向
如TRISD為0時 是為輸出 為1時 是為輸入

movwf PORTD =>是把工作站存器W的內容丟給PORTD作為輸出狀態

CC5X語法如下:
TRISD=0x00; ; 設定PORTD為輸出
PORTD=0b11000011; ; 1為hight 0為low
PORTD.6=0; ; 設定PORTD第六腳為Low

我的部落格整理好後將會有完整的CC5X語法說明,請參觀
http://tw.myblog.yahoo.com/jw!AAYcxeeBERmYSYUKUEqzAgU-/

一般C語言是不用考慮換bank的步驟
編譯時會自動切換

其它如CCSC等語法,可以參考
一開始學組合語言會建立很好觀念,不過很累
編輯記錄
sansam 重新編輯於 2008-06-06 11:01:45, 註解 無‧
sansam 重新編輯於 2008-06-06 11:05:33, 註解 無‧
sansam 重新編輯於 2008-06-06 13:45:19, 註解 無‧
kagaya
中階會員


發表:74
回覆:175
積分:59
註冊:2002-12-28

發送簡訊給我
#3 引用回覆 回覆 發表時間:2008-06-06 14:33:34 IP:211.21.xxx.xxx 訂閱
 
;----I/O Port Application-------------------- (未知)
;----LED Output control to PORTD------------- (未知)
;----利用clrf PORTD來Initialize PORTD ------ (未知)
;-----by clearing output data latch----------- (未知)

;後面接的是註解

bcf STATUS,RP0 (清除STATUS,PRO位元) ;Bank0 (選擇分頁0)
bcf STATUS,RP1 (清除STATUS,PR1位元) bsc:位元清除(最右邊向左邊依序清bit)位元清為0

這兩個指令就等同於 banksel PORTD


movlw 0x00 (把常數0x00存入暫存器K-W關係) ;value used to initialize data (未知)
movwf TRISD (把暫存器內的值移到ROM位址W-F關係,TRISD是暫存器)

讓PORTD都是Output

movlw 0x01 (把常數0x01存入暫存器[TRISD]K-W關係)
movwf PORTD (把暫存器內的值移到ROM位址W-F關係,PROTD是暫存器)

點亮位於RD0的LED




------
KUSO 無處不在
編輯記錄
kagaya 重新編輯於 2008-06-06 14:34:43, 註解 無‧
dou
一般會員


發表:1
回覆:1
積分:0
註冊:2008-06-05

發送簡訊給我
#4 引用回覆 回覆 發表時間:2008-06-06 22:46:03 IP:59.113.xxx.xxx 訂閱
不好意思兩位大大

我發的帖是想請教我寫的註解內容意思是不是對的

我把它翻成中文的

但是我第一次看到此程式 有些不瞭解..

藍色部份是不確定或不清處
紅色部份是依書上及我自己理解寫的(書上沒有此程式碼)

我是看書上指令拼揍的

^^"

麻煩囉....
編輯記錄
dou 重新編輯於 2008-06-06 22:46:48, 註解 無‧
系統時間:2016-08-25 15:53:42
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!