• slider image 442
  • slider image 483
  • slider image 484
  • slider image 485
  • slider image 486
  • slider image 487
:::


Browsing this Thread:   1 Anonymous Users




(1) 2 »


Re: PIC16F688 UART問題
#15
版主
版主


查看用戶資訊
參照:

small20310 寫道:
comlf是什麼指令?


沒有 COMLF 這個指令,只有 COMF 取1的補數運算。

發表於: 2009/9/23 13:25
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: PIC16F688 UART問題
#14
中級會員
中級會員


查看用戶資訊
comlf是什麼指令?

發表於: 2009/9/21 19:26
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: PIC16F688 UART問題
#13
新會員
新會員


查看用戶資訊
謝謝版大的分析,我已經找到問題點了,是因為我在PC端寫的VB程式送出來的資料所造成的,那現在已經沒有問題了,要再繼續加功能下去了,有問題再上來發問,感恩!

發表於: 2009/7/5 22:44
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: PIC16F688 UART問題
#12
版主
版主


查看用戶資訊
感覺除了 ABCD 四個字的接收外,還有其他部數這四個字的資料進來導致程式呼叫了 call Trank_er 富城是於是就送出了 ER 的字元出去。利用斷點方式在 call Trank_er 的地方停下來看一下接收到的字元為何?

發表於: 2009/7/3 18:53
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: PIC16F688 UART問題
#11
新會員
新會員


查看用戶資訊
不好意思,太急了忘了把重要的貼上去,再貼一次整個code,麻煩版大了,那我也有另外去試在IC 初始化時,先給Rec_Flag Bit0= 1,然後再將TmpData 給41h,這樣子一開始我在PC端也是收到兩個"OK"。
LIST P=16f688       
#include      <P16F688.inc>
;-------------------------------------------------------------
;
Reg define
Delay1          equ    0x20
Delay2          equ    0x21
TmpData         equ    0x22
RDData          equ    0x23
PGMData         equ    0x24
SDA             equ    0x00
SCK             equ    0x01
ADDR            equ    0x25
TmpData1        equ    0x26
CNT             equ    0x27
Tmp_WREG        equ    0x28
Tmp_STATUS      equ    0x29
Tmp_PCLATH      equ    0x2a
Rec_Flag        equ    0x2b
;=========================================
Start
;=========================================
               
ORG       00H
               nop 
               
goto      Main
               org       04h
               
goto      Interrupt
Main
               call      Inital
MainLoop
               btfss     Rec_Flag
,0
               
goto      MainLoop
               bcf       Rec_Flag
,0
compare_data
               comlf     TmpData
,0x41     ;ASCII "A"
               
goto      compare_next
               call      LEDon
               call      Trank_ok
               
goto      MainLoop
compare_next               
               comlf     TmpData
,0x42     ;ASCII "B"
               
goto      compare_next1
               call      LEDoff
               call      Trank_ok
               
goto      MainLoop
compare_next1              
               comlf     TmpData
,0x43     ;ASCII "C"
               
goto      compare_next2
               call      Led_ONOFF
               call      Trank_ok
               
goto      MainLoop
compare_next2              
               comlf     TmpData
,0x44     ;ASCII "D"
               
goto      com_er  
               call      Led_test
               call      Trank_ok
               
goto      MainLoop
com_er     
               call      Trank_er
               
goto      MainLoop

;=========================================
;    
Inital    Status
;=========================================
Inital  
               BANKSEL   PCON           
               BCF       PCON
,NOT_POR    
               BCF       STATUS
,RP0     
               CLRF      PORTC          
               MOVLW     07h            
               MOVWF     CMCON0          
               BSF       INTCON
,GIE
               BSF       INTCON
,PEIE
               BSF       STATUS
,RP0
               BSF       PIE1
,RCIE 
               BCF       PIE1
,TXIE 
               CLRF      ANSEL     
               CLRF      TRISC     
               BSF       TRISC
,5

               MOVLW     0x71  
               MOVWF     OSCCON
               BANKSEL   SPBRG         
               movlf     SPBRG
,#D'16
               
BSF       BAUDCTL,BRG16
               bsf       TXSTA
,BRGH   
               bsf       TXSTA
,TXEN       
               bcf       TXSTA
,SYNC       
               bsf       RCSTA
,CREN       
               bsf       RCSTA
,SPEN       
               BSF       PORTC
,2          
               BSF       PORTC
,3         
               CLRF      Rec_Flag        
               
return
;=========================================
;              
Delay    
;=========================================
Delay                             ;;Delay 35u
               MOVLW      0AH
               MOVWF      Delay2
Delayloop
               DECFSZ     Delay2
               
GOTO       Delayloop
               
RETURN
Delay_4m
               MOVLW      0FFH
               MOVWF      Delay1
               CLRF       Delay2
Delay1loop
               DECFSZ     Delay2
               
GOTO       Delay1loop
               DECFSZ     Delay1
               
GOTO       Delay1loop
               
RETURN
;=========================================
;    
LED      ON/OFF     
;=========================================
LEDon 
               BCF       STATUS
,RP0    ;SET BANK0   
               BCF       PORTC
,2
               BCF       PORTC
,3
               
RETURN        
LEDoff 
               BCF       STATUS
,RP0                             
               BSF       PORTC
,2
               BSF       PORTC
,3
               
RETURN
;=========================================
;    
LED      swap     
;=========================================
LED_Swap 
               BCF       STATUS
,RP0    ;SET BANK0   
               BCF       PORTC
,2
               BSF       PORTC
,3
               
RETURN
LED_Swap1 
               BCF       STATUS
,RP0    ;SET BANK0   
               BSF       PORTC
,2
               BCF       PORTC
,3
               
RETURN

;=========================================
;   
Trank      OK/ER     
;=========================================
Trank_ok:
               
movlw     0x4f         ;ASCII "O"
               
call      Send_Data 
               movlw     0x4b         
;ASCII "K"
               
call      Send_Data 
               
return   
Trank_er:
               
movlw     0x45         ;ASCII "E"
               
call      Send_Data 
               movlw     0x52         
;ASCII "R"
               
call      Send_Data    
               
return
;=========================================
;    
LED   ON/OFF           
;=========================================
Led_ONOFF      
               movlw   0xff
               movwf   CNT
Led_loop
               call    LEDon
               call    Delay_4m
               call    LEDoff
               call    Delay_4m
               DECFSZ  CNT   
               
goto    Led_loop
               
return
;=========================================
;    
LED   test           
;=========================================
Led_test      
               movlw   0xff
               movwf   CNT
Led_test_loop
               call    LED_Swap
               call    Delay_4m
               call    LED_Swap1
               call    Delay_4m
               DECFSZ  CNT     
               
goto    Led_test_loop
               
return
;=========================================
;    
Send data     
;=========================================
Send_Data
               banksel PIR1
               btfsc   PIR1
,TXIF
               
goto    Send_TX
               
goto    Send_Data
Send_TX
               banksel TXREG
               movwf   TXREG    
               
return

Save_Regs                              
               movwf      Tmp_WREG     
               swapf      STATUS
,W     
               movwf      Tmp_STATUS   
               movf       PCLATH
,W     
               movwf      Tmp_PCLATH
               
return

Restore_Regs                             
               movf       PCLATH
,W       
               movwf      PCLATH
               swapf      Tmp_STATUS
,W   
               movwf      STATUS
               swapf      Tmp_WREG
,F     
               swapf      Tmp_WREG
,W
               
return

;===================================
Subroutine:   Int_Service_Routine
Parameters:   None
Returns:      Multiple
Synopsys:     System ISR
;===================================

Interrupt               
               call    Save_Regs

               banksel RCREG  
               movf    RCREG
,W
               movwf   TmpData
               bsf     Rec_Flag
,0
Finish_Int                          
               call    Restore_Regs
               retfie

Over
:
               
end

發表於: 2009/7/3 17:51
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: PIC16F688 UART問題
#10
版主
版主


查看用戶資訊
call Trank_ok ??? call 到哪裡了,沒看到這一段哪會知道PIC 回傳了什麼東西。

發表於: 2009/7/3 16:01
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: PIC16F688 UART問題
#9
新會員
新會員


查看用戶資訊
我的中斷已經可以動作,但流程跑起來還是怪怪的,可以請大大在幫我看一下嗎?為什麼我PC端送一個41的資料進來,可是PIC的回傳值照理說應為OK,但是我收到的卻是OKER,多送了一個ER的值,我用模擬去跑主程式的部分是正確的TmpData這個為41h 的話確實是只會送ok的字 ,然後就會再去等下一個中斷觸發,也就是在MainLoop裡面跑,那這樣子來看就是中斷的部分有問題,可是中斷的部份PC端我只有送一筆資料進來,所以找不到問題所在。
LIST P=16f688       
#include      <P16F688.inc>
;-------------------------------------------------------------
;
Reg define
Delay1          equ    0x20
Delay2          equ    0x21
TmpData         equ    0x22
RDData          equ    0x23
PGMData         equ    0x24
SDA             equ    0x00
SCK             equ    0x01
ADDR            equ    0x25
TmpData1        equ    0x26
CNT             equ    0x27
Tmp_WREG        equ    0x28
Tmp_STATUS      equ    0x29
Tmp_PCLATH      equ    0x2a
Rec_Flag        equ    0x2b

;=========================================
Start
;=========================================
               
ORG       00H
               nop 
               
goto      Main
               org       04h
               
goto      Interrupt
Main
               call      Inital
MainLoop
               btfss     Rec_Flag
,0
               
goto      MainLoop
               bcf       Rec_Flag
,0
compare_data
               comlf     TmpData
,41h    ;ASCII "A"
               
goto      compare_next
               call      LEDon
               call      Trank_ok
               
goto      MainLoop
compare_next               
               comlf     TmpData
,42h    ;ASCII "B"
               
goto      compare_next1
               call      LEDoff
               call      Trank_ok
               
goto      MainLoop
compare_next1              
               comlf     TmpData
,43h    ;ASCII "C"
               
goto      compare_next2
               call      Led_ONOFF
               call      Trank_ok
               
goto      MainLoop
compare_next2              
               comlf     TmpData
,44h    ;ASCII "D"
               
goto      com_er  
               call      Led_test
               call      Trank_ok
               
goto      MainLoop
com_er     
               call      Trank_er
               
goto      MainLoop
;=================
Interrupt
;=================
Save_Regs                              
               movwf      Tmp_WREG     
               swapf      STATUS
,W     
               movwf      Tmp_STATUS   
               movf       PCLATH
,W     
               movwf      Tmp_PCLATH
               
return

Restore_Regs                             
               movf       PCLATH
,W       
               movwf      PCLATH
               swapf      Tmp_STATUS
,W   
               movwf      STATUS
               swapf      Tmp_WREG
,F    
               swapf      Tmp_WREG
,W
               
return

Interrupt               
               call    Save_Regs            
               banksel RCREG                
;bank0
               movf    RCREG
,W              ;W=0
               movwf   TmpData
               bsf     Rec_Flag
,0
Finish_Int                          
               call    Restore_Regs
               retfie

Over
:
               
end

發表於: 2009/7/3 0:05
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: PIC16F688 UART問題
#8
版主
版主


查看用戶資訊
參照:
Int_Service_Routine
call Save_Regs

BANKSEL 0
movf RCREG,W
movwf Rec_Data
movwf PORTD
bsf Rec_Flag,0

Finish_Int ; restore W,STATUS & PCLATH
call Restore_Regs
retfie


中斷接收程式越簡潔越好,中斷裡將接收到的資料放在 Rec_Data 裡,並設定一個接收旗號 Rec_Flag,0 位元以告訴主程式有心的資料收到開始處理。

發表於: 2009/7/2 10:00

Edited by Ryang on 2009年07月03日 15:46:42
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: PIC16F688 UART問題
#7
新會員
新會員


查看用戶資訊
請問一下各位大大,下列的code Rec_Flag 這個flag不是只是定義一個位址而已,那為什麼判斷UART的RX Flag是由這個flag去做判斷?
有大大可以幫我解決我的疑問嗎?
謝謝
list            p=16f887
    
#include        <p16f887.inc> 
 
;-----------------------------------
 ; 
USER DEFINED VARIABLES
 
;----------------------------------- 
VARIABLES   UDATA   0x030
Tmp_WREG    RES 1 
Tmp_STATUS  RES 1 
Tmp_PCLATH  RES 1
 
Rec_Flag         res     1  
Rec_Data        res     1
S_Hold_Delay res 1
Table_Index    res     1
Table_Buffer   res     1

RESET_V     CODE    0x0000
                   clrf    PCLATH
                   
goto    Main  
 
INT_V       CODE    0x0004
                
goto    Int_Service_Routine
    
 
;-----------------------------------
MAIN PROGRAM LOOP
;-----------------------------------

        
CODE        0x0040
Main
        
         banksel OSCCON
         movlw   
b'01100001'
         
movwf   OSCCON
         nop
         btfss   OSCCON
,HTS
         
goto    $-2
      
         call  Init_USART

         banksel TRISD
         clrf    TRISD
         banksel PORTD
         clrf    PORTD

         call    Send_String1
                            
         clrf    Rec_Flag
         clrf    Rec_Data
 
;
 
Loop
         btfss    Rec_Flag
,0
         
goto    Loop            
         bcf      Rec_Flag
,0
         call      Send_String2
         movf   Rec_Data
,W
         call      Send_1_Byte
         movlw 0x0a
         call      Send_1_Byte
         movlw 0x0d
         call       Send_1_Byte
         
goto    Loop
 
;-----------------------------------------
Send_String1  
                 clrf    Table_Index
Get_Next        
                 movf    Table_Index
,W
                 call    String_Table_1
                 movwf   Table_Buffer
                 sublw   0x00
                 btfsc   STATUS
,Z
                 
goto    $+6
                 movf    Table_Buffer
,W
                 call    Send_1_Byte
                incf    Table_Index
,F
                 
goto    Get_Next
                 
goto    S_Hold_Time
;------------------------------------------------
 
String_Table_1
         addwf   PCL
,F
        dt      0x1b
,'[','2','J'
         
dt      0x1b,'[','0','0',';','0','0','H'
         
dt      "Lab7-EUSART, Test :9600,N,8,1"
         
dt      0x0a,0x0d,0x00
 
Send_String2   
                 clrf    Table_Index
Get_Next_1      movf    Table_Index
,W
                 call    String_Table_2
                 movwf   Table_Buffer
                 sublw   0x00
                 btfsc   STATUS
,Z
                 
goto    $+6
                 movf    Table_Buffer
,W
                 call    Send_1_Byte
                 incf    Table_Index
,F
                 
goto    Get_Next_1
                 
goto    S_Hold_Time
 
String_Table_2
         addwf   PCL
,F
         dt      0x0a
,0x0d,"Send RxD Data = "
         
dt      0x00
 
Init_USART
         banksel BAUDCTL
         movlw   
b'00000000'
         
movwf   BAUDCTL
 
         banksel TXSTA
         banksel 0
 
         bcf     PIR1
,TXIF
         bcf     PIR1
,RCIF                        
;               
         
bsf     INTCON,PEIE
         bsf     INTCON
,GIE                        
         
return                       
Send_1_Byte:
         
banksel TXREG   
         movwf   TXREG
         btfsc   TXSTA
,TRMT
         
goto    $-1
 
S_Hold_Time
:
         
movlw   .255
         movwf   S_Hold_Delay
         nop
         decfsz  S_Hold_Delay
,F
         
goto    $-2
         
return
 
Save_Regs
     movwf   Tmp_WREG
     swapf   STATUS
,W
     movwf   Tmp_STATUS
     movf    PCLATH
,W
     movwf   Tmp_PCLATH
     
return

Restore_Regs
     movf    PCLATH
,W
     movwf   PCLATH
     swapf   Tmp_STATUS
,W
     movwf   STATUS
     swapf   Tmp_WREG
,F
     swapf   Tmp_WREG
,W
     
return
 
 
Int_Service_Routine     
     call    Save_Regs
    
     BANKSEL 0       
     movf    RCREG
,W
     movwf   Rec_Data
     movwf   PORTD
     bsf     Rec_Flag
,0
 
 Finish_Int                          
restore W,STATUS &  PCLATH
     call    Restore_Regs
     retfie     
 
     END

發表於: 2009/7/2 9:29

Edited by qswe on 2009年07月02日 09:44:23
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: PIC16F688 UART問題
#6
新會員
新會員


查看用戶資訊
版大可以幫我看一下Code嗎?我用了中斷怎麼PC端送資料,PIC都沒有動作也收不到資料?謝謝!
因為貼上來的code 都無法正常顯示,所以直接給file,不好意思

Attach file:


Link only for registered users

發表於: 2009/6/30 10:59
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... ]

教育訓練中心

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