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

📄 main.asm

📁 2407的一些源代码
💻 ASM
字号:

;============================================================================*
        
        .include "F2407.h" 		        ;头文件
        .bss    GPR0,1
		.bss    TEMP,1
		.bss    TEMP1,1
		.bss    TEMP2,1
		.bss    TEMP3,1
		.bss    TEMP4,1
		.bss    COUNT,1
		.def    _c_int0

;======================================================
KICK_DOG 	.macro 				        ;看门狗宏指令
		LDP 	#00E0h 			        ;指针指向7000h~707Fh单元
		SPLK 	#05555h, WDKEY          ;看门狗密钥
		SPLK	#0AAAAh, WDKEY
		LDP 	#0h
		.endm      
;======================================================
;系统初始化
;使能EVA,EVB,A/D模块,其他的未使能(根据要求使能)。
;====================================================== 
        .text  
        .word   #0ffffh
        .word	#0ffffh
        .word	#0ffffh
        .word	#0ffffh
_c_int0:	
        LDP     #0H
        SETC    INTM                    ;屏蔽总中断程序
        CLRC    SXM                     ;符号位不作扩展
        LACC    IFR                     ;清标志
        SACL    IFR
        CLRC    CNF                     ;B0为数据存储区
        SETC    OVM
        LDP     #WDCR>>7
	    SPLK    #006Fh,	WDCR 	        ;看门狗不使能
	    KICK_DOG  
	    SPLK    #01FFh,	GPR0
		OUT     GPR0,	WSGR            ;设置整体延时
	    LDP     #SCSR1>>7
	    SPLK    #0000011010001100B,SCSR1;仅使能ADC EVA EVB时钟,节能      
	    LDP	    #IMR>>7
	    SPLK    #0001H,IMR              ;中端级1使能
	    LDP     #COUNT
	    SPLK    #0FFH,COUNT             ;赋COUNT初始值
	    
	    SPLK    #0FFH,TEMP4             ;初始状态送高电平,使所有的灯灭
	    OUT     TEMP4,2000H             ;地址2000H~3FFFH均有效
;======================================================
MAIN: 
;===============算术,逻辑指令=========================
	    NOP						        ;空操作指令
	    LDP     #06H			        ;指定存储器页地址为6H
	    LACC    #055AAH			        ;立即数55AAH存入ACC
        SACL    TEMP  			        ;ACC低16位存入TEMP
        ADD     #010H                   ;立即数010H加给ACC
        SUB     #0FFFFH                 ;ACC减去立即数0ffffH
        ABS                             ;ACC取绝对值
        AND     #00FF0H                 ;ACC与00ff0H相与
        OR      #0FF00H                 ;ACC与0ff00H相或
        SFL                             ;ACC值整体左移一位,相当于×2
        SFR                             ;ACC值整体右移一位,相当于/2
;===============辅助寄存器指令=========================     
        MAR     AR3                     ;修改当前AR为AR3
        LAR     AR3,#TEMP               ;间接装入TEMP的地址到AR3
        SACL	*+,AR3                  ;ACC存入AR3所指的地址空间
                                        ;且AR3=AR3+1
        LACC    *+,AR3                  ;从AR3所指的地址空间值装入ACC
                                        ;且AR3=AR3+1
;====================乘法指令==========================       
        LDP     #TEMP1                  ;页地址指向TEMP1所在页
        LT      TEMP1                   ;TEMP1装入TREG
        MPY     TEMP                    ;TREG乘TEMP
                                        ;乘积装入PREG寄存器
        SPM     0                       ;设置PREG装入ACC时位移量为0
        PAC                             ;PREG装入ACC
;===============I/O及存储器指令========================      
        LACC    #01H                    ;立即数01H装入ACC
        ADD     #TABLE                  ;TABLE加给ACC
        TBLR    TEMP2                   ;读取ACC所对应的地址区值
                                        ;并将该值存入TEMP2
        OUT     TEMP2,04000H            ;将TEMP2 
                                        ;输出值I/O地址为4000H的外设和外扩存储器中  
        IN      TEMP2,04001H            ;将I/O地址为4001H的外设和外扩存储器中的数据 
                                        ;存入TEMP2
        ADD     #1H                     ;立即数1加给ACC
        TBLR    TEMP2                   ;将TEMP2
                                        ;存入ACC所对应的地址区
;===============跳转及控制指令========================= 
        LDP      #COUNT                 ;选择页地址 
        LACC     TEMP3                  ;TEMP3装入ACC
        BCND     GT0,GT                 ;ACC大于0则跳至GT0
        LACC     COUNT                  ;将COUNT装入ACC
        SUB      #1                     ;COUNT减1  
        SACL     COUNT                  ;将ACC的值存入COUNT中  
        RPT      #0FFH                  ;延时
        NOP                             ;空指令
        BNZ      MAIN                   ;COUNT不等于0 跳至MAIN
        
        LDP      #TEMP4                 ;打开TEMP4所在的页
        RPT      #0FH                   ;延时
        NOP                             ;空指令
        SPLK     #0FFH,TEMP4            ;此两句赋值将TEMP4的值送给灯,灯灭
        OUT      TEMP4,2000H            ;地址2000H~3FFFH均有效

        SPLK	 #1,TEMP3               ;TEMP3置为1 
        SPLK     #03FFFH,COUNT          ;改变此处COUNT的值,调整灯灭的时间
        B        MAIN                   ;返回MAIN

GT0 
        LACC     COUNT                  ;将COUNT装入ACC
        SUB      #1                     ;COUNT减1 
        SACL     COUNT                  ;将ACC的值存入COUNT中
        RPT      #0FFH                  ;重复执行空指令以实现延时
        NOP                             ;  
        BNZ      MAIN                   ;COUNT不等于0 跳至MAIN
       
        LDP      #TEMP4                 ;打开TEMP4所在的页
        RPT      #0FH                   ;延时
        NOP                             ;空指令
        SPLK     #000H,TEMP4            ;此两句赋值将TEMP4的值送给灯,灯亮
        OUT      TEMP4,3FFFH            ;地址2000H~3FFFH均有效
  
        SPLK	 #0,TEMP3               ;TEMP3置为0
        SPLK     #03FFFH,COUNT          ;改变此处COUNT的值,调整灯亮的时间
        B        MAIN                   ;返回MAIN
          
;======================数据区==========================
       .data
TABLE
       .WORD    00000H
       .WORD    0000FH
       .WORD    000F0H
       .WORD    00F00H
       .WORD    0F000H
       .WORD    0FFFFH
       .END

⌨️ 快捷键说明

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