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


Browsing this Thread:   1 Anonymous Users






訪客
can bus~~~好心的大大請解題
#1
我利用uart 打了8byte的資料傳到can bus的傳送器再由傳送器送至接收器是loopback mode,但是不知為何傳送器可接到 uart的資料,但是接收器收不到資料,沒有中斷,早上我寫是可以傳,後來手賤改了值,又改回來不行了
LIST P=18F458
#INCLUDE "P18F458.INC"
;/*-----------------------------------------------*/

CAN_FLAG EQU 0X0027

RX_COUNT EQU 0X002F
TX_COUNT EQU 0X004F
dTimer2 EQU .100
dTimer_60ms EQU .255
Timer_60ms EQU 0X0050
W_TEMP EQU 0X0051
STATUS_TEMP EQU 0X0052
BSR_TEMP EQU 0X0053
TIMER_Falg
WR_FULL EQU 0X005F

;/*-----------------------------------------------*/
;/* FLAG SET */
;/*-----------------------------------------------*/
TIMER_Falg_1ms EQU .1
TIMER_Falg_60ms EQU .2

ORG 0X0000
GOTO START
;/*----------------Initial------------------------*/
ORG 0X0008
;/*-----------------------------------------------*/
INTSERVE
MOVWF W_TEMP
MOVFF STATUS,STATUS_TEMP
MOVFF BSR,BSR_TEMP
BTFSC PIR3,RXB0IF
CALL CAN_ISR
BTFSC PIR1,RCIF ; test rc interrupt flag
CALL rs232_isr_Rx
BTFSC PIR1,TMR2IF
CALL timer_2_isr
; BTFSC PIR2,BCLIF
; CALL CAN_ERROR
E:
MOVFF BSR_TEMP,BSR
MOVF W_TEMP,W
MOVFF STATUS_TEMP,STATUS
RETFIE
;/*------------------------------------*/
;/* rs232 ISR Procedure */
;/*------------------------------------*/
rs232_isr_Rx:
bcf PIR1,RCIF ;
movlw low(TXB0D0)
ADDWF RX_COUNT,W
MOVWF FSR0L
MOVLW 0X0F
MOVWF FSR0H
MOVF RCREG,W
BTFSC RX_COUNT,3
GOTO RX_BUF_FULL
MOVWF INDF0
RX_BUF_FULL:
INCF RX_COUNT,F
MOVF RX_COUNT,W
xorlw 0x0A ;
BTFSS STATUS,Z
GOTO E_RX
BSF WR_FULL,0
RETURN
E_RX:
BCF WR_FULL,0
RETURN
;/*------------------------------------*/
;/* can ERROR Procedure */
;/*------------------------------------*/
CAN_ERROR
BCF PIR2,BCLIF
RETURN
;/*------------------------------------*/
;/* can ISR Procedure */
;/*------------------------------------*/
CAN_ISR:
BCF PIR3,RXB0IF ;
BSF CAN_FLAG,1
BCF RXB0CON,RXFUL
RETURN
;/*------------------------------------*/
;/* timer2 ISR Procedure */
;/*------------------------------------*/
timer_2_isr:
bcf PIR1,TMR2IF ; Clear TIMER2 interrupt flag
bsf TIMER_Falg,TIMER_Falg_1ms
eTimer2:
RETURN
;/*----------------Initial------------------------*/

START
CLRF WR_FULL
CLRF CAN_FLAG
CLRF RX_COUNT
CLRF TX_COUNT
CLRF INTCON
movlw dTimer_60ms
movwf Timer_60ms
MOVLW 0X08
MOVWF TRISB

;/*-----------------------------------------------*/
;/* PORTC DEFINITIONS */
;/*-----------------------------------------------*/
banksel PORTC
movlw b'11111111'
movwf PORTC

banksel TRISC ; Select bank 1
movlw b'10111111' ; Set RC<6> as output, others input
movwf TRISC

;/*-----------------------------------------------*/
;/* USART port setup */
;/*--------------------------------------------
movlw b'10010000' ; Continous recieve enabled, PORTC port enabled
movwf RCSTA

banksel SPBRG ; Select bank 1
movlw b'01100111' ; 71 sets Baud rate to 9600 w/ .16% error note: BRGH=1
movwf SPBRG ; Baud Rate , 9600 = 11.059/16(71+1)
banksel TXSTA
movlw b'00100110'
movwf TXSTA ; BRGH = 1, Asynch mode, enable transmit
; 8 bit transmission
; Select bank 1
bsf PIE1,RCIE ; Enable USART recieve interrupts
;bSf PIE1,TXIE ; Enable USART transmit interrupts

;/*-----------------------------------------------*/
;/* timer2 setup */
;/*-----------------------------------------------*/
;/* Note: w/ T2CON=00011111 */
;/* the prescaler = 16, the postscale = 2 */
;/* */
;/* This gives 1 x 4 x 250 x 1us = 1ms */
;/* interrupt intervals. */
;/*-----------------------------------------------*/

banksel T2CON
movlw b'01010111' ; 173*16*2*(4/11.059) = 2002.35us = 2ms
movwf T2CON ; Move W register to T2CON
banksel dTimer2 ; Select bank 1 register
movlw dTimer2 ; Place decimal 173 into W
movwf PR2 ; Update Period reg for T2
bsf PIE1,TMR2IE ; Enable TMR2 interrupts

;/*-----------------------------------------------------------------------------------------*/
;CAN Baud Rate 125K,Fosc=16Mhz,Tbit=8us,BRP=01h,
;TQ=[2*(1+BRP)]/Fosc=2*(7+1)/16=1us。
;NOMINAL BIT RATE=8TQ,SJW=1,Sync_Seg=1TQ,Prog _Seg=1TQ,Phase_Seg1=3TQ,Phase_Seg2=3TQ
;/*-----------------------------------------------------------------------------------------*/
;MOVLW 0X0F
;MOVWF BSR
MOVLW 0X80
MOVWF CANCON ;request for CAN BUS Confirguration MODE
WAIT
BTFSS CANSTAT,OPMODE2 ;wait for CAN BUS Configuration MODE=100
GOTO WAIT
MOVLW 0X06
MOVWF BRGCON1 ;set SJW and BRP,SJW=1TQ,BRP=06H
MOVLW 0X90
MOVWF BRGCON2 ;Phase_Seg1=3TQ and Prog _Seg=1TQ
MOVLW 0X42
MOVWF BRGCON3 ;Phase_Seg2=3TQ

;SET Transmit Buffer0 Control Register
MOVLW 0X03
MOVWF TXB0CON
MOVLW 0XFF
MOVWF TXB0SIDH
MOVLW 0XE0
MOVWF TXB0SIDL
MOVLW 0X08
MOVWF TXB0DLC
MOVLW 0X0F
MOVWF BSR
;
LFSR FSR0,TXB0D0
NEXT
CLRF POSTINC0
MOVF FSR0L,W
XORLW 0X4E
BTFSS STATUS,Z
GOTO NEXT
;
MOVLW 0XFF
MOVWF RXB0SIDH
MOVLW 0XE0
MOVWF RXB0SIDL
MOVLW 0X20
MOVWF RXB0CON ;FILHIT0=0

MOVLW 0X08
MOVWF RXB0DLC

LFSR FSR0,RXB0D0
NEXT2
CLRF POSTINC0
MOVF FSR0L,W
XORLW 0X6E
BTFSS STATUS,Z
GOTO NEXT2

MOVLW 0XFF
MOVWF RXF0SIDH
MOVLW 0XE0
MOVWF RXF0SIDL
MOVLW 0X00
MOVWF RXM0SIDH
MOVLW 0X00
MOVWF RXM0SIDL

;
MOVLW 0X00
MOVWF CIOCON

;
MOVLW 0X40 ;CANCON=0X00->Normal mode CANCON=0X40->Loop back mode
MOVWF CANCON ;
WAIT2
MOVF CANSTAT
ANDLW 0XE0
SUBLW 0X40
BTFSS STATUS,Z ;wait for CAN BUS->Loop back mode=010
GOTO WAIT2
;
BSF RCON,IPEN
MOVLW 0X01
MOVWF PIE3
MOVLW 0X01
MOVWF IPR3
MOVLW 0X22
MOVWF IPR1
; MOVLW 0X08
; MOVWF PIE2
;/*--------------------------------------------------------------------*/
;/* Main procedure */
;/*--------------------------------------------------------------------*/
MAIN
NOP
MOVLW 0XC0
MOVWF INTCON
LOOP
btfss TIMER_Falg,TIMER_Falg_1ms
GOTO LOOP
bcf TIMER_Falg,TIMER_Falg_1ms
decfsz Timer_60ms
GOTO LOOP
movlw dTimer_60ms
movwf Timer_60ms
CLRF RX_COUNT
BTFSS WR_FULL,0
GOTO LOOP
CALL CAN_BUS_TX
CALL TX_OK1
BCF WR_FULL,0
GOTO LOOP

;/*--------------------------------------------------------------------*/
;/* UART TX procedure */
;/*--------------------------------------------------------------------*/
TX_OK1:
movlw low(RXB0D0)
ADDWF TX_COUNT,W
MOVWF FSR0L
MOVLW 0X0F
MOVWF FSR0H
MOVF INDF0,W
movwf TXREG
tx_ok:
btfss TXSTA,TRMT
goto tx_ok
INCF TX_COUNT
MOVF TX_COUNT,W
XORLW 0X08
btfss STATUS,Z
goto TX_OK1
clrf TX_COUNT
RETURN
;/*--------------------------------------------------------------------*/
;/* CAN BUS TX procedure */
;/*--------------------------------------------------------------------*/
CAN_BUS_TX:
BSF TXB0CON,TXREQ ;TXREQ=1
WAITE4:
BTFSS PIR3,TXB0IF ;Wait Transmit finish
GOTO WAITE4

WAITE5:
BTFSS CAN_FLAG,1 ;
GOTO WAITE5
BCF CAN_FLAG,1 ;
BCF TXB0CON,TXREQ ;
RETURN
END

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... ]

教育訓練中心

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