搜索
bottom↓
回复: 1

PIC18F458通信问题

[复制链接]

出0入0汤圆

发表于 2009-12-11 14:59:12 | 显示全部楼层 |阅读模式
请各位大哥帮帮小弟看看下面的程,谢谢大家:

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



??????

出0入0汤圆

 楼主| 发表于 2009-12-11 14:59:29 | 显示全部楼层
请各位大哥帮帮小弟看看下面的程,谢谢大家:

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



??????
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-9 17:19

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表