请各位大哥帮帮小弟看看下面的程,谢谢大家:
LIST P=18F458 #INCLUDE "P18F458.INC" ORG 0X00 GOTO MAIN ORG 0X30
;*********初始化子程序*************** INITIAL BCF TRISB,2 BSF TRISB,3 ;设置CANRX/RB3为输入 ;CANTX/RB2为输出 ;设置CAN的波特率为125K,在Fosc=4M时,Tbit=8us,假设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 ;请求进入CAN配置模式REQOP=100 WAIT BTFSS CANSTAT,OPMODE2 ;等待进入CAN配置模式OPMODE=100 GOTO WAIT MOVLW 0X09 MOVWF BRGCON1 ;设置SJW和BRP,SJW=1TQ,BRP=01H MOVLW 0X90 MOVWF BRGCON2 ;设置Phase_Seg1=3TQ和Prog _Seg=1TQ MOVLW 0X42 MOVWF BRGCON3 ;设置Phase_Seg2=3TQ ;设置发送邮箱0标识符号和发送的数据 MOVLW 0XFF MOVWF BSR ;TXB0D0到TXB0D7的地址在F60h以内,需 ;要指定BSR BCF TXB0CON,TXREQ MOVLW 0X03 MOVWF TXB0CON ;发送优先级为最高优先级,TXPRI=11 MOVLW 0X08 MOVWF TXB0DLC ;设置数据长度为8个字节 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 ;写发送缓冲器数据区的数据 MOVLW 0X00 MOVWF TXB0SIDH MOVLW 0X01 MOVWF TXB0SIDL ;设置发送缓冲器0的标准标识符,本程序采用 ;标准识符 ;设置接收邮箱0的标识符和初始化数据 MOVLW 0X00 MOVWF CIOCON ;使CAN进入某种工作模式模式 MOVLW 0X00 MOVWF CANCON ;=0X40,进入自测试模式; ;=0x00,正常操作模式 WAIT1 MOVF CANSTAT ;等待进入CAN配置模式OPMODE=100 ANDLW 0XE0 SUBLW 0X00 BTFSS STATUS,Z ;等待进入CAN正常操作模式OPMODE=000 ;或测试模式OPMODE=010 GOTO WAIT1 RETURN
;****************PIC单片机CAN总线通讯汇编程序主程序******************
MAIN NOP CLRF INTCON ;禁止所有中断 CALL INITIAL ;初始化 LOOP BSF TXB0CON,TXREQ ;请求发送,TXREQ=1 WAITE2 BTFSC TXB0CON,TXREQ ;等待发送完成 GOTO WAITE2 BCF TRISB,1 BCF TRISB,4 BCF PORTB,1 ;指示灯亮 BCF PORTB,4 ;另一 指示灯亮 GOTO LOOP
RETURN END
问题:小弟用18F458+PCA82C251 在ICD2运行,可以运行下去,灯也指示亮,但是小弟不敢确定到底有没有数据发送出去,所以小弟用了一个别人的CAN MONITOR 接到CANH 和CANL 上去,(CAN MONITOR 是MB90F543和232串口 组成的监视器,通过一个软件察看发送过来的数据。软件设置的ID也是0001H,可以确定MONITOR是好的,因为有其他的板子试了OK的),当不接监视板,程序可以顺利运行,有两个灯会亮,表示程序可以跑,但当接上MONITOR 的CANH 和CANL ,就不能跑了,灯不会亮,数据好像没有发送过来,程序一直在
WAITE2 BTFSC TXB0CON,TXREQ ;等待发送完成 GOTO WAITE2
这里停留。
我怀疑是阻抗不匹配,但是换了我那个458的板上的电阻,也还是相同的结果。
还有或许是监视板上的晶振不一样,458的板是20MHZ,而监视板的好像不是20MHZ,因为模糊看得不清楚。
最后我就是怀疑MB90F543里面的程序设置的波特率还有同步跳转宽度等等跟我的程序不一样,但是我都不敢确定,请问各位大哥有什么看法????
我怎么样样才可以看到程序发送过来的数据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
?????? |