請(qǐng)各位大哥幫幫小弟看看下面的程,謝謝大家:
LIST P=18F458 #INCLUDE "P18F458.INC" ORG 0X00 GOTO MAIN ORG 0X30
;*********初始化子程序*************** INITIAL BCF TRISB,2 BSF TRISB,3 ;設(shè)置CANRX/RB3為輸入 ;CANTX/RB2為輸出 ;設(shè)置CAN的波特率為125K,在Fosc=4M時(shí),Tbit=8us,假設(shè)BRP=01h,則 ;TQ=[2*(1+BRP)]/Fosc=2*(1+1)/4=1us。 ;NOMINAL BIT RATE=8TQ,SJW=1,Sync_Seg=1TQ,Prog _Seg=1TQ,Phase_Seg1=3TQ,Phase_Seg2=3TQ MOVLW 0X80 MOVWF CANCON ;請(qǐng)求進(jìn)入CAN配置模式REQOP=100 WAIT BTFSS CANSTAT,OPMODE2 ;等待進(jìn)入CAN配置模式OPMODE=100 GOTO WAIT MOVLW 0X09 MOVWF BRGCON1 ;設(shè)置SJW和BRP,SJW=1TQ,BRP=01H MOVLW 0X90 MOVWF BRGCON2 ;設(shè)置Phase_Seg1=3TQ和Prog _Seg=1TQ MOVLW 0X42 MOVWF BRGCON3 ;設(shè)置Phase_Seg2=3TQ ;設(shè)置發(fā)送郵箱0標(biāo)識(shí)符號(hào)和發(fā)送的數(shù)據(jù) MOVLW 0XFF MOVWF BSR ;TXB0D0到TXB0D7的地址在F60h以內(nèi),需 ;要指定BSR BCF TXB0CON,TXREQ MOVLW 0X03 MOVWF TXB0CON ;發(fā)送優(yōu)先級(jí)為最高優(yōu)先級(jí),TXPRI=11 MOVLW 0X08 MOVWF TXB0DLC ;設(shè)置數(shù)據(jù)長(zhǎng)度為8個(gè)字節(jié) MOVLW 0X00 MOVWF TXB0D0 MOVLW 0X01 MOVWF TXB0D1 MOVLW 0X02 MOVWF TXB0D2 MOVLW 0X03 MOVWF TXB0D3 MOVLW 0X04 MOVWF TXB0D4 MOVLW 0X05 MOVWF TXB0D5 MOVLW 0X06 MOVWF TXB0D6 MOVLW 0X07 MOVWF TXB0D7 ;寫發(fā)送緩沖器數(shù)據(jù)區(qū)的數(shù)據(jù) MOVLW 0X00 MOVWF TXB0SIDH MOVLW 0X01 MOVWF TXB0SIDL ;設(shè)置發(fā)送緩沖器0的標(biāo)準(zhǔn)標(biāo)識(shí)符,本程序采用 ;標(biāo)準(zhǔn)識(shí)符 ;設(shè)置接收郵箱0的標(biāo)識(shí)符和初始化數(shù)據(jù) MOVLW 0X00 MOVWF CIOCON ;使CAN進(jìn)入某種工作模式模式 MOVLW 0X00 MOVWF CANCON ;=0X40,進(jìn)入自測(cè)試模式; ;=0x00,正常操作模式 WAIT1 MOVF CANSTAT ;等待進(jìn)入CAN配置模式OPMODE=100 ANDLW 0XE0 SUBLW 0X00 BTFSS STATUS,Z ;等待進(jìn)入CAN正常操作模式OPMODE=000 ;或測(cè)試模式OPMODE=010 GOTO WAIT1 RETURN
;****************PIC單片機(jī)CAN總線通訊匯編程序主程序******************
MAIN NOP CLRF INTCON ;禁止所有中斷 CALL INITIAL ;初始化 LOOP BSF TXB0CON,TXREQ ;請(qǐng)求發(fā)送,TXREQ=1 WAITE2 BTFSC TXB0CON,TXREQ ;等待發(fā)送完成 GOTO WAITE2 BCF TRISB,1 BCF TRISB,4 BCF PORTB,1 ;指示燈亮 BCF PORTB,4 ;另一 指示燈亮 GOTO LOOP
RETURN END
問(wèn)題:小弟用18F458+PCA82C251 在ICD2運(yùn)行,可以運(yùn)行下去,燈也指示亮,但是小弟不敢確定到底有沒(méi)有數(shù)據(jù)發(fā)送出去,所以小弟用了一個(gè)別人的CAN MONITOR 接到CANH 和CANL 上去,(CAN MONITOR 是MB90F543和232串口 組成的監(jiān)視器,通過(guò)一個(gè)軟件察看發(fā)送過(guò)來(lái)的數(shù)據(jù)。軟件設(shè)置的ID也是0001H,可以確定MONITOR是好的,因?yàn)橛衅渌陌遄釉嚵薕K的),當(dāng)不接監(jiān)視板,程序可以順利運(yùn)行,有兩個(gè)燈會(huì)亮,表示程序可以跑,但當(dāng)接上MONITOR 的CANH 和CANL ,就不能跑了,燈不會(huì)亮,數(shù)據(jù)好像沒(méi)有發(fā)送過(guò)來(lái),程序一直在
WAITE2 BTFSC TXB0CON,TXREQ ;等待發(fā)送完成 GOTO WAITE2
這里停留。
我懷疑是阻抗不匹配,但是換了我那個(gè)458的板上的電阻,也還是相同的結(jié)果。
還有或許是監(jiān)視板上的晶振不一樣,458的板是20MHZ,而監(jiān)視板的好像不是20MHZ,因?yàn)槟:吹貌磺宄?/p>
最后我就是懷疑MB90F543里面的程序設(shè)置的波特率還有同步跳轉(zhuǎn)寬度等等跟我的程序不一樣,但是我都不敢確定,請(qǐng)問(wèn)各位大哥有什么看法????
我怎么樣樣才可以看到程序發(fā)送過(guò)來(lái)的數(shù)據(jù)MOVLW 0X00 MOVWF TXB0D0 MOVLW 0X01 MOVWF TXB0D1 MOVLW 0X02 MOVWF TXB0D2 MOVLW 0X03 MOVWF TXB0D3 MOVLW 0X04 MOVWF TXB0D4 MOVLW 0X05 MOVWF TXB0D5 MOVLW 0X06 MOVWF TXB0D6 MOVLW 0X07 MOVWF TXB0D7
?????? |