基于CAN总线分布式控制系统智能节点的设计
速率必须一致,而且接、发双方必须同步。报文的接收主要有两种方式:中断和查询接收方式。 为提高通信的实时性,文中采用中断接收方式,而且这样也可保证接收缓存器不会出现数据溢出现象。SJA1000的Basic CAN工作模式是与其前一款PCA82C200独立控制器相兼容的模式, 而PeliCAN工作模式支持CAN协议中的更多功能,它的程序设计也与之有所不同。下面给出SJA1000工作在模PeliCAN式下的节点初始化、报文发送、报文接收的196汇编源程序。 INITIALIZE: 初始化子程序 LDB AL, #09H; 初始化模式寄存器进入复位模式 STB AL, MODE; 选择单滤波方式 LDB AL, #88H; 时钟分频器 STB AL, CDR; 选Peli CAN模式 LDB AL, #00H STB AL, ACR0; 初始化接收代码寄存器 LDB AL, #60H STB AL, ACR1 LDB AL, #00H STB AL, AMR0; 初始化接屏蔽寄存器 LDB AL, #3FH; 只接收标识符为2,3的报文 STB AL, AMR1 LDB AL, #8FH STB AL, IER; 中断使能寄存器 LDB AL, #01H; 总线定时寄存器0、1的设置 STB AL, BTR0; LDB AL, #1CH; 在16MHz晶振情况下 STB AL, BTR1; 波特率设置为250 LDB AL, #0AAH STB AL, OCR; 输出控制器寄存器设置 LDB AL, #0H; 接收缓存器起始地址设为0 STB AL, RBSA; LDB AL, #01H; ORB AL, MODE; STB AL, MODE; 返回工作模式 RET TRANSMIT:; 发送子程序 LDB AL, SR SRCVE: JBS AL,4, SRCVE;正接收? STRSV: JBC AL,3, STRSV;发送成功? STBF: JBC AL, 2, STBF; 发送缓存器锁定否 WID: LDB AL, #08H LD BX, #TXB; 发送缓存的首址 STB AL,[BX]+; 传送两个字节的标识符 LDB AL,#ID0 STB AL,[BX]+ LDB AL,#ID1 STB AL,[BX]+ LDB COUT,#08H; 8个字节数据 TDATA: LDB AL,[DATA]+ CPU内的发送数据缓存区首址 STB AL,[BX]+; DJNZ COUT,TDATA; 8个字节发完否? LDB AL,#01H; STB AL,CMR; 发送 RET RECEIVE: ; 接收中断程序 PUSHF; 保护现场 LDB AL,IR JBC AL,0,OTHER; 接收中断否? LD BX,#RXB; 接收缓存器首址 LDB AL,[BX]+ JBC AL,6,RCDATA;标识符的RTR=1? LDB AL,#04H; 是远程帧,释放接收缓存区 STB AL,CMR; LCALL TRANSMIT; 相应远程帧,发送相应数据 SJMP BACK RCDATA: ANDB AL,#0FH; 取低四位数据长度 ADDB AL,#03H; STB AL,R1; 该报文含有的字节数 LD BX,#RXB; 接收缓存器的首地址 LD CX,#CRBF; CPU内的接收数据缓存区首址 RECE: LDB AL,[BX]+ STB AL,[CX]+ INCB R1 DJNZ R1,RECE; 接收完否? LDB AL,#04H STB AL,CMR; 释放接收缓存区 BACK; POPF RET 结语 CAN总线已被公认为是最有前途的几种现场总线之一。因其高性能价格比、实现简单等突出优点深得越来越多的研发人员的青睐。
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)