Re: [求教] 12F508 GP2 GP3 無法變更其值!!
|
||||
---|---|---|---|---|
新會員
![]() ![]() |
MOVLW 0x3C
TRIS GPIO MOVWF GPIO <--此行執行後,GPIO=0X00 並沒寫入0x3C值 ^^^^^^^^^^^^^^^^^^^^^^^^ 0x3C = b'111100' 因為GP2,GP3,GP4,GP5都是輸入。 所以GPIO沒辦法寫入0x3C BTFSC GPIO,GP3 <--故此行偵測還是0 ^^^^^^^^^^^^^^^^^^^^^^ 若沒有更改過定義的話,應該要下btfsc GPIO,3 你用BTFSC GPIO,GP3 這樣compiler會過嗎? 把你的程式稍改一下,是沒有問題的,給你參考嚕 ORG 0x00 NOP MOVWF OSCCAL MOVLW 0x3C TRIS GPIO movlw b'000011' MOVWF GPIO Loop bcf GPIO,1 BTFSC GPIO,3 ;<--- 問題處 bsf GPIO,1 goto Loop
發表於: 2008/4/29 13:03
|
|||
|
Re: AD轉換問題
|
||||
---|---|---|---|---|
新會員
![]() ![]() |
透過PWM輸出,經RC便可得到一類比準位。
你可以參考AN538這一份Application Notes. http://ww1.microchip.com/downloads/en/AppNotes/00538c.pdf
發表於: 2008/3/19 9:32
|
|||
|
Re: 程式穩定度debug的問題
|
||||
---|---|---|---|---|
新會員
![]() ![]() |
我會先把各功能(你的按鍵)切割開來
讓範圍縮小。 獨立去TRY,確定OK以後 再一個一個整合起來。 如果一開始的架構就構思得不錯的話,會比較好DEBUG。 希望有幫上你的忙。 GOOD LUCK~~
發表於: 2008/2/12 15:13
|
|||
|
Re: HI-TECH PICC 陣列操作疑問
|
||||
---|---|---|---|---|
新會員
![]() ![]() |
問題已解決,是COMPILER的問題。
後來把PICC 9.6改為PICC 8.05後,編出來的碼就正確了。 沒親眼見到,還真是難以相信呀。 特地上來分享一下這個經驗。 也特別感謝taiwanuser大大的幫忙嚕。
發表於: 2007/10/3 12:03
|
|||
|
Re: HI-TECH PICC 陣列操作疑問
|
||||
---|---|---|---|---|
新會員
![]() ![]() |
Array[]宣告為unsigned char
完整code如下: thanks. ----------------------------------------------------------------------- #include <pic.h> __CONFIG (INTRCRB4 & PROTECT & WDTDIS & MCLRDIS); unsigned char i; unsigned char j; unsigned char Array[6]; //---------------------------------------- void InitMCU(void) { OSCCAL=0b0000000; TRISB=0b011011; PORTB=0; TRISC=0b000000; PORTC=0; OPTION=0b10000111; return; } //---------------------------------------- void main(void) { InitMCU(); for(i=0;i<=5;i++){ Array[i]=i; } while(1){ continue; } }
發表於: 2007/10/1 11:31
|
|||
|
HI-TECH PICC 陣列操作疑問
|
||||
---|---|---|---|---|
新會員
![]() ![]() |
Dear All :
目前在使用PICC做陣列操作時,發現一個有疑問的現象如下: compiler:HI-TECH PICC 9.60 Lite Device:PIC16F505 先宣告一個Array[6]。 當後面我如此做時 for(i=0;i<=5;i++){ Array[i]=i; } 結果Array[0]~Array[5]=0。(錯誤) 於是我把Array[i]=i;改為一個定值Array[i]=0xab; 結果Array[0]~Array[5]=0xab。(正確) 分析Disassembly Listing的結果發現。 只要我把Array[i]=i 等號後面為變數時(不管是i,j,k)則編出來的碼會多了一行CLRF FSR的動作,導致i要丟入INDF時,FSR所指位置已經被清除了。 --------------------------------------------------------------------- 有疑問的部份: C code: for(i=0;i<=5;i++){ Array[i]=i; } Disassembly: 79: for(i=0;i<=5;i++){ 1EF 064 CLRF 0x4 1F0 071 CLRF 0x11 1F1 C06 MOVLW 0x6 1F2 091 SUBWF 0x11, W 1F3 603 BTFSC 0x3, 0 1F4 BFF GOTO 0x1ff 1FD 2B1 INCF 0x11, F 1FE BF1 GOTO 0x1f1 80: Array[i]=i; 1F5 211 MOVF 0x11, W 1F6 038 MOVWF 0x18 1F7 C12 MOVLW 0x12 1F8 1D1 ADDWF 0x11, W 1F9 024 MOVWF 0x4 1FA 064 CLRF 0x4 <--- 就是這一行。 1FB 218 MOVF 0x18, W <--- FSR已被清除,故此兩行所寫入位置為錯的。 1FC 020 MOVWF 0 81: } --------------------------------------------------------------------- 改為常數則無此問題: for(i=0;i<=5;i++){ Array[i]=0xab; } 79: for(i=0;i<=5;i++){ 1F1 064 CLRF 0x4 1F2 071 CLRF 0x11 1F3 C06 MOVLW 0x6 1F4 091 SUBWF 0x11, W 1F5 603 BTFSC 0x3, 0 1F6 BFF GOTO 0x1ff 1FC 064 CLRF 0x4 1FD 2B1 INCF 0x11, F 1FE BF3 GOTO 0x1f3 80: Array[i]=0xab; 1F7 C12 MOVLW 0x12 1F8 1D1 ADDWF 0x11, W 1F9 024 MOVWF 0x4 <--- 設定好FSR後 1FA CAB MOVLW 0xab <---緊接著0xab寫入INDF 1FB 020 MOVWF 0 81: } --------------------------------------------------------------------- 我在想Array[i]=i; 似乎只是基本的C語法。 這算是compiler的問題嗎? 或著有其他語法可以達成類似的動作? 想請教各位是否有遇過這種現象呢? 感謝各位撥時間看完落落長這篇。 Thanks.
發表於: 2007/10/1 10:48
|
|||
|