Re: 請問pic 18f 指令的問題
|
||||
---|---|---|---|---|
資深會員
|
發表於: 2006/5/15 13:06
|
|||
|
Re: 請問pic 18f 指令的問題
|
||||
---|---|---|---|---|
資深會員
|
謝謝版主,和個位先進的回答。
PIC18FXXX 的Config. Words 位於程式記憶體位址0x300000 – 30000D __CONFIG可以說是設定晶片的設定configuration bits 請問如果在程式寫下以程式,這樣是否就可以不用在去選 configuration bits?? 還是一樣要選?? __CONFIG _CONFIG1H, 0x02 __CONFIG _CONFIG2L, 0x0C __CONFIG _CONFIG2H, 0x3E __CONFIG _CONFIG3L, 0x3C __CONFIG _CONFIG3H, 0x9D __CONFIG _CONFIG4L, 0x7b __CONFIG _CONFIG5L, 0x0F __CONFIG _CONFIG5H, 0xC0 __CONFIG _CONFIG6L, 0x0F __CONFIG _CONFIG6H, 0xE0 __CONFIG _CONFIG7L, 0x0F __CONFIG _CONFIG7H, 0x40 我是使用18F4431晶片 關於300006h這行__CONFIG _CONFIG4L, 0x7b 是設定0x7b,可是我在configuration bits裡面 沒辦法選到此值.... 謝謝QQ
發表於: 2006/5/15 11:40
|
|||
|
Re: 請問pic 18f 指令的問題
|
||||
---|---|---|---|---|
版主
|
CBLOCK 0x00
C_Hold_Delay Flag_Reg Hex_Temp ENDC CBLOCK / ENDC 是屬於變數的絕對定址語法 (程式的定址為 ORG ) 需事先指定變數的起始位址,也就是程式須特別指定第一個變數的位址,位址的安排由 MPASM 排定,MPLINK 不會被叫用。以上例子, C_Hold_Delay 會被排在 RAM 位址0x00 , Flag_Reg 則排在 0x01,.... 依序排放。 ------------------------------------------------------------------------ UDATA_ACS TABLE_OFFSET1 res 1 TABLE_OFFSET2 res 1 TABLE_OFFSET3 res 1 UDATA_ACS 是指 un-initialize (沒有初始設定值) Data,而ACS 則是宣告變數在 Access Bank (PIC18Fxxx)。不一定要強制指定位址,MPLINK 會自行安排變數位址的,當然要自行指定也可以。通常UDATA需配合RES 指令的操作以保留位址,以上例 TABLE_OFFSET1 RES 1 的意思為保留一個Byte大小RAM 給TABLE_ODDSET1 邊數。 ------------------------------------------------------------------------ 有關CBLOCK & UDATA 的使用方式可以參考右邊教育訓練裡的 MPASM 一天講義。
發表於: 2006/5/12 15:39
|
|||
|
Re: 請問pic 18f 指令的問題
|
||||
---|---|---|---|---|
資深會員
|
講明白點
#DEFINE <name> <string> 你就把他當作宣告 <name> = <string> #define SW3 PORTA,4 意思就是說 定義 SW3 = PORTA,4 往後你在程式中寫 SW3 編譯時MPLAB IDE就會自動用 PORTA,4 來代替 SW3 如此一來寫程式比較方便 看的人也清楚你在寫啥 要修改接點時也比較方便 只要改定義就可以把接點改成別隻 而不必整個程式從頭改到尾... 你去書局翻 林容益 所寫的 PIC單晶片進階控制應用(上) 你就知道沒用DEFINE所寫的程式有多難閱讀了 當時剛開始學PIC 看了這一本完全看不懂 (現在也看不懂...認識的代理商FAE也看不懂...) 浪費錢買了一本廢物...
發表於: 2006/5/12 8:47
|
|||
|
Re: 請問pic 18f 指令的問題
|
||||
---|---|---|---|---|
資深會員
|
CBLOCK 0x00
C_Hold_Delay Flag_Reg Hex_Temp ENDC UDATA_ACS TABLE_OFFSET1 res 1 TABLE_OFFSET2 res 1 TABLE_OFFSET3 res 1 請問CBLOCK用法和UDATA_ACS 用法是一樣的? 就是在設定變數位址..然而CBLOCK有設變數起 始位置0X00..但是UDATA_ACS 沒數變數起始 位置..那UDATA_ACS 變術起始位置是多少? ----------------------------- 令外#define我還是看不懂~"~ 這是W400..EX1的內容 #define SW2 PORTB,0 #define SW3 PORTA,4 btfsc SW2 可以寫成 btfsc PORTB,0 這樣嗎?? -------------------------------- 以下是在W400看到的 #DEFINE <name> <string> 在此定義中,<string> 所描述的 文字用<name> 為助憶文字,在 組合語言中可以用<name> 來代 替<string> 以增加程式的閱讀性
發表於: 2006/5/11 22:47
|
|||
|
Re: 請問pic 18f 指令的問題
|
||||
---|---|---|---|---|
版主
|
可以看一下右邊教育訓練下 W401 及 WAP002 教材,裡面有詳細說明。
發表於: 2006/5/11 16:50
|
|||
|
Re: 請問pic 18f 指令的問題
|
||||
---|---|---|---|---|
資深會員
|
;FLAGS bits
#define TIMER0_OV_FLAG 0 #define FLAG_FAULT 1 #define PARAM_DISPLAY 2 #define POSITION_BIT 3 #define OFFSET1_FLAG 4 #define OFFSET2_FLAG 5 #define OFFSET3_FLAG 6 #define MOTOR_DIRECTION 7 關於#define還是不清楚,那上面幾行要怎麼解釋意思? ------------------------------------------------ 還有就是 __CONFIG _CONFIG1H, 0x02 --> 設定 Configuration Register 的燒錄資料 這也是不太懂... 暫存器的燒錄資料是指?? 麻煩在解說一次,謝謝QQ 可以的話是否能舉例一下QQ 謝謝
發表於: 2006/5/11 16:07
|
|||
|
Re: 請問pic 18f 指令的問題
|
||||
---|---|---|---|---|
版主
|
LED parameters
#define LED_PORT PORTD --> PORTD 用 LED_PORT 的名稱代替 #define RUN_STOP_LED 1 --> 條件是編譯用,設定RUN_STOP_LED 1 已經定義過,判斷時條件會成立 #define FWD_REV_LED 2 --> 同上 ----------------------------------- __CONFIG _CONFIG1H, 0x02 --> 設定 Configuration Register 的燒錄資料 __CONFIG _CONFIG2L, 0x0C __CONFIG _CONFIG2H, 0x3E ------------------------------------ extern PidInitialize --> PidInitialize 其它程式所宣告過的副程式,變數 或函數,由Linker去安排它們的位址 extern percent_err
發表於: 2006/5/10 16:59
|
|||
|
請問pic 18f 指令的問題
|
||||
---|---|---|---|---|
資深會員
|
;LED parameters
#define LED_PORT PORTD #define RUN_STOP_LED 1 #define FWD_REV_LED 2 ----------------------------------- __CONFIG _CONFIG1H, 0x02 __CONFIG _CONFIG2L, 0x0C __CONFIG _CONFIG2H, 0x3E ------------------------------------ extern PidInitialize extern percent_err ------------------------------------- 以上幾個,看不懂意思,麻煩各位先進,幫忙解答 謝謝QQ
發表於: 2006/5/9 10:11
|
|||
|