机电之家资源网
单片机首页|单片机基础|单片机应用|单片机开发|单片机文案|软件资料下载|音响制作|电路图下载 |嵌入式开发
培训信息
赞助商
PIC单片机CAN总线通讯汇编程序
PIC单片机CAN总线通讯汇编程序
 更新时间:2009-12-12 11:02:35  点击数:0
【字体: 字体颜色
该汇编程序实现CAN总线通讯发送缓冲器0向接收缓冲器0发送数据的自测试模式,单片机采用P18F458,其中接收采用中断方式,发送采用查询方式LIST P=18F458
INCLUDE "P18F458.INC"

CAN_FLAG EQU 0X20 ;定义标志寄存器

ORG 0X00
GOTO MAIN
ORG 0X18
GOTO CAN_INTSERVE ;转向中断服务子程序
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 0X01 
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
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 0XFF
MOVWF TXB0SIDH 
MOVLW 0XE0
MOVWF TXB0SIDL ;设置发送缓冲器0的标准标识符,本程序采用
;标准识符
;设置接收邮箱0的标识符和初始化数据
MOVLW 0XFF 
MOVWF RXB0SIDH 

MOVLW 0XE0
MOVWF RXB0SIDL ;设置接收缓冲器0的标识符
MOVLW 0XFF
MOVWF RXF0SIDH
MOVLW 0XE0
MOVWF RXF0SIDL ;初始化接收滤波器0
MOVLW 0X00
MOVWF RXM0SIDH
MOVLW 0X00
MOVWF RXM0SIDL ;初始化接收屏蔽
MOVLW 0X20
MOVWF RXB0CON ;仅仅接收标准标识符的有效信息,FILHIT0=0
;表示RXB0采用filter0
MOVLW 0X08
MOVWF RXB0DLC ;设置接收缓冲器0的数据区长度
MOVLW 0X00
MOVWF RXB0D0
MOVWF RXB0D1
MOVWF RXB0D2
MOVWF RXB0D3
MOVWF RXB0D4
MOVWF RXB0D5
MOVWF RXB0D6
MOVWF RXB0D7 ;初始化接收缓冲器0的数据区数据
;初始化CAN模块的I/O控制寄存器
MOVLW 0X00
MOVWF CIOCON
;使CAN进入某种工作模式模式
MOVLW 0X00
MOVWF CANCON ;=0X40,进入自测试模式;
;=0x00,正常操作模式
WAIT1 
MOVF CANSTAT
ANDLW 0XE0
SUBLW 0X00
BTFSS STATUS,Z ;等待进入CAN正常操作模式OPMODE=000
;或测试模式OPMODE=010
GOTO WAIT1 
;初始化CAN的中断
MOVLW 0X00
MOVWF PIR3 ;清所有中断标志
BSF PIE3,RXB0IE ;使能接收缓冲器0的接收中断
MOVLW 0X01
MOVWF IPR3 ;接收缓冲器0的接收中断为最高优先级
RETURN

;*********接收缓冲器0接收中断服务程序***********
CAN_INTSERVE
BTFSS PIR3,RXB0IF 
GOTO ERR_EXIT 
BSF CAN_FLAG,0
BCF PIR3,RXB0IF ;清接收中断标志
BCF RXB0CON,RXFUL ;打开接收缓冲器来接收新信息
ERR_EXIT 
RETFIE

;****************PIC单片机CAN总线通讯汇编程序主程序******************
;****************此程序首发于http://www.51hei.com/ 单片机网 转载请保留
MAIN NOP
CLRF INTCON ;禁止所有中断
CALL INITIAL ;初始化
BSF INTCON,GIE
BSF INTCON,PEIE ;使能中断
MOVLW 0X03
MOVWF TXB0CON ;发送优先级为最高优先级,TXPRI=11
LOOP
BSF TXB0CON,TXREQ ;请求发送,TXREQ=1
WAITE2
BTFSS PIR3,TXB0IF ;等待发送完成 
GOTO WAITE2
BCF PIR3,TXB0IF
WAITE3
BTFSS CAN_FLAG,0 ;等待接收数据
GOTO WAITE3
BCF CAN_FLAG,0 ;清接收到标志
BCF TXB0CON,TXREQ ;禁止发送 
INCF RXB0D0,0 
MOVWF TXB0D0
INCF RXB0D1,0 
MOVWF TXB0D1
INCF RXB0D2,0 
MOVWF TXB0D2
INCF RXB0D3,0 
MOVWF TXB0D3
INCF RXB0D4,0 
MOVWF TXB0D4
INCF RXB0D5,0 
MOVWF TXB0D5
INCF RXB0D6,0 
MOVWF TXB0D6
INCF RXB0D7,0 
MOVWF TXB0D7 ;用接收数据加1来更新发送数据
GOTO LOOP
RETURN
END

  • 上一篇: pic单片机p18f458A/D中断转换程序
  • 下一篇: 没有了
  • 发表评论   告诉好友   打印此文  收藏此页  关闭窗口  返回顶部
    热点文章
     
    推荐文章
     
    相关文章
    网友评论:(只显示最新5条。)
    关于我们 | 联系我们 | 广告合作 | 付款方式 | 使用帮助 | 机电之家 | 会员助手 | 免费链接

    点击这里给我发消息66821730(技术支持)点击这里给我发消息66821730(广告投放) 点击这里给我发消息41031197(编辑) 点击这里给我发消息58733127(审核)
    本站提供的机电设备,机电供求等信息由机电企业自行提供,该企业负责信息内容的真实性、准确性和合法性。
    机电之家对此不承担任何保证责任,有侵犯您利益的地方请联系机电之家,机电之家将及时作出处理。
    Copyright 2007 机电之家 Inc All Rights Reserved.机电之家-由机电一体化网更名-声明
    电话:0571-87774297 传真:0571-87774298
    杭州滨兴科技有限公司提供技术支持

    主办:杭州市高新区(滨江)机电一体化学会
    中国行业电子商务100强网站

    网站经营许可证:浙B2-20080178-1