调试好的CAN总线程序(汇编1)

发布者:学富五车最新更新时间:2015-09-10 来源: eefocus关键字:CAN  总线程序  汇编 手机看文章 扫描二维码
随时随地手机看文章

系统can地址为550,用于can系统测试,应用T0定时器每隔1s向can总线发送一组数据:数据长度为8个字节,
首字节为05H,第二个字节为累加变量,每秒钟数值增加1,

CONTROLLER_BASE   EQU   7E00H     ;SJA1000的片选地址

RCV_GOOD        BIT    0FH    ;成功的接收一帧标志
SEC_FLAG        BIT    010H    ;一秒到标志
ERR_FLAG        BIT    011H    ;监测到错误标志

SAVE_INT_INFO   DATA    032H    ;保存SJA1000中断寄存器的内容

SEND_DATA_BUF1    DATA     040H    ;发送缓冲区
SEND_DATA_BUF2    DATA    041H
SEND_DATA_BUF3    DATA    042H
SEND_DATA_BUF4    DATA    043H
SEND_DATA_BUF5    DATA    044H
SEND_DATA_BUF6    DATA    045H
SEND_DATA_BUF7    DATA    046H
SEND_DATA_BUF8    DATA    047H
SEND_DATA_BUF9    DATA    048H
SEND_DATA_BUF10   DATA    049H

RCV_DATA_BUF1     DATA    050H    ;接收缓冲区
RCV_DATA_BUF2     DATA    051H
RCV_DATA_BUF3     DATA    052H
RCV_DATA_BUF4     DATA    053H
RCV_DATA_BUF5     DATA    054H
RCV_DATA_BUF6     DATA    055H
RCV_DATA_BUF7     DATA    056H
RCV_DATA_BUF8     DATA    057H
RCV_DATA_BUF9     DATA    058H
RCV_DATA_BUF10    DATA    059H

ERROR_STATUS      DATA  07CH    ;错误状态表示
TEST_DATA         DATA    07FH    ;测试发送数据

;程序开始
ORG         0000H
LJMP        MAIN         ;运行主程序

ORG        0003H             
LJMP        BCAN_INT0    ;中断方式访问SJA1000程序

ORG        000BH
LJMP        T0_INTERRUPT     ;定时器0中断

 

ORG               0100H   ;程序开始
MAIN:
    MOV        R0,#07fH
    CLR     A
    MOV     @R0,A
    DJNZ    R0,$-1
    MOV     @R0,A
    MOV     SP,#60H        ;设置SP
    CLR     P2.0                ;SJA1000退出硬件复位模式
   
    LCALL   SJA1000_INT0    ;初始化SJA1000
    LCALL   T0_INIT
    CLR     P3.4                ;点亮指示灯
    SETB    PX0
    SETB    IT0
    SETB    EX0
    SETB    ET0
    SETB    TR0
    SETB    EA

LOOPER:
        JNB        RCV_GOOD,LOOPER2    ;sja1000成功接收一帧,通知CPU处理
        CLR         RCV_GOOD
    LCALL       RCVDATA_PRG
LOOPER2:
    JNB        SEC_FLAG,LOOPER3    ;一秒时间到,每秒发送一次
        CLR         SEC_FLAG
    CLR         P3.5                ;点亮指示灯
    LCALL       SENDDATA_PRG
LOOPER3:
    JNB        ERR_FLAG,LOOPER4               ;错误标志,错误处理
        CLR         ERR_FLAG
    LCALL       ERR_PRG
LOOPER4:
    AJMP        LOOPER

;;;;;;;;;初始化SJA1000;;

SJA1000_INT0:  
    LCALL         BCAN_CREATE_COMMUNATION ;调用SJA1000接口测试函数
    MOV           R7,           #04
    LCALL         BCAN_SET_BANDRATE   ;设置波特率为100k         
    MOV           R7,         #0A8H  ;设置接收报文ID
    MOV           R6,         #0FFH
    LCALL         BCAN_SET_OBJECT
    MOV           R7,         #0AAH   ;设置输出控制、时钟分频;正常输出模式
    MOV           R6,         #048H   ;使能内部比较器、禁止CLKOUT
    LCALL         BCAN_SET_OUTCLK     ;
    LCALL         BCAN_QUIT_RETMODEL  ;退出复位状态
    MOV              DPTR,#REG_CONTROL   ;开放SJA1000内部功能中断
    MOV              A,#01EH          ;中断开放
    MOVX      @DPTR,A
    CLR           F0
    RET

;;;;;错误信息处理;;;;;;;;;;;;
ERR_PRG:
    LCALL     BCAN_ENTER_RETMODEL                 ;进入复位模式
    LCALL       SJA1000_INT0 ;
    MOV       ERROR_STATUS,#0FCH
    RET

;;;;;;;;;接收数据处理部分;;;;;
RCVDATA_PRG:
    MOV    R0,# RCV_DATA_BUF1     ;微处理器接收首地址
    LCALL    BCAN_DATA_RECEIVE              ;调用接收数据子程序
    MOV    R7,#04H                  ;释放接收缓冲区
    LCALL    BCAN_CMD_PRG        ;
        RET
;;;;;;;;;;;;;;;;;;控制SJA1000向CAN总线发送数据处理部分;;;;;;;;;;;;;;;
SENDDATA_PRG:
    MOV           R0,          #SEND_DATA_BUF1
    MOV           @R0,         #02H
    INC           R0
    MOV           @R0,         #08H
    INC           R0
    MOV           @R0,         #05H
    MOV              A,           TEST_DATA
    INC           R0
    MOV           @R0,         A
    MOV           R0,          #SEND_DATA_BUF1
    LCALL         BCAN_DATA_WRITE       ;将要发送的数据送入发送缓冲区
    MOV           R7,          #01
    LCALL         BCAN_CMD_PRG
    RET

;;;;;;;;;;定时器0初始化;;;;;;;;;;
T0_INIT:
    MOV     A,TMOD
    ANL     A,#0F0H
    ORL     A,#01H
    MOV        TMOD,A;T0工作在方式1
    MOV        TH0,#0FCH        ;定时周期1MS
    MOV        TL0,#066H
    MOV     3AH,#00H
    RET

;;;;;;;;;外部中断0;;;;;;;;;;;
BCAN_INT0:
    push    DPH
    PUSH    DPL
    PUSH    PSW            ;PSW,ACC入栈
    PUSH    ACC
        USING    3            ;应用寄存器第3组 
    MOV    DPTR,#REG_INTERRUPT    ;读中断寄存器
    MOVX    A,@DPTR          ;
    MOV    SAVE_INT_INFO,A        ;保存中断寄存器的内容
    JNB     ACC.0,BCAN_INT1        ;接收中断
    SETB    RCV_GOOD        ;置位接收标志

BCAN_INT1:
    MOV    A,SAVE_INT_INFO          
    JNB    ACC.2,BCAN_INT2        ;错误中断
    SETB    ERR_FLAG        ;置位错误标志
BCAN_INT2:
    POP    ACC
    POP    PSW
    POP     DPL
    POP     DPH
    RETI
;;;;;;;;定时器0中断;;;;
T0_INTERRUPT:
    push    DPH
    PUSH    DPL
    PUSH    PSW             ;PSW、ACC入栈
    PUSH    ACC
    USING   2
        MOV    TH0,#80H         ;设置定时周期0.3S
    MOV    TL0,#26H
        INC     3AH
    MOV     A,3AH
    CJNE    A,#23H,T0_QUIT       ;判断1秒时间是否到
    MOV     3AH,#00H
    INC    TEST_DATA            ;测试发送的数据,每1秒加1
        SETB    SEC_FLAG             ;置位1秒到标志
T0_QUIT:
    POP    ACC
    POP    PSW
    POP     DPL
    POP     DPH
    RETI

 

 

BCAN_ENTER_RETMODEL:
      MOV            DPTR,   #REG_CONTROL       ;控制寄存器访问 
      MOVX           A,      @DPTR              ;
      ORL            A,      #01H               ;置位复位请求
      MOVX           @DPTR,  A                              ;
      CLR            F0
      MOVX           A,      @DPTR              ;验证复位是否写入
      JB             ACC.0,  BCAN_ER_QUIT
      SETB           F0                         ;复位不成功
BCAN_ER_QUIT:
      RET

关键字:CAN  总线程序  汇编 引用地址:调试好的CAN总线程序(汇编1)

上一篇:can协议_can总线协议
下一篇:PCI总线在图像采集卡中的重要作用

推荐阅读最新更新时间:2024-05-02 23:56

基于μC/OS-II的CAN总线驱动程序设计
  引言   应用实时多任务操作系统(RTOS)作为嵌入式设计的基础和开发平台将成为嵌入式应用设计的主流。μC/OS-II是一种源码公开、可移植性、可固化、可裁剪、占先式的实时多任务操作系统,目前已经得到广泛的应用。   在为电力系统接地选线装置开发的数据采集监测系统的设计中,笔者设计了集散式的数据采集结构,灵活的组态适应了目前国内多数中低压输配电网的数据采集需求。在此硬件平台上,笔者将实时操作系统μC/OS-II移植到TMS320LF2407A型号的DSP上,实现了多任务的并行执行,系统的可靠性和实时性得到大幅提升;设计了CAN总线驱动程序,使得下位采集处理模块与上位的主控制器具备了可靠快速的通信功能和协调功能。  
[嵌入式]
MCS-51单片机汇编语言:算数运算指令有哪些?
加法指令(Addtion) ADD A, Rn ; A←(A)+(Rn) ADD A, @Ri ;A←(A)+((Ri)) ADD A, direct ;A←(A)+(direct) ADD A, #data ;A←(A)+#data 带进位加法指令 ADDC A, Rn ; A←(A)+(Rn)+(Cy) ADDC A, @Ri ;A←(A)+((Ri )) +(Cy) ADDC A, direct ;A←(A)+(direct) +(Cy) ADDC A, #data ;A←(A)+#data +(Cy) 加1指令 INC A
[单片机]
CAN能信卡的Linux设备驱动程序设计实现
    摘要: 介绍了Linux下设备驱动程序的结构,描述了CAN通信卡设备驱动程序的软件框架以及如何将CAN设备驱动程序加入到Linux系统内核中。讨论了具体实现中为了提高通信效率和通信能力,改进设备驱动程序的缓冲区管理以及利用Linux的特点合理设计中断处理程序。     关键词: Linux操作系统 设备驱动程序 CAN通信卡 中断处理程序 目前,许多工业现场如电力系统、化工系统等大量使用控制器局部网(CAN-Controller Area Network)现场总线网络,CAN通信卡作为计算机的外设将计算机接入CAN网络。市场上有不少CAN通信卡,但基本上都不带Linux驱动程序,当需要在Linu
[应用]
TDK持续助力iCAN全国大学生创新创业大赛
TDK持续助力iCAN全国大学生创新创业大赛 2022年已是TDK赞助iCAN全国大学生创新创业大赛的第二年了。 我们之所以继续赞助iCAN大赛,不仅是因为大赛一直秉承“自信、坚持、梦想” 的精神,‘发现和培养高校一批有作为、有潜力的创新创业优秀青年人才,激发勇于创新的活力’的理念与TDK的经营理念“理想、勇气、信赖”所追求的目标有着异曲同工之处,更是因为iCAN倡导的“以科技创新创业服务社会、改善人类生活,推动高科技产业的发展”的宗旨与TDK “以丰富的创造力,回馈文化与产业” 的企业宗旨也十分契合。 我们认为通过持续与大赛合作,不仅可以进一步地在更广泛的人群中提升TDK在中国的品牌知名度,也有助于TDK在国内高
[工业控制]
TDK持续助力i<font color='red'>CAN</font>全国大学生创新创业大赛
基于CAN总线的火灾远程监控系统
0引言: 以现代通信和网络传输技术为基础发展起来的火灾远程联网监控技术,可以确保火灾探测报警系统和消防安全设施正常运行并发挥其应有作用。本文介绍利用 CAN 总线在分布式控制方面的特点和数据传输方面的优势,实现分布式远程火灾信息的数据采集;再使用嵌入式网关实现CAN 到以太局域网或 Internet 的无缝连接,提高了火灾信息的传输距离,从而利用现有的网络资源,达成火灾信息的远程监控。 1.系统总体框架设计 火灾远程监控系统中的数据采集终端是位于采集现场的各种火灾信号探测器,并且分散在各个不同的位置(楼层),而集中报警控制器在中央控制室(消防控制室), 它们之间距离通常在几十米到几百米之间, 有时甚至达到几千米。因此,连接导线少
[工业控制]
基于<font color='red'>CAN</font><font color='red'>总线</font>的火灾远程监控系统
利用汇编语言实现DES加密算法
目前在金融界及非金融界的保密通信中,越来越多地用到了DES算法。DES(Data Encryption Standard)即数据加密算法,是IBM公司于 1977年研究成功并公开发表的。随着我国三金工程尤其是金卡工程的启动,DES算法在POS、ATM、磁卡及智能卡(IC卡)中被广泛应用,以此来实现关键数据的保密。如信用卡持卡人的PIN的加密传输、IC卡与POS间的双向认证、金融交易中的密码键盘等,均用到DES算法。由于密码键盘不可能使用高级语言,所以用汇编语言实现DES就非常实用。 1 DES算法的简单原理   DES是一种分组密码。假定明文m是由0和1组成的长度为64位的符号串,密钥k也是64位的0、1符号串。 设:M=m
[单片机]
CANopen 总线应用札记:关于总线速率与总线长度
很多工业控制与通讯项目在现场的实际问题都和通讯速率、通讯线缆长度与材质结构特性有关,这些都是终端客户关心的热点问题,CANopen应用也是如此。 小弟我绘制了以下图片,不仅是速率与长度对照表,还包括了数据帧传输耗时计算、EDS文件中关于通讯速率描述等信息。这能帮助我们从理论上解释大部分CANopen通讯速度问题: 但是在大型现场项目中,我们会遇到很多极端问题,例如:如何加长CANopen通讯网络,使其总长度达到10公里甚至更长,同时还保证良好的稳定性与抗干扰性?对于自动化机器设备供应商来说,遇到这种问题的可能性很小,但是楼宇自动化就很可能遇到。 目前我查阅到的流行做法是:采用CAN总线通讯中继器、光耦合器,架设进CANopen
[嵌入式]
8051、ARM和DSP指令周期的测试与分析
在实时控制系统中,选择微控制器的指标时最重要的是计算速度的问题。指令周期是反映计算速度的一个重要指标,为此本文对三种最具代表性的微控制器(AT89S51单片机、ARM7TDMI核的LPC2114型单片机和TMS320F2812)的指令周期进行了分析和测试。为了能观察到指令周期,将三种控制器的GPIO口设置为数字输出口,并采用循环不断地置位和清零,通过观察GPIO口的波形变化得到整个循环的周期。为了将整个循环的周期与具体的每一条指令的指令周期对应起来,通过C语言源程序得到汇编语言指令来计算每一条汇编语言的指令周期。 1 AT89S51工作机制及指令周期的测试 AT89S51单片机的时钟采用内部方式,时钟发生器对振荡脉冲进行2分频。
[单片机]
小广播
最新嵌入式文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved