请各位大哥帮帮小弟看看下面的程,谢谢大家:
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
??????
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>