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

📄 can.asm

📁 2407asm文件夹包括第8~13章的汇编语言代码及使用说明。有如下子文件夹: &#61548 第8章数字输入输出模块(led); &#61548 第8章数字输入输出模块(LED+KEY);
💻 ASM
字号:
st0_temp	.usect		".b20",1			;
st1_temp	.usect		".b20",1			;
context	 	.usect		".b20",7			;62-68 

CAN_FLAG	.usect		".data0",1			;CAN 标志寄存器
DP_USER		.set 		5				    ;DP指向280H-300H单元
			.include  	"F2407REGS.H" 		;引用头部文件
            .def      	_c_int0
;(1)建立中断向量表
			.sect	    ".vectors"			;定义主向量段
RSVECT		B    _c_int0		;PM 0	    复位向量			1
INT1	  	B    PHANTOM		;PM 2	    中断优先级 1		4
INT2	  	B    PHANTOM		;PM 4	    中断优先级 2		5
INT3	  	B    PHANTOM		;PM 6	    中断优先级 3		6
INT4	  	B    PHANTOM		;PM 8	    中断优先级 4		7
INT5	  	B    GISR5			;PM A	    中断优先级 5		8
INT6	  	B    PHANTOM		;PM C	    中断优先级 6		9
RESERVED  	B    PHANTOM		;PM E	    (保留位)			10
SW_INT8   	B    PHANTOM		;PM 10  	 用户定义软件中断	 -
SW_INT9   	B    PHANTOM		;PM 12  	User S/W int	-
SW_INT10   	B    PHANTOM		;PM 14  	User S/W int	-
SW_INT11   	B    PHANTOM		;PM 16  	User S/W int    -
SW_INT12   	B    PHANTOM		;PM 18  	User S/W int	-
SW_INT13   	B    PHANTOM		;PM 1A  	User S/W int	-
SW_INT14   	B    PHANTOM		;PM 1C  	User S/W int	-
SW_INT15   	B    PHANTOM		;PM 1E  	User S/W int	-
SW_INT16   	B    PHANTOM		;PM 20  	User S/W int	-
TRAP    	B    PHANTOM		;PM 22  	Trap vector	    -
NMI      	B    PHANTOM		;PM 24  	Non maskable Int3
EMU_TRAP   	B    PHANTOM		;PM 26  	Emulator Trap2	-
SW_INT20   	B    PHANTOM		;PM 28  	User S/W int	-
SW_INT21   	B    PHANTOM		;PM 2A  	User S/W int	-
SW_INT22   	B    PHANTOM		;PM 2C  	User S/W int	-
SW_INT23   	B    PHANTOM		;PM 2E  	User S/W int	-
SW_INT24   	B    PHANTOM		;PM 30  	User S/W int	-
SW_INT25   	B    PHANTOM		;PM 32  	User S/W int	-
SW_INT26   	B    PHANTOM		;PM 34  	User S/W int	-
SW_INT27   	B    PHANTOM		;PM 36  	User S/W int	-
SW_INT28   	B    PHANTOM		;PM 38  	User S/W int	-
SW_INT29   	B    PHANTOM		;PM 3A  	User S/W int	-
SW_INT30   	B    PHANTOM		;PM 3C  	User S/W int	-  					·
SW_INT31  	B    PHANTOM		;PM 3E  	用户定义软件中断	 -
;中断子向量入口定义pvecs
			.sect	".pvecs"			    ;定义子向量段
PVECTORS	B	PHANTOM		;保留向量地址偏移量-00H 
			B	PHANTOM		;保留向量地址偏移量-01H
  			B	PHANTOM		;保留向量地址偏移量-02H
  			B	PHANTOM		;保留向量地址偏移量-03H
  			B	PHANTOM		;保留向量地址偏移量-04H
  			B	PHANTOM		;保留向量地址偏移量-05H
			B	PHANTOM 	;保留向量地址偏移量-06H 
		    B	PHANTOM		;保留向量地址偏移量-07H
  			B	PHANTOM		;Reserved pvector addr offset-08H
  			B	PHANTOM		;Reserved pvector addr offset-09H
  			B	PHANTOM		;Reserved pvector addr offset-0AH
  			B	PHANTOM		;Reserved pvector addr offset-0BH
  			B	PHANTOM		;Reserved pvector addr offset-0CH
  			B	PHANTOM		;Reserved pvector addr offset-0DH
  			B	PHANTOM		;Reserved pvector addr offset-0EH
  			B	PHANTOM		;Reserved pvector addr offset-0FH
  			B	PHANTOM		;Reserved pvector addr offset-10H
  			B	PHANTOM		;Reserved pvector addr offset-11H
  			B	PHANTOM		;Reserved pvector addr offset-12H
  			B	PHANTOM		;Reserved pvector addr offset-13H
  			B	PHANTOM		;Reserved pvector addr offset-14H
  			B	PHANTOM		;Reserved pvector addr offset-15H
  			B	PHANTOM		;Reserved pvector addr offset-16H		
			B	PHANTOM		;Reserved pvector addr offset-17H
			B	PHANTOM		;Reserved pvector addr offset-18H
  			B	PHANTOM		;Reserved pvector addr offset-19H
  			B	PHANTOM		;Reserved pvector addr offset-1AH
  			B	PHANTOM		;Reserved pvector addr offset-1BH
  			B	PHANTOM		;Reserved pvector addr offset-1CH
  			B	PHANTOM		;Reserved pvector addr offset-1DH
  			B	PHANTOM		;Reserved pvector addr offset-1EH
  			B	PHANTOM		;Reserved pvector addr offset-1FH
  			B	PHANTOM		;Reserved pvector addr offset-20H
  			B	PHANTOM		;Reserved pvector addr offset-21H
  			B	PHANTOM		;Reserved pvector addr offset-22H
  			B	PHANTOM		;Reserved pvector addr offset-23H
  			B	PHANTOM		;Reserved pvector addr offset-24H
  			B	PHANTOM		;Reserved pvector addr offset-25H
  			B	PHANTOM		;Reserved pvector addr offset-26H
  			B	PHANTOM 	;Reserved pvector addr offset-27H 
			B	PHANTOM		;Reserved pvector addr offset-28H
  			B	PHANTOM		;Reserved pvector addr offset-29H
  			B	PHANTOM		;Reserved pvector addr offset-2AH
  			B	PHANTOM		;Reserved pvector addr offset-2BH
  			B	PHANTOM		;Reserved pvector addr offset-2CH
  			B	PHANTOM		;Reserved pvector addr offset-2DH
  			B	PHANTOM		;Reserved pvector addr offset-2EH
  			B	PHANTOM		;Reserved pvector addr offset-2FH
  			B	PHANTOM		;Reserved pvector addr offset-30H
  			B	PHANTOM		;Reserved pvector addr offset-31H
  			B	PHANTOM		;Reserved pvector addr offset-32H
  			B	PHANTOM		;Reserved pvector addr offset-33H
  			B	PHANTOM		;Reserved pvector addr offset-34H
  			B	PHANTOM		;Reserved pvector addr offset-35H
  			B	PHANTOM		;Reserved pvector addr offset-36H
  			B	PHANTOM		;Reserved pvector addr offset-37H
  			B	PHANTOM		;Reserved pvector addr offset-38H
  			B	PHANTOM		;Reserved pvector addr offset-39H
  			B	PHANTOM		;Reserved pvector addr offset-3AH
  			B	PHANTOM		;Reserved pvector addr offset-3BH
  			B	PHANTOM		;Reserved pvector addr offset-3CH
  			B	PHANTOM		;Reserved pvector addr offset-3DH
  			B	PHANTOM		;Reserved pvector addr offset-3EH		·
  			B	PHANTOM		;保留向量地址偏移量-3FH
			B	CANMBX_ISR	;保留向量地址偏移量-40H  CAN接收中断
			B	PHANTOM		;保留向量地址偏移量-41H
;(2)主程序
	        .text
_c_int0    
		CALL	SYSINIT 		;系统初始化程序
		LDP		#DP_USER
		SPLK	#00H,CAN_FLAG	;清CAN用户标志,CAN_FLAG=01表示接收到数据
		CALL	CAN_INIT		;CAN初始化程序
		CLRC	INTM			;开总中断
LOOP:	LDP		#DP_CAN
		SPLK 	#20h,	TCR 	;邮箱3发送请求
W_TA3:	LDP		#DP_USER
		BIT		CAN_FLAG,BIT0	;判是否接收到新数据
		BCND	LOOP2,TC
		LDP		#DP_CAN
		BIT		TCR,	2 
		BCND 	W_TA3,	NTC 	;等待发送应答
LOOP2:	LDP		#DP_CAN
		SPLK 	#2000h,	TCR		;清 TA3 和MIF3标志位
LOOP1:	LDP		#DP_USER
		BIT		CAN_FLAG,BIT0	;判是否接收到数据,如接收到则更新邮箱3
		BCND	LOOP1,NTC
		SPLK	#00H,CAN_FLAG	;清用户接收标志
		LDP		#DP_CAN
		SPLK	#0000H,MDER		;邮箱不使能
		SPLK	#0140H,MCR		;CDR=1,数据改变请求
		LDP 	#DP_CAN2 		;DP => 7200h
		LACL	MBX2A			;更新邮箱3
		SACL	MBX3A			;把邮箱2的数据移入到邮箱3
		LACL	MBX2B
		SACL	MBX3B
		LACL	MBX2C
		SACL	MBX3C
		LACL	MBX2D
		SACL	MBX3D
	
WAIT:	NOP
		B		LOOP
;(3)系统初始化程序
SYSINIT:
		SETC 	INTM
    	CLRC 	SXM
       	CLRC 	OVM
		CLRC 	CNF	
        LDP 	#0E0H
        SPLK 	#81FEH,SCSR1 
        SPLK	#0E8h,WDCR	
	    LDP		#0
		SPLK	#10h,IMR		;开中断优先级5
		SPLK	#0FFFFh,IFR		;清中断标志
        RET
;(4)CAN初始化程序
CAN_INIT:
		LDP 	#DP_PF2
		LACL	MCRB			;配置 CAN 引脚
		OR		#0C0H			;IOPC6,IOPC7 配置为特殊功能:CANRX,CANTX
		SACL	MCRB
;――――――――――――――― CAN 位定时器配置 ――――――――――――――――
		LDP		#DP_CAN
		;SPLK	#0040H,	MDER	;MD2=1 MBX2为发送方式
		SPLK 	#0FFFFH,CAN_IFR ;清全部CAN中断标志
		SPLK	#07FFFH,LAM1_H	;设置邮箱2、3的屏蔽ID寄存器
		SPLK	#0FFFFH,LAM1_L	;0则ID必须匹配
		SPLK	#1040H,	MCR		;CCR=1 改变配置请求
W_CCE	BIT 	GSR,#04h 		;等待改变配置使能
		BCND 	W_CCE,NTC		;当CCE=1 时即可配置 BCR2,BCR1 寄存器
		SPLK 	#01H,BCR2		;波特率预分频寄存器
		SPLK 	#0033H,BCR1		;波特率设置为1M
		LACL	MCR
		AND		#0EFFFH
		SACL	MCR				;CCR=0 改变配置结束请求				
W_NCCE 	BIT 	GSR,#04h 		;等待改变配置不使能
		BCND 	W_NCCE,TC		;只有当CEE=0时,BCR2,BCR1 寄存器配置成功
;―――――――――――――――写 CAN 邮箱内容前寄存器设置―――――――――――――――
		LDP		#DP_CAN
		SPLK	#0040H,MDER		;不使能邮箱,邮箱2设为接收方式
		SPLK	#0143H,MCR		;CDR=1,数据区改变请求
;―――――――――――――――写 CAN 邮箱内容―――――――――――――――
		LDP 	#DP_CAN2
		SPLK 	#2447H,MSGID2H 	;设置邮箱2的控制字及ID 
								;IDE=0, AME=0, AAM=0
								;标准方式为MSGID2H[12-2]
		SPLK 	#0FFFFH,MSGID2L
		SPLK 	#08H,MSGCTRL2 	;设置控制域
								;数据长度DCL = 8,RTR=0 数据帧
		SPLK 	#00000H,	MBX2A	;邮箱2信息初始化
		SPLK 	#00000H,	MBX2B
		SPLK 	#00000H,	MBX2C
		SPLK 	#00000H,	MBX2D
		SPLK 	#2447H,     MSGID3H 	;设置邮箱3的标识符
		SPLK 	#0FFFFH,    MSGID3L
		SPLK 	#08H,       MSGCTRL3	;RTR=0,DCL=8
		SPLK 	#02211h,	MBX3A	;邮箱3信息初始化
		SPLK 	#04433h,	MBX3B
		SPLK 	#06655h,	MBX3C
		SPLK 	#08877h,	MBX3D
;―――――――――――――――写 CAN 邮箱内容后寄存器设置―――――――――――――――
		LDP 	#DP_CAN
		SPLK 	#0F7FFH,CAN_IMR 	;中断MBX3 不使能 ,MBX2使能, 低中断优先级
		SPLK	#0FFFFH,CAN_IFR	;清全部中断标志
		SPLK 	#04c0H,MCR		;DBO=1,CDR=0,ABO=1,STM=0 
		SPLK 	#04CH,MDER		;ME2=ME3=1,MBX2接收, MBX3发送
		RET
;(5)中断程序
GISR5:							;优先级INT5中断人口
		;保护现场
		LDP     #0              ;保存机器上下文
		SST		#0,st0_temp	    ;使用自动寻址,DP-0 
		SST		#1,st1_temp	    ;保存状态寄存器到B2 DARAM.
		LDP		#0			  
        SACL	context			;保存ACC的低16位
		SACH	context+1		;保存ACC的高16位
		SAR		AR1,context+2
		SAR		AR2,context+3
		SAR		AR3,context+4
		SAR		AR4,context+5		
		SAR		AR5,context+6
		LDP		#0E0H
		LACC	PIVR,1			;读取外设中断向量寄存器(PIVR),并左移一位
		ADD		#PVECTORS		;加上外设中断人口地址
		BACC					;跳到相应的中断服务子程序
CANMBX_ISR:					;CAN接收中断程序
		LDP		#DP_CAN
		SPLK 	#0040h, RCR 		;复位 RMP2 和 MIF2
		LDP		#DP_USER
		SPLK	#01H,CAN_FLAG	;置用户接收标志
GISR5_RET:						;中断返回
		;恢复现场
		LDP		#DP_EVA
		SPLK	#0FFFFH,EVAIFRA
		LDP		#0
		LAR		AR5,context+6	
		LAR		AR4,context+5	
		LAR		AR3,context+4		
		LAR		AR2,context+3		
		LAR		AR1,context+2
		LACC	context+1,16
		ADDS	context
		LST		#1, st1_temp
		LST		#0, st0_temp
		CLRC	INTM			;开总中断,因为一进中断就自动关闭总中断
		RET
;(6)假中断程序
PHANTOM 	
		KICK_DOG				;复位看门狗
		RET
		END

⌨️ 快捷键说明

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