• slider image 514
  • slider image 516
  • slider image 517
  • slider image 518
  • slider image 519
:::


Browsing this Thread:   4 Anonymous Users






Re: RS232接收問題
#10
高級會員
高級會員


查看用戶資訊
感謝jubel大的熱情回應
把原程式改成 甚麼事都不做 發現利用ICD2 DEBUG按暫停之後

FSR的值 會自動加1 我想這應該又是為了抓回傳值 所造成的現象

;*************************************
PROGRAM RESET VECTOR
;*************************************

    
ORG    0X00
    NOP
    
GOTO    MAIN
    ORG    0X04
    
GOTO    INT

;*************************************
PROGRAM START HERE
;*************************************

MAIN:
    
CALL    INITIAL
MAINLOOP
    NOP
    
GOTO    MAINLOOP

;*************************************
INITIAL SETUP
;*************************************

INITIAL:
    
BSF    STATUS,RP0
    MOVLW    
B'11000000'    ;START INTERRUPT
    MOVWF    INTCON
    MOVLW    
B'00100000'    ;START RECEIVE INTERRUPT
    MOVWF    PIE1
    MOVLW    
B'00000100'    ;RB2=RX RB5=TX
    MOVWF    TRISB
    CLRF    TRISA
    MOVLW    .129        
;BAUD RATE=9600 OSC=20MHz
    MOVWF    SPBRG
    MOVLW    
B'00000100'    ;HIGH SPEED BUAD RATE
    MOVWF    TXSTA
    BCF    STATUS
,RP0
    MOVF    RCREG
,W
    BSF    RCSTA
,SPEN        ;SERIAL PORT ENABLE
    BSF    RCSTA
,CREN        ;CONTINUOUS RECEIVE ENABLE                        
    MOVLW    0X46        
;GET DATA REGISTER START
    MOVWF    FSR
    
RETURN

;*************************************
INTERRUPT    
;*************************************

INT:
    
MOVWF    W_TEMP
    SWAPF    STATUS
,W
    MOVWF    STATUS_TEMP
    MOVF    RCREG
,W
    MOVWF    INDF        
;ABOUT    FSR
    INCF    FSR
,F
    BTFSS    FSR
,4        
    
GOTO    $+.3
    MOVLW    0X46
    MOVWF    FSR
    SWAPF    STATUS_TEMP
,W
    MOVWF    STATUS
    SWAPF    W_TEMP
,F
    SWAPF    W_TEMP
,W
    RETFIE    

    END

之後 我把傳送資料的晶片 和 PIC同時動作 接收就正確了

當初只是想說 要同時操控2顆晶片很麻煩 就先讓PIC先動 然後再去啟動傳送資料的晶片 沒想到這樣子卻會讓FSR的值發生錯誤 導致存放值位置錯誤



另外 還要再請教一個問題

有沒有辦法知道 PIC啟動之後到執行第一行程式所花的時間

發表於: 2007/1/9 22:50
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: RS232接收問題
#9
資深會員
資深會員


查看用戶資訊
有沒有去看過對應你那一顆PIC那一個硬體版本的勘誤表?
說不定是那一版的有問題
我之前就遇到
找兩天找不出問題出在哪
結果才發現是我用的那一版PIC整批都有問題

發表於: 2007/1/9 18:36
木亟缶夬金戔
彳艮缶夬金戔
走召缶夬金戔
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: RS232接收問題
#8
資深會員
資深會員


查看用戶資訊
在主程式加入
movfw fsr
movwf fsr_temp

再試試目,看 備份下的 fsr_temp 是不是和原來的 fsr 一樣


或著直接將 fsr 顯示在 lcd 或 led 上觀察

發表於: 2007/1/9 16:03
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: RS232接收問題
#7
高級會員
高級會員


查看用戶資訊
;*************************************
INTERRUPT   
;*************************************

INT:
    
MOVWF    W_TEMP
    SWAPF    STATUS
,W
    MOVWF    STATUS_TEMP
    MOVF    RCREG
,W
    MOVWF    INDF        
;ABOUT    FSR
    INCF    FSR
,F
    MOVLW    0X4A
    XORWF    FSR
,W
    BTFSS    STATUS
,2
    
GOTO    $+.3
    MOVLW    0X40
    MOVWF    FSR
    SWAPF    STATUS_TEMP
,W
    MOVWF    STATUS
    SWAPF    W_TEMP
,F
    SWAPF    W_TEMP
,W
    RETFIE

已改

不過還沒改之前 我就猜應該是沒甚麼幫助 結果測試之後還真的沒用

因為 我的中斷 是當另一顆晶片有傳資料給我時 才會去觸發它

不過 我現在的測試都是沒傳資料給PIC 單純看FSR的變化

現在的問題在於 我按暫停時看FSR都會變成0x41 沒觸發到中斷應該會是0x40 怎麼會自動幫我加1呢 我的自動加1程式是在中斷裡面才會執行的

所以 想請教是不是使用ICD2才會發生這種情形 或者是 其他問題

發表於: 2007/1/9 15:50
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: RS232接收問題
#6
資深會員
資深會員


查看用戶資訊
沒完整看完
不過有兩個重大問題
你進入中斷後沒有備份W暫存器跟STATUS暫存器

進入中斷後你會動到W跟STATUS暫存器
如果你離開中斷後有繼續操作這兩個暫存器
整個程式就會出問題

正常來說一進入中斷要馬上備份這兩個
(最常使用到的暫存器)
離開中斷前回存
你先修正這兩個問題吧

發表於: 2007/1/9 13:08
木亟缶夬金戔
彳艮缶夬金戔
走召缶夬金戔
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: RS232接收問題
#5
高級會員
高級會員


查看用戶資訊
;*************************************
PROGRAM RESET VECTOR
;*************************************

    
ORG    0X00
    NOP
    
GOTO    MAIN
    ORG    0X04
    
GOTO    INT
;*************************************
PROGRAM START HERE
;*************************************

MAIN:
    
CALL    INITIAL
MAINLOOP
    CALL    GET_DATA
    CALL    PIN1
    CALL    PIN2
    CALL    PIN3
    CALL    PIN4
    CALL    PIN5
    CALL    PIN6
    CALL    PIN7
    CALL    PIN8
    CALL    PERIOD
    
GOTO    MAINLOOP

;*************************************
INITIAL SETUP
;*************************************

INITIAL:
    
BSF    STATUS,RP0
    MOVLW    
B'11000000'    ;START INTERRUPT
    MOVWF    INTCON
    MOVLW    
B'00100000'    ;START RECEIVE INTERRUPT
    MOVWF    PIE1
    MOVLW    
B'00000100'    ;RB2=RX RB5=TX
    MOVWF    TRISB
    CLRF    TRISA
    MOVLW    .129        
;BAUD RATE=9600 OSC=20MHz
    MOVWF    SPBRG
    MOVLW    
B'00000100'    ;HIGH SPEED BUAD RATE
    MOVWF    TXSTA
    BCF    STATUS
,RP0
    MOVF    RCREG
,W
    BSF    RCSTA
,SPEN        ;SERIAL PORT ENABLE
    BSF    RCSTA
,CREN        ;CONTINUOUS RECEIVE ENABLE                        
    MOVLW    0X40        
;GET DATA REGISTER START
    MOVWF    FSR
    
RETURN

;*************************************
INTERRUPT    
;*************************************

INT:
    
MOVF    RCREG,W
    MOVWF    INDF        
;ABOUT    FSR
    INCF    FSR
,F
    MOVLW    0X4A
    XORWF    FSR
,W
    BTFSS    STATUS
,2
    RETFIE
    MOVLW    0X40
    MOVWF    FSR
    RETFIE

PIN1-PIN8 + PERIOD IO控制+延遲

GET_DATA 把0X40-0X49裡的值 搬到我指定的暫存器

中斷就只是負責接收資料而已

麻煩看哪裡有問題

發表於: 2007/1/9 12:47
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: RS232接收問題
#4
資深會員
資深會員


查看用戶資訊
你還是把那一部份的程式碼貼上來吧...
這樣比較容易找到問題

發表於: 2007/1/9 8:35
木亟缶夬金戔
彳艮缶夬金戔
走召缶夬金戔
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: RS232接收問題
#3
高級會員
高級會員


查看用戶資訊
參照:

jubel 寫到:
你開始接收前有沒有先清除接收暫存器?
有可能是開始接收前接收中斷旗標RCIF就是1
這時一開始接收就發生中斷
把RCREG裡的錯誤資料丟進去你的暫存器
因此正確的資料都會往後延一格
所以我在打開接收中斷開始接收前都會先執行
MOVF RCREG,W
強制把RCIF清為0
這樣就會正確了
試試吧~

加了 MOVF RCREG,W 這一行之後 還是會放在第二格位置

之後做了小小的測試 讓PIC自行運作 另一顆晶片不傳資料給PIC

假設一開始FSR 設 0X20 當按停止之後去看FSR暫存器

FSR 變成 0X21

又搜尋到之前的這一篇 http://www.microchip.com.tw/modules/n ... 288&forum=1#forumpost5097

不知道是不是FSR經過程式的執行之後被改掉了 還是用ICD2做DEBUG時會出現的問題??

發表於: 2007/1/8 21:07
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: RS232接收問題
#2
資深會員
資深會員


查看用戶資訊
你開始接收前有沒有先清除接收暫存器?
有可能是開始接收前接收中斷旗標RCIF就是1
這時一開始接收就發生中斷
把RCREG裡的錯誤資料丟進去你的暫存器
因此正確的資料都會往後延一格
所以我在打開接收中斷開始接收前都會先執行
MOVF RCREG,W
強制把RCIF清為0
這樣就會正確了
試試吧~

發表於: 2007/1/8 8:46
木亟缶夬金戔
彳艮缶夬金戔
走召缶夬金戔
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


RS232接收問題
#1
高級會員
高級會員


查看用戶資訊
當晶片(不是PIC系列晶片) 連續傳送10筆資料給PIC 利用RS232傳輸

使用PIC88做為接收端 利用FSR連續存10筆資料

假設暫存器從0X20到0X2A

結果發生 第一筆資料都會從0X21開始放 而不是放在0X20

兩邊晶片鮑率和基本設定都無誤

奇怪的是 有時會放對位置 基本上 錯誤的機率很高

收的到旦放錯位置 大概是哪邊的問題??

發表於: 2007/1/8 2:29
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 cannot 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連結

https://www.facebook.com/microchiptechnologytaiwan/
http://www.microchip.com.tw/modules/tad_uploader/index.php?of_cat_sn=13
https://mu.microchip.com/page/tmu
http://elearning.microchip.com.tw/modules/tad_link/index.php?cate_sn=1
https://page.microchip.com/APAC-PrefCenters-TW.html
http://www.microchip.com/
http://www.microchip.com/treelink
http://www.microchipdirect.com/
http://www.microchip.com.cn/newcommunity/index.php?m=Video&a=index&id=103
http://www.microchip.com.tw/modules/tad_uploader/index.php?of_cat_sn=2
http://www.microchip.com.tw/Data_CD/eLearning/index.html
http://www.microchip.com.tw/RTC/RTC_DVD/
https://www.microchip.com/development-tools/
https://www.youtube.com/user/MicrochipTechnology
[ more... ]

教育訓練中心

!開發工具購買
辦法說明 [業界客戶] [教育單位]
----------------------------------
!校園樣品申請
辦法說明 [教師資格] [學生資格]
----------------------------------