⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 basicmainl.asm

📁 ,片选接到p1.5 复位端 p1.4 中断端接到 int0 82c250工作在斜率模式下
💻 ASM
📖 第 1 页 / 共 4 页
字号:
;于士友 2007.1.22
;can总线下位机发送端测试程序

;发送一帧数据 0AAH 08H 55H 55H 55H 55H 55H 55H 55H 55H
;加上ID等共10个字节(不连CRC给上位机接收。只发送一次就进入死循环。
;延时一段时间才发送,以等待上位机初始化完毕。
;**************************************************************
;*************** BASIC CAN 测试程序 ***************************
;* 说明:                                                     *
;*      本程序测试硬件电路在BASIC CAN 模式下是否能够正常工作  *
;*      电路同样适用于PeliCan 模式。不包括串口发送程序        *
;**************************************************************
;* 测试电路说明:                                             *
;*      SJA1000 的AD.0 ~ AD.7 连接单片机的P0.0 ~ P0.7         *
;*      SJA1000 的RST 通过单片机的P1.4口控制                  *
;* 单片机型号:                                               *
;*      AT89S52   11.0592MHz                                  *
;* CAN 控制器及收发器:                                       *
;*      SJA1000  PCA82C250  12MHz                             *
;**************************************************************
;* 程序开始编制日期      2007. 1. 10                          *
;* 程序调试通过日期                                           *
;* 程序版本号            Ver 1.0                              *
;**************************************************************
;**************************************************************

;//以下为电路中的资源定义
;硬件电路相关
SJA1000_RESET     BIT   P1.4
SJA1000_CS        BIT   P1.5
SJA1000_INT       BIT   INT0

;//包含周立功SJA1000内部资源定义头文件
$INCLUDE (SJA_BCANCONF.ASM)

;//RAM 资源分配
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	04AH	;接收缓冲区
RCV_DATA_BUF2     DATA	04BH
RCV_DATA_BUF3     DATA	04CH
RCV_DATA_BUF4     DATA	04DH
RCV_DATA_BUF5     DATA	04EH
RCV_DATA_BUF6     DATA	04FH
RCV_DATA_BUF7     DATA	050H
RCV_DATA_BUF8     DATA	051H
RCV_DATA_BUF9     DATA	052H
RCV_DATA_BUF10    DATA	053H

ERROR_STATUS      DATA  030H     ;错误状态表示
TEST_DATA         DATA	031H     ;测试发送数据

SAVE_INT_INFO     DATA	032H	 ;保存SJA1000中断寄存器的内容
ERRORCOUNT        DATA  033H         ;错误计数

;//SJA1000中断位标志定义
EI_FLAG           BIT   00H      ;错误中断
DOI_FLAG          BIT   01H      ;数据溢出中断
TI_FLAG           BIT   02H      ;发送中断
RI_FLAG           BIT   03H      ;接收中断



;***************************************************************************
;//中断服务程序地址定义
       ORG	    0000H
       JMP              MAIN

       ORG      0003H                           ;外部中断0
       ;JMP              INT_RECEIVE

;***************************************************************************

;//主程序开始
       ORG      0035H
MAIN:
       NOP
       NOP
       NOP
       MOV              R7,#00H
       DJNZ             R7,$                    ;延时

       ;内部RAM清零
       MOV              R0,#07fH
       CLR              A
       MOV              @R0,A
       DJNZ	            R0,$-1
       MOV              @R0,A

       CLR              EA
       MOV              IE,#00H
       MOV              IP,#00H
       MOV              SP , #60H
       MOV              P0,#0FFH
       MOV              P1,#0FFH
       MOV              P2,#0FFH
       MOV              P3,#0FFH
       CALL             INIT_AT89S52        ;单片机初始化

       ;MOV              P2,#00H             ;调试用
       
       MOV              TEST_DATA,#55H      ;要发送的实验数据  
          
       CALL             HARD_RESET_SJA1000  ;硬件复位SJA1000

       CLR              SJA1000_CS          ;选通SJA1000
       CALL             INIT_SJA1000        ;初始化SJA1000
       
       JNB              F0,INIT_SJA1000_INT ;初始化成功则跳
       CLR              P1.1                ;调试用 初始化失败

       ;;设置SJA1000中断使能
INIT_SJA1000_INT:

       MOV	            R0,#REG_CONTROL
       MOVX             A,@R0	            ;只允许发送中断
       ANL              A,#01H
       ORL              A,#04H

       MOVX	            @R0,A

       ;SETB             SJA1000_CS
       
       MOV              R4,#0FFH
       CALL             DELAYNMS
       MOV              R4,#0FFH
       CALL             DELAYNMS                ;等待0.5秒再发送,以使上位机准备好接收
       
SENDDATA_PRG:
    MOV           R0,#SEND_DATA_BUF1 
    MOV           @R0,#0AAH
    INC           R0
    MOV	      A,TEST_DATA
    MOV           R7,#08
    MOV           A,#08
    MOV           @R0,A                        ;数据帧 8个数据
RB_DATA: 
    MOV           A,TEST_DATA
    INC           R0
    MOV           @R0,A
    DJNZ          R7,RB_DATA                    ;将特定格式的帧存入发送缓冲区

    MOV           R0,#SEND_DATA_BUF1
    LCALL         BCAN_DATA_WRITE               ;将要发送的数据送入发送缓冲区
   
    MOV           R7,#01                        ;发送请求
    LCALL         BCAN_CMD_PRG

;//进入主循环
MAIN_LOOP:
       SETB             SJA1000_INT             ;置一以便输入

       JB               SJA1000_INT,MAIN_LOOP   ;为1则继续检测

       ;发送完数据
       CLR              SJA1000_CS
       MOV              R0,#REG_INTERRUPT
       MOVX             A,@R0
       JNB              ACC.1,MAIN_LOOP

       CLR              P1.0                    ;发送完数据 拉低 调试用
       JMP              $

       JMP	            MAIN_LOOP


;**************************************************************
;*子程序定义                                                  *
;*                                                            *
;*                                                            *
;*                                                            *
;**************************************************************

;$INCLUDE (SJA_BCANCONF.ASM)
;************************************************************************
;*   广州周立功单片机发展有限公司    http://www.zlgmcu.com              *
;************************************************************************
;************************************************************************
;*                                                                      *
;*  CAN 控制器SJA1000基本CAN汇编子程序说明(BasicCAN 工作方式)          *
;*                                                                      *
;************************************************************************
;************************************************************************
;*                                                                      *
;*  目的:       用户在应用SJA1000组成CAN网络中通过简单的参数设置和调用  *
;*              本文件提供函数便能使自己的CAN系统进行基本的调试和运行   *
;*                                                                      *
;*  文件名:     SJA_BCANFUNC.ASM                                        *
;*                                                                      *
;*  模块名:     --                                                      *
;*                                                                      *
;*  目标系统:   任何基于任何兼容8051指令的微处理器同SJA1000组成的CAN    *
;*              系统                                                    *
;*                                                                      *
;*  应用语言:   Keil ASM-51 or Intel ASM-51                             *
;*                                                                      *
;************************************************************************
;*  版本 :V1.0                                                          *
;*                                                                      *
;************************************************************************
;*  广州周立功单片机发展有限公司 保留所有的版权                         *
;************************************************************************

;//以下为函数定义
;************************************************************************
;*函数:      BCAN_CREATE_COMMUNATION                                    *
;*应用资源:  R0,ACC,F0                                                *
;*参数说明:  无                                                         *
;*返回值:    F0,存放返回值                                              *
;*           0 ; 表示SJA1000接口正常                                    *
;*           1 ; 表示SJA1000与处理器接口不正常                          *
;*                                                                      *
;*说明:该函数用于检测CAN控制器的接口是否正常                            *
;************************************************************************
;*子程序调用示例:                                                       *
;* USER_CODE:                          ;;用户代码                       *
;*    -----   -----                                                     *
;*    LCALL   BCAN_CREATE_COMMUNATION  ;;调用子程序                     *
;*    JNB     F0,      USER_CODE1      ;;继续用户代码                   *
;*    LJMP    ERROR_PRG                ;;接口不正常跳到错误处理         *
;*                                                                      *
;* USER_CODE1:                                                          *
;*    -----   -----                    ;;用户代码                       *
;************************************************************************

BCAN_CREATE_COMMUNATION:
      MOV            R0,#REG_TEST                           ;对测试寄存器进行读写测试
      MOVX           A,@R0
      MOV            A,#0AAH                                ;写入值0AAH
      MOVX           @R0,A
      SETB           F0

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -