Re: pic16F685的問題
|
||||
---|---|---|---|---|
版主
|
"只要是A/D功能的腳全部都不行"
你確定 ADC 的輸入功能有關掉? 會不會 BANK 切錯了?
發表於: 2008/11/5 16:44
|
|||
|
Re: pic16F685的問題
|
||||
---|---|---|---|---|
版主
|
PORTA 的 RA1 有提升電組嗎?
RA0 & RA1 為燒錄腳位,RA1 可以換成 RA2 嗎?
發表於: 2008/11/5 10:03
|
|||
|
Re: pic16F685的問題
|
||||
---|---|---|---|---|
初級會員
|
我有試過對ADC的暫存器做設置,在設完後有正常動作過,但不久就又出現無法讀取的問題。
我的設置為PORTA全拿來做輸入,PORTB和PORTC則為輸出 所以ADC功能disable,且全部設為數位輸出入腳。 banksel TRISA movlw b'11111111' movwf TRISA movlw b'00000000' movwf TRISB movlw b'00000000' movwf TRISC banksel PORTA movlw b'00000000' movwf PORTB movlw b'00000000' movwf PORTC ; set ADC all disable banksel ADCON0 clrf ADCON0 banksel ANSEL clrf ANSEL banksel ANSELH clrf ANSELH 而判斷輸入的程式段為 bottom_state: btfsc PORTA,1 goto bottom_exit movlw 0x09 return bottom_exit: movlw 0x02 之後有把W的內容輸出給7段,照上面程式,如果PORTA的第1腳為0,則輸出2;如果為1的話輸出9。 從模擬的時候去看暫存器,都有符合我的設定,但不知道為什麼無法做In的判斷。 難道是我的設置有問題嗎?
發表於: 2008/11/4 19:03
|
|||
|
Re: pic16F685的問題
|
||||
---|---|---|---|---|
初級會員
|
感謝2位大大的回覆
RB6我是經實驗後確定不能用,至於切回BANK,我的程式經初始化完後就沒切BANK,所以應該不會RB7可以用,RB6不能用吧。 目前還沒試I/O的DISABLE,因為不知道組語的寫法,所以沒有注意,這點說聲抱歉~~~ 等試過後小的會再回來回報結果。
發表於: 2008/11/3 14:50
|
|||
|
Re: pic16F685的問題
|
||||
---|---|---|---|---|
資深會員
|
查表法是否放在中斷內----無差別 ,因為那是一種很快速的程式寫法,不過副程式的呼叫要小心 因為PIC只有8層推疊 所以如果超過 會死的很難看!
查表法是將PCL加上OFFSET 直接跳到返回參數所在的地方直接將參數放進 W 再跳回 所以不能用MOVWF 而要用 ADDWF 同樣道理 所以 ORG 不能放在 ADDWF PCL , F 的後面 INCF FXX 還有一個參數 ( F or W ) ( 將 FXX + 1 的值放回 FXX or W )你沒指定 它當然會給你警告 , 但其內定值 為,F 所以也不算錯的太離譜 PIC 的I/O 接腳有些有多種用途 所以如要將它當作普通I/O 來用, 則要將優先權較高的用法(如A/D)DISABLE 才能將其當作普通I/O 來用 , 這一點可參考 I/O 章節裏的小示範程式 及A/D 章節 你說 RB6 不能用 , 會不會是在胡說八道啊 , 因為這個只是普通I/O , 很單純的 跟本不會有那些問題存在 ...... 還是你忘記切回 BANK0 ????? 正如班主有言, 多看書有益無害.......
發表於: 2008/11/3 3:48
|
|||
|
Re: pic16F685的問題
|
||||
---|---|---|---|---|
版主
|
給個建議,寫程式一定要先讀過 Data Sheet 後再動手。16F685 有 12 個 AD channel 輸入,要先關掉AD輸入的功能。
4.2.1 ANSEL AND ANSELH REGISTERS The ANSEL and ANSELH registers are used to disable the input buffers of I/O pins, which allow analog voltages to be applied to those pins without causing excessive current. Setting the ANSx bit of a corresponding pin will cause all digital reads of that pin to return ‘0’ and also permit analog functions of that pin to operate correctly. The state of the ANSx bit has no effect on the digital output function of its corresponding pin. A pin with the TRISx bit clear and ANSx bit set will operate as a digital output, together with the analog input function of that pin. Pins with the ANSx bit set always read ‘0’, which can cause unexpected behavior when executing read or write operations on the port due to the read-modify-write sequence of all such operations.
發表於: 2008/10/31 9:55
|
|||
|
Re: pic16F685的問題
|
||||
---|---|---|---|---|
初級會員
|
指標消失指的是當模擬時按下F7會有一個綠色的指標,顯示程式執行到何處,就是這個綠色的指標
第2點已解決 後來再試,把查表的部份移動到中斷程式後面就可以了。 ====================================== 新的問題,我想把PORTA的0~2拿來做輸入腳,判斷按鍵,於是寫下下面程式: start: banksel TRISA movlw b'11111111' movwf TRISA . . . main: call bottom_state call LDTAB movwf PORTC . . . bottom_state: btfsc PORTA,1 goto bottom_exit movlw 0x09 return bottom_exit: movlw 0x02 return . . . 目的是想要依PORTA的第1腳來判斷有沒有被按下,以7段來觀察,有被按下則改變輸出。 問題是,當我把PORTA.1的腳接HIGH或LOW,都不會使7段變動,後來試了第0腳、第2腳,PORTB的第4~6腳皆無法動作,只有PORTB的第7腳會有反應,可是我想要的是讓PORTA的0和1腳做輸入...
發表於: 2008/10/30 18:45
|
|||
|
Re: pic16F685的問題
|
||||
---|---|---|---|---|
版主
|
"執行addwf PCL,F後指標就消失了"
1. 不了解你所謂的指標消失為何? "有問題的程式 incf shift" 2. 程式的寫法有錯,正式寫法 incf shift,F
發表於: 2008/10/30 14:43
|
|||
|
Re: pic16F685的問題
|
||||
---|---|---|---|---|
初級會員
|
感謝大大們的回應,我把程式改成ryang大的寫法,然後出現2個問題
1.實際動作無預期,故用模擬方法去除錯,發現在call LATAB這裡時,它會進入LATAB去,可是執行addwf PCL,F後指標就消失了。 我把start中call之前改成 movlw 0x05 所以應該會回傳0x2c,只是指標消失。 2.我有以下訊息: Message[305] C:\DSPIC\685FIRST\MAIN.ASM 95 : Using default destination of 1 (file). 有問題的程式 incf shift 我是要在中斷中對shift做累加的動作,後來發現,只要有incf的都會有這樣的訊息,可否問一下是為什麼? 再次麻煩各位大大了。
發表於: 2008/10/30 14:21
|
|||
|