LIST P=18F458INCLUDE "P18F458.INC"CAN_FLAG EQU 0X20 ;定义标志寄存器ORG 0X00GOTO MAINORG 0X18GOTO CAN_INTSERVE ;转向中断服务子程序ORG 0X30;*********初始化子程序***************INITIALBCF TRISB,2BSF 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=3TQMOVLW 0X80MOVWF CANCON ;请求进入CAN配置模式REQOP=100WAITBTFSS CANSTAT,OPMODE2 ;等待进入CAN配置模式OPMODE=100GOTO WAIT MOVLW 0X01 MOVWF BRGCON1 ;设置SJW和BRP,SJW=1TQ,BRP=01HMOVLW 0X90MOVWF BRGCON2 ;设置Phase_Seg1=3TQ和Prog _Seg=1TQMOVLW 0X42MOVWF BRGCON3 ;设置Phase_Seg2=3TQ;设置发送邮箱0标识符号和发送的数据MOVLW 0XFFMOVWF BSR ;TXB0D0到TXB0D7的地址在F60h以内,需;要指定BSRMOVLW 0X08MOVWF TXB0DLC ;设置数据长度为8个字节MOVLW 0X00MOVWF TXB0D0MOVLW 0X01MOVWF TXB0D1MOVLW 0X02MOVWF TXB0D2MOVLW 0X03MOVWF TXB0D3MOVLW 0X04MOVWF TXB0D4MOVLW 0X05MOVWF TXB0D5MOVLW 0X06MOVWF TXB0D6MOVLW 0X07MOVWF TXB0D7 ;写发送缓冲器数据区的数据MOVLW 0XFFMOVWF TXB0SIDH MOVLW 0XE0MOVWF TXB0SIDL ;设置发送缓冲器0的标准标识符,本程序采用;标准识符;设置接收邮箱0的标识符和初始化数据MOVLW 0XFF MOVWF RXB0SIDH MOVLW 0XE0MOVWF RXB0SIDL ;设置接收缓冲器0的标识符MOVLW 0XFFMOVWF RXF0SIDHMOVLW 0XE0MOVWF RXF0SIDL ;初始化接收滤波器0MOVLW 0X00MOVWF RXM0SIDHMOVLW 0X00MOVWF RXM0SIDL ;初始化接收屏蔽MOVLW 0X20MOVWF RXB0CON ;仅仅接收标准标识符的有效信息,FILHIT0=0;表示RXB0采用filter0MOVLW 0X08MOVWF RXB0DLC ;设置接收缓冲器0的数据区长度MOVLW 0X00MOVWF RXB0D0MOVWF RXB0D1MOVWF RXB0D2MOVWF RXB0D3MOVWF RXB0D4MOVWF RXB0D5MOVWF RXB0D6MOVWF RXB0D7 ;初始化接收缓冲器0的数据区数据;初始化CAN模块的I/O控制寄存器MOVLW 0X00MOVWF CIOCON;使CAN进入某种工作模式模式MOVLW 0X00MOVWF CANCON ;=0X40,进入自测试模式;;=0x00,正常操作模式WAIT1 MOVF CANSTATANDLW 0XE0SUBLW 0X00BTFSS STATUS,Z ;等待进入CAN正常操作模式OPMODE=000;或测试模式OPMODE=010GOTO WAIT1 ;初始化CAN的中断MOVLW 0X00MOVWF PIR3 ;清所有中断标志BSF PIE3,RXB0IE ;使能接收缓冲器0的接收中断MOVLW 0X01MOVWF IPR3 ;接收缓冲器0的接收中断为最高优先级RETURN;*********接收缓冲器0接收中断服务程序***********CAN_INTSERVEBTFSS PIR3,RXB0IF GOTO ERR_EXIT BSF CAN_FLAG,0BCF PIR3,RXB0IF ;清接收中断标志BCF RXB0CON,RXFUL ;打开接收缓冲器来接收新信息ERR_EXIT RETFIE;****************PIC单片机CAN总线通讯汇编程序主程序******************;****************此程序首发于http://www.51hei.com/单片机网 转载请保留MAIN NOPCLRF INTCON ;禁止所有中断CALL INITIAL ;初始化BSF INTCON,GIEBSF INTCON,PEIE ;使能中断MOVLW 0X03MOVWF TXB0CON ;发送优先级为最高优先级,TXPRI=11LOOPBSF TXB0CON,TXREQ ;请求发送,TXREQ=1WAITE2BTFSS PIR3,TXB0IF ;等待发送完成 GOTO WAITE2BCF PIR3,TXB0IFWAITE3BTFSS CAN_FLAG,0 ;等待接收数据GOTO WAITE3BCF CAN_FLAG,0 ;清接收到标志BCF TXB0CON,TXREQ ;禁止发送 INCF RXB0D0,0 MOVWF TXB0D0INCF RXB0D1,0 MOVWF TXB0D1INCF RXB0D2,0 MOVWF TXB0D2INCF RXB0D3,0 MOVWF TXB0D3INCF RXB0D4,0 MOVWF TXB0D4INCF RXB0D5,0 MOVWF TXB0D5INCF RXB0D6,0 MOVWF TXB0D6INCF RXB0D7,0 MOVWF TXB0D7 ;用接收数据加1来更新发送数据GOTO LOOPRETURNEND
导读:目前正在解读《PIC单片机CAN总线通讯汇编程序》的相关信息,《PIC单片机CAN总线通讯汇编程序》是由用户自行发布的知识型内容!下面请观看由(电工技术网 - www.9ddd.net)用户发布《PIC单片机CAN总线通讯汇编程序》的详细说明。
简介:该汇编程序实现CAN总线通讯发送缓冲器0向接收缓冲器0发送数据的自测试模式,单片机采用P18F458,其中接收采用中断方式,发送采用查询方式
提醒:《PIC单片机CAN总线通讯汇编程序》最后刷新时间 2024-03-14 01:07:33,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《PIC单片机CAN总线通讯汇编程序》该内容的真实性请自行鉴别。