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

📄 basicmainh.asm

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

;串口调通 2007.1.26

;下位机发送一帧数据 0AAH 08H 55H 55H 55H 55H 55H 55H 55H 55H
;加上ID等共10个字节(不连CRC)。上位机接收,并根据出错状态等改变相应
;的端口的状态。并把接收到的10个子节发送到串口,最后死循环。
;**************************************************************
;*************** 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        ;单片机初始化

       SETB             TR1                     ;启动定时器1 产生波特率
       
       ;MOV              P2,#00H             ;调试用
            
       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,#02H

       MOVX	            @R0,A

       ;SETB             SJA1000_CS

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

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

       ;接收到数据
       CLR              SJA1000_CS
       MOV              R0,#REG_INTERRUPT
       MOVX             A,@R0
       JNB              ACC.0,MAIN_LOOP

       CLR              P1.0                                ;如果接收到数据 则拉低 ;调试用
       
       MOV              R4,#200
       CALL             DELAYNMS                            ;延时以等待数据接收完
       
;***************************************************************************
;调试处理部分
            MOV         R0,#REG_RxBuffer1                   ;接收缓冲区的首地址     
            MOVX        A,@R0
            XRL         A,#0AAH
            JNZ         RCVDATA_PRG                         ;ID不为0AAH则跳
            
            INC         R0
            MOVX        A,@R0
            XRL         A,#08H
            JNZ         RCVDATA_PRG
            
            INC         R0
            MOV         R7,#08
DEBUG_LOOP:
            MOVX        A,@R0
            XRL         A,#055H
            JNZ         RCVDATA_PRG
            INC         R0
            DJNZ        R7,DEBUG_LOOP
            
            CLR         P1.2                                ;如果接收到的与设定发送的不相符则拉低 ;调试用
            
;***************************************************************************
;接收数据处理部分
RCVDATA_PRG:		
	MOV	R0,# RCV_DATA_BUF1 	            ;微处理器接收首地址
	LCALL	BCAN_DATA_RECEIVE          	;调用接收数据子程序
	MOV	R7,#04H          		;释放接收缓冲区 
	LCALL	BCAN_CMD_PRG		;
;将接收的数据发送至串口
	MOV	R0,# RCV_DATA_BUF2              	;计算接收数据长度判断远程帧、数据帧
	MOV         A,@R0
	JB         	ACC.4,RD_PRG1		;远程帧
;数据帧
	ANL	A,#0FH		            ;计算数据数目
	ADD	A,#02H                  	;计算帧的数据长度
	MOV 	R7, A
	AJMP        RD_UARTSD
RD_PRG1:
	MOV         R7,#02H
RD_UARTSD: 		
	MOV         R0,#RCV_DATA_BUF1 	            ;微处理器接收首地址
	CALL	UART_SEND              	            ;调用串口发送程序

;***************************************************************************
       
       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与处理器接口不正常                          *

⌨️ 快捷键说明

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