:::


Browsing this Thread:   1 Anonymous Users






為何變數無法致能? (版主加註:有關PIC18F252)
#1
高級會員
高級會員


查看用戶資訊
請教各位...

為何我程式執行時...

使用Watch視窗觀看變數..

剛開始幾行都ok...

可是執行(單步執行)到下面幾行卻沒照指令執行...

也就是都無法對該變數給予致能...

bcf TXSTA,SYNC
bsf RCSTA,SPEN
bsf TXSTA,TXEN

是否為小弟解開迷惑...

感激不盡...

PIC串列傳送程式:

list p=18F252
#include<p18F252.INC>
trans_c equ 0x20
;**********************
org 0x00
nop
initial:
movlw .3
movwf trans_c ;設定trans_c次數為3次
banksel SPBRG
movlw .129 ;Baud Rate=1200 bps
movwf SPBRG
banksel TXSTA
bcf TXSTA,SYNC ;SYNC設定為0
banksel RCSTA
bsf RCSTA,SPEN ;SPEN設定為1
banksel TXSTA
bsf TXSTA,TXEN ;TXEN設定為1
Trans:
banksel TXSTA
btfss TXSTA,TRMT
goto Trans
banksel TXREG
movlw 0x55
movwf TXREG
banksel trans_c
decfsz trans_c,f
goto Trans
end

發表於: 2004/10/2 17:38
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: 為何變數無法致能?
#2
版主
版主


查看用戶資訊
1. 看起來你對PIC18F452的指令還不是很熟悉它的使用語法,建議下載右邊的教育訓練課程內的W400研讀一下PIC18F系列的Access Bank的使用方式。
2. 有關USART的使用範例程式可參考W400裡的Lab4,那裡有詳細的說明;底下就是從該程式中針對USART的涉頂所寫的副程式景供參考:

; OSC = 16MHz
;***********************************************************************
;**** Initial USART as 9600,N,8,1
;***********************************************************************
Init_USART:
movlw b'00100000' ; 8-bit data mode , ASYNC
movwf TXSTA ; Low Speed mode, Enable TxD
;
movlw b'10010000' ; Enable Serial Port, 8-bit receive
movwf RCSTA ; Continuous Receive, Disable Address Detection
;
movlw .25 ; Set baud rate at 9600 with Low Speed mode
movwf SPBRG
;
bcf PIR1,TXIF ; Clear TxD interrupt flag
bcf PIE1,TXIE ; Disable TxD interrupt
;
bcf IPR1,RCIP ; Set the RxD for Low priority interrupt
bcf PIR1,RCIF ; Clear RxD interrupt flag
bsf PIE1,RCIE ; Enable RxD interrupt
;
return

發表於: 2004/10/4 9:41
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: 為何變數無法致能?
#3
高級會員
高級會員


查看用戶資訊
謝謝版主的答覆...
的確我是這方面的新手...
對於您的建議我會再好好研究一下...
以後請多多指教!

發表於: 2004/10/4 11:32
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: 為何變數無法致能? (版主加註:有關PIC18F252)
#4
高級會員
高級會員


查看用戶資訊
版主不好意思....
你所建議我看的部份我已經下載看過了...
可是我還不是很了解你所指我不熟指令的使用語法的意思...
可否麻煩你再說明白一點...
是我所寫的指令有錯誤?!
還是致能的指令錯誤?!
還是哪個觀念有誤?!
麻煩再不厭其煩的指點我一下....

發表於: 2004/10/4 20:41
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: 為何變數無法致能?
#5
高級會員
高級會員


查看用戶資訊
版主...
我想我已經了解你說的意思了...
因為我是看著16系列的書開始入門...
但我用的是18系列的IC...
我只注意到要修改標頭檔而已..
卻忽略了指令部份...
原來指令也已經變了...
我再修改程式指令試試...
多謝你的指點...

發表於: 2004/10/5 15:40
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: 為何變數無法致能? (版主加註:有關PIC18F252)
#6
高級會員
高級會員


查看用戶資訊
現在指令的執行好像都OK..
請問一下版主...
指令執行到最後一行"goto Trans"都屬正常..
TRMT也被致能變為"1"...
也確實跳到Trans...
Q1:
可是好像TRMT從此就一直是滿的"1"狀態...
是代表資料傳已經出去了..
但VB端接收不到...
指令就一直在
"banksel TXSTA
btfss TXSTA,TRMT
goto Trans"
三行打轉....
因為TMRT一直為滿的?!
Q2:
還有我VB程式一執行就發生錯誤...
" Run - time error '8005'
Port already open "

請問這是什麼原因....

VB程式
Private Sub C1_Click()
Dim buf$
buf = Trim(MSComm1.Input)
If Len(buf) = 0 Then
T1.Text = "empty"
Else
T1.Text = buf
End If
MSComm1.PortOpen = False
End Sub
..............................................

Private Sub Form_Load()
MSComm1.PortOpen = True
End Sub

發表於: 2004/10/5 22:03
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: 為何變數無法致能? (版主加註:有關PIC18F252)
#7
版主
版主


查看用戶資訊
VB不太懂,PIC18的程式可以改成偵測 TXIF試試,不知道你的TRMT為何會不動作而且還要切BANK,18F 對SFR 是不需切換BANK的,所有的SFR都是放在ACCESS BANK的,

movlw h'0a' ; Send 0x0A & 0x0D to terminal
call Tx_a_Byte
movlw h'0d'
call Tx_a_Byte
;
bra Main


;
;****** Send a byte to USART ******
Tx_a_Byte:
movwf TXREG ; Send a byte vis USART
nop ;
btfss PIR1,TXIF ; Does the data sent out ?
bra $-4 ; No, Loop check the TXIF
bcf PIR1,TXIF ; Yes, completed to send the date, clear the TXIF
return

發表於: 2004/10/5 22:14
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: 為何變數無法致能? (版主加註:有關PIC18F252)
#8
高級會員
高級會員


查看用戶資訊
沒關係版主...
還是很感謝您的回答!
我會再試著改看看的!
再請教您幾個問題(本篇會有點長喔!)
Q1:
您所說的有關Bank的切換...
意思是說..
指要是在SFR裡的暫存器都不須使用切換指令?!
請問是如我下面程式所說的意思嗎?!

PIC指令:

initial:
movlw .3
movwf trans_c
banksel SPBRG...........略!
movlw .129
movwf SPBRG
banksel TXSTA...........略!
bcf TXSTA,SYNC
banksel RCSTA...........略!
bsf RCSTA,SPEN
banksel TXSTA...........略!
bsf TXSTA,TXEN
Trans:
banksel TXSTA...........略!
btfss TXSTA,TRMT
goto Trans
banksel TXREG...........略!
movlw 0x55
movwf TXREG
banksel trans_c.........不可略!
decfsz trans_c,f
goto Trans
end

Q2:
請問18F系列的指令最後不是有個[a]嗎?
EX:
BCF f,b,[a]
If 'a' is 0, the Access Bank will be selected,overriding the BSR value
If 'a'=1,then the bank will be selected as per the BSR value(default)
1. 不好意思,我不太懂如何選擇[a]為'0' or '1' ? 該如何選擇?
2. 選'0' or '1'個別是什麼意思?
3. 我看有些18系列的範例並沒使用到[a]?又是怎麼一回事呢?
Q3:
在Q1裡的程式指令是16系列的指令...
為何我將指令改為18系列的執行時會不太正確...
反而用原本16系列的指令可以正確的執行...
1. 難道18FXXX的IC可以接受16系列的指令?!
2. 不知還是我指令改錯嗎?

(麻煩對照Q1的程式指令)

initial:
movlw .3
movwf trans_c,0
banksel SPBRG
movlw .129
movwf SPBRG,0
banksel TXSTA
bcf TXSTA,4,0 ...SYNC
banksel RCSTA
bsf RCSTA,7,0 ...SPEN
banksel TXSTA
bsf TXSTA,5,0 ...TXEN
Trans:
banksel TXSTA
btfss TXSTA,1,0 ...TRMT
goto Trans
banksel TXREG
movlw 0x55
movwf TXREG,0
banksel trans_c
decfsz trans_c,1,0
goto Trans
end

發表於: 2004/10/6 10:49
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: 為何變數無法致能? (版主加註:有關PIC18F252)
#9
版主
版主


查看用戶資訊
請在MPLAB中,輸入以下的指令,打開WATCH視窗觀察SPBRG的變化。
MOVLW D'2'
MOVWF BSR
INCF SPBRG
INCF SPBRG,1,0
INCF SPBRG,0,0
INCF SPBRG,1,1

第1行的作用,完全等於第2行。原因是:在完整的指令中,如
INCF SPBRG,d,a,如果把d 省略,相當於把d設為1;如果把 a省略,相當於把a設為0 (有關於a,data sheet說是default是1,好像不對;用MPLAB做實驗會發現應該是0)。

如果a等於0,則指令會拿access bank裏頭的變數來處理。如果a等於1,則指令會依BSR暫存器的內容,去相對應的BANK拿變數來處理。SPBRG屬於特殊功能暫存器;而PIC18的所有特殊功能暫存器皆位於access bank。

而d如果等於1,指令處理後的結果,會放回所處理的變數;而 d如果等於0,指令處理後的結果,會放在w暫存器,所處理的變數不會改變。

這有沒有回答了您Q1~Q3?

發表於: 2004/10/6 18:22
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: 為何變數無法致能? (版主加註:有關PIC18F252)
#10
高級會員
高級會員


查看用戶資訊
謝謝版主的回答...
我想我需要再把PIC18FXX2 Data Sheet再好好看過...
因為我沒注意到[d],[a]沒寫時會自動用預設值...
得好好kk書囉!

發表於: 2004/10/7 20:32
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部







You can view topic.
不可以 發起新主題
You cannot reply to posts.
You cannot edit your posts.
You cannot delete your posts.
You cannot add new polls.
You cannot vote in polls.
You can attach files to posts.
You cannot post without approval.
You cannot use topic type.
You cannot use HTML syntax.
You cannot use signature.
You cannot create PDF files.
You cannot get print page.

[進階搜尋]


:::

Microchip連結

http://elearning.microchip.com.tw/
http://www.microchip.com.tw/modules/tad_uploader/index.php?of_cat_sn=2
http://www.microchip.com.tw/RTC/RTC_DVD/
https://www.microchip.com/development-tools/
https://www.youtube.com/user/MicrochipTechnology
[ more... ]

教育訓練中心

課程 - 台北教育訓練中心
課程 - 新竹教育訓練中心
課程 - 高雄教育訓練中心
教育訓練中心介紹
購買 - 實驗工具
臺灣實驗板介紹與資源