PIC18F458通信问题

2020-02-10 08:33发布

请各位大哥帮帮小弟看看下面的程,谢谢大家:

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



??????
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
2条回答
123lifn
2020-02-10 12:24
请各位大哥帮帮小弟看看下面的程,谢谢大家:

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



??????

一周热门 更多>