📄 basicmainl.asm
字号:
;于士友 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 + -