51/AVR单片机技术驿站!  <在线翻译>     便利工具    特色网址   无弹窗、无插件的绿色站点...  英才招聘   学历查询  喜欢>>收藏我站 

当前位置:首页 > 单片机技术文章 > PIC单片机 > 详细内容
PIC单片机CAN总线通讯汇编程序
发布时间:2009/7/20  阅读次数:755  字体大小: 【】 【】【

;该汇编程序实现CAN总线通讯发送缓冲器0向接收缓冲器0发送数据的自测试模式,单片机采用P18F458,其中接收采用中断方式,发送采用查询方式,本例的c51程序请打开  http://www.51hei.com/mcu/555.html  ,流程和这个一样的。

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

我要评论
  • 匿名发表
  • [添加到收藏夹]
  • 发表评论:(匿名发表无需登录,已登录用户可直接发表。) 登录状态:未登录
最新评论
所有评论[0]
    暂无已审核评论!

网站导航 管理登陆 ┊ 免责声明 问题反馈  友链说明
本站部分内容来自网络共享资源,如有冒犯您的权利请来信告之删除或纠正!
不得对本站进行复制、盗链或镜像,转载内容须获得同意或授权;欢迎友情链接、站务合作!

    我要报警 Alexa
 mcusy_cn#126.com (请把#改成@) 交流:522422171
本站学习交流群:138..158(高级群1-)、77930286(高级群2)、61804809(群3)
Copyright© MCUSY All Rights Reserved
本站网警备案号: WZ36040002485
  ICP备案证书号:粤ICP备09034963号