您当前的位置:五五电子网电子知识单元电路接口电路基于P89C668单片机的CAN总线接口设计 正文
基于P89C668单片机的CAN总线接口设计

基于P89C668单片机的CAN总线接口设计

点击数:7571 次   录入时间:03-04 11:38:25   整理:http://www.55dianzi.com   接口电路

  MO A, #01H; 发送请求命令

  MOVX @DPTR, A

  RET

  2.3 CAN总线接收程序

  SJA1000 根据规则自动接收消息,接收到的消息放入接收缓冲器,同时接收缓冲器状态标志位RBS 置为1,接收程序根据RBS 值来决定接收报文与否.SJA1000 报文的接收也有两种方式:中断和查询.对通信的实时性要求不高时,可采用查询方式,否则采用中断方式.以下给出中断接收方式程序.

  CAN_INT: CLR EA; 关所有中断

  MOV DPTR, #IER; 中断寄存器IER 使能

  MOVX A, @DPTR

  MOV R6, A; 保存SJA1000 中断允

  MOV A, #00H ; 重设SJA1000 中断允许模式为不允许任何中断

  MOVX @DPTR, A

  LCALL RECEIVE; 接收信息

  JZ ReceivOk; 接收到的信息正确则跳转,否则进行错误处理.. ..; 错误处理

  ReceivOk: MOV DPTR, #IER

  MOV A, R6; 恢复SJA1000 中断允许模式

  MOVX @DPTR, A

  SETB EA; 开放中断

  RETI

  RECEIVE: CLR A

  MOV DPTR, #SR; 状态寄存器SR

  JZ ERROR; 不是正常的消息接收中断则跳转

  LOOP2: MOV DPTR, #RXB_Addr; 接收寄存器的基地址

  MOV R1, #RXB_Data; 存放所接收数据的首地址

  MOV R7, #0AH

  LOOP3: MOVX A, @DPTR; 接收数据

  MOV @R1, A; 保存数据

  INC DPTR

  INC R1

  DJNZ R7, LOOP3

  MOV DPTR, #CMR; 命令寄存器

  MOV A, #0X04; 释放接收缓冲器

  MOVX @DPTR, A

  MOV DPTR, #SR

  MOVX A, @DPTR

  CJNE A, #01H, LOOP2; 等待接收队列为空

  MOVD PTR, #IR; 中断寄存器IR

  MOVX A, @DPTR; 清空SJA1000 的接收中断标识位

  CLR A; 返回值ACC=0,表示接收消息正确

  LJMP END_RECEIVE

  ERROR: .. ..; 接收消息错误处理

  MOVA, #01H; 返回值ACC=1,表示接收消息不正确

  NED_RECEIVE: RET

  3 结语

  以上介绍了P89C668单片机及其与CAN控制器SJA1000之间的接口方法,并给出了SJA1000在PelICAN模式下的SJA1000初始化程序、发送程序和接收程序.可在此基础上实现更复杂的CAN总线通信处理,如报警处理、错误处理等.



上一页  [1] [2] 


本文关键字:单片机  接口  接口电路单元电路 - 接口电路