Re: PIR1 SFR
|
||||
---|---|---|---|---|
中級會員
|
movwf Z ???....
這樣子的話,Z不就變成使用者變數,PIC 沒有限定自定變數 不能用公用變數的名稱嗎? 附帶一提,假若在inc.檔,不做特別說 Z 為第二個bit... mark 起來,這樣子可以嗎?
發表於: 2009/6/5 12:55
|
|||
|
Re: PIR1 SFR
|
||||
---|---|---|---|---|
版主
|
如果我程式這樣寫 btfss 0x03,2 還是這樣寫 btfss STATUS,Z
這兩種寫法哪種比較易讀? PCL 是等於 RAM 位址 0x02,而 Z 卻是定義為 bit 2 的位元,當然 Z equ .2 也是可以說 2 用 Z 這個符號來取代,至於是位址、常數或位元值納是要看你所使用的指令而定。 movlw Z ??? movwf Z ??? btfss PORTC,Z ??? 以上的指令都用到 Z 的符號,請問這三者的差異在哪?
發表於: 2009/6/5 12:03
|
|||
|
Re: PIR1 SFR
|
||||
---|---|---|---|---|
中級會員
|
STATUS EQU 03H ;Status Flag
C equ .0 ;Carry Flag DC equ .1 ;Digit Carry Flag Z EQU .2 ;Zero Flag ------------------------------------------ 請教一個關乎 pic的問題 上面三行是從pic 的標頭檔擷取起來的,定義了 status 的位址,底下說明了它的內容值第幾個bit 代表的涵義, 我的問題點是,我把這一個標頭檔 include 進來,debug模式下,看到 0x02 這個位址 同時存在於 PCL 跟 Z 請問 像這樣子的狀況是正確的嗎? 還是我再使用這一個 .inc 檔 時,我要額外把 C DC Z ,類似 SFR 底下的描述bit 的作用,前面加上註解符號 。 謝謝
發表於: 2009/6/5 9:06
|
|||
|
Re: PIR1 SFR
|
||||
---|---|---|---|---|
版主
|
基本上是會改到了因為是同一位址。不過沒有人會這樣做,因為這樣做是錯誤的動作,有經驗的設計師是不會這樣搬石頭在砸自己的腳的。
發表於: 2009/6/4 13:24
|
|||
|
Re: PIR1 SFR
|
||||
---|---|---|---|---|
中級會員
|
請問,像這樣子位址設定一樣,這樣子假若改變其中一個相同名稱變數的值,會不會影響到同樣位址的變數(變數名稱不同)
例如 cont equ 0x0c 然後 0x0c 位址原本是PIR1 的位址 MOVLW 5FH ;CLEAR RAM LOOP MOVWF CONT 5FH= 101 1111 這樣子我看watch PIR1也變成b'101 1111 看datasheet PIR1 bit 6: ADIF: A/D Converter Interrupt Flag bit 1 = An A/D conversion completed 0 = The A/D conversion is not complete 這樣子 這個 bit6 會不會因為 這樣設定為 0 而對整個 mcu的動作有影響到 還是縱使有設定到,但是併沒有影響,因為現在動作還沒需要到這裡,也沒有做這一個bit的測試值。 謝謝
發表於: 2009/6/3 9:14
|
|||
|
Re: PIR1 SFR
|
||||
---|---|---|---|---|
版主
|
參照:
變數的宣告有多種方式,當然也可以單一位址使用多種變數名稱,所以 Watch 在顯示該位址時會同時把所有該位址的變數名稱依起顯示出來,但他們都視同一個變數即使名稱不同。 CCPR1 是 Capture Compare PWM Register 它有分成 Hi/Low 兩個 Byte,證卻宣告名稱為 CCPR1L & CCPR1H,詳細請參考 PWM 的方塊圖。
發表於: 2009/6/2 18:52
|
|||
|
Re: PIR1 SFR
|
||||
---|---|---|---|---|
中級會員
|
請問有人知道嗎???...
發表於: 2009/6/2 10:37
|
|||
|
Re: PIR1 SFR
|
||||
---|---|---|---|---|
中級會員
|
為何我跑程式,
由Step into 執 行 DECFSZ CONT,1 然後CONT 就直接由0x40-->0x07 請問這是音為什麼緣故呢?謝謝
發表於: 2009/6/2 10:35
|
|||
|
Re: PIR1 SFR
|
||||
---|---|---|---|---|
中級會員
|
謝謝 板主
PIR1 — ADIF — — — CCP1IF TMR2IF TMR1IF -0-- -000 0 1 0 0 0 0 1 1 ...再請教一個問題,不好意思,請問程式一開始並沒有include file 所以SFR 的位址指定,用EQU 寫在主程式裡,但 有些宣告時 名稱跟我們宣告時的SFR名稱並不一樣,所以用watch 看的時候會看到 大約在SFR 所在的位址區間,同一個位址有2種以上的變數名稱,所以 在一開始宣告一個變數CONT 所在位址與 PIR1一樣,才會碰到上面的問題點,請問這樣子與SFR 宣告一樣的位址,但是名稱不同,其用意大部分是為了什麼呢? 且還碰到在watch 看到一個SFR 上同一個位址有三個變數宣告 ,有一個變數名稱在程式裡並沒有看到這個變數宣告, 查datasheet 看不到這個變數CCPR1,這是音為什麼關係呢 謝謝您
發表於: 2009/6/1 18:51
|
|||
|