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

📄 main.asm

📁 2407的一些源代码
💻 ASM
字号:
;======================================================
        
            .include "F2407.h" 	           ;头文件  
            .def   _c_int0
            .bss   GPR0,1
		    .bss   TEMP1,1                 ;由car.cmd文件分配的空间可知
		    .bss   TEMP2,1                 ;TEMP1,TEMP2,TEMP3,TEMP4对应的
		    .bss   TEMP3,1                 ;地址分别为:200h,201h,202h,203h
		    .bss   TEMP4,1                 ;204h
		    .bss   TEMP5,1

DATA1    	.usect ".blk0",1               ;由car.cmd文件分配的空间可知
DATA2    	.usect ".blk0",1               ;DATA1,DATA2,DATA3,DATA4对应的
DATA3    	.usect ".blk0",1               ;地址分别为:300h,301h,302h
DATA4    	.usect ".blk0",1               ;303h

T1    	    .usect ".blk3",1               ;由car.cmd文件分配的空间可知
T2    	    .usect ".blk3",1               ;T1,T2,T3,T4对应地址为:
T3    	    .usect ".blk3",1               ;800h,801h,802h,803h
T4    	    .usect ".blk3",1

;======================================================
KICK_DOG    .macro 				           ;看门狗宏指令
		LDP 	#00E0h 			           ;指针指向7000h-707Fh
		SPLK 	#05555h, WDKEY             ;看门狗密钥
		SPLK	#0AAAAh, WDKEY
		LDP 	#0h 			           ;指针指向0000h-007Fh
		    .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    #0H,IMR                    ;所有中断均不使能
;=========================中断初始化============================
	    LDP     #IFR>>7
	    SPLK	#0FFH,IFR                  ;写1清除中断标志位
	    SPLK	#012H,IMR                  ;写1使能中断2和中断5
	    LDP		#EVAIFRA>>7
	    SPLK	#0FFFH,EVAIFRA             ;设置EVA的中断标志寄存器A
	    SPLK	#0FH,EVAIFRB               ;设置EVA的中断标志寄存器B
	    SPLK	#0FH,EVAIFRC               ;设置EVA的中断标志寄存器C
	    SPLK	#0200H,EVAIMRA             ;设置EVA的中断屏蔽寄存器A
	    SPLK	#0,EVAIMRB         
	    SPLK	#0,EVAIMRC  
;=========================SCI初始化============================
	    LDP     #SCICCR>>7
	    SPLK    #027H,SCICCR               ;设置串行通信接口通信控制寄存器
	    SPLK    #003H,SCICTL1              ;设置串行通信接口控制寄存器1
	    SPLK    #02H,SCICTL2               ;设置串行通信接口控制寄存器2
	    SPLK    #0H,SCIHBAUD               ;波特率选择,波特率为115200 
	    SPLK    #02AH,SCILBAUD
	    SPLK    #20H,SCIPRI                ;设置串行通信接口优先级控制寄存器
	    SPLK    #23H,SCICTL1       
;=========================AD初始化=============================
	    LDP	  	#0E1H
        SPLK  	#0100000000000011b,ADCTRL1 ;复位ADC模块
	    NOP
	    SPLK  	#0011000000000011b,ADCTRL1 ;设置AD模块,不受仿真悬挂影响
	    SPLK  	#4000H,ADCTRL2
	    SPLK  	#07h, MAXCONV              ;选择8个通道
	    SPLK  	#3333h, CHSELSEQ1 	       ;将转换通道全部选择通道3
	    SPLK    #3333h, CHSELSEQ2 	       
;====================初始化事件管理器=========================
        LDP		#T1PR>>7
        SPLK	#1000,T1PR                 ;设置通用定时器的周期寄存器1
        SPLK	#1000,CMPR1                ;设置通用定时器的比较寄存器1
        SPLK	#1000,CMPR2
        SPLK	#1000,CMPR3
        SPLK    #006H,ACTRA                ;设置比较方式控制寄存器
        SPLK    #01F4H,DBTCONA             ;设置死区时间控制器寄存器
        SPLK	#8200H,COMCONA             ;设置比较控制寄存器
        SPLK    #0842H,T1CON               ;设置定时器1的控制寄存器
;============================================================
LOOP
       NOP
       LDP		#TEMP1                     ;打开TEMP1对应的页
       SACL     TEMP1                      ;将TEMP1加载到累加器(ACC)中
       ADD      #1                         ;ACC加1
       SACL     TEMP2                      ;将所得结果保存到TEMP2中
       ADD      #1                         ;ACC加1
       SACL     TEMP3                      ;将所得结果保存到TEMP3中
       ADD      #1                         ;ACC加1
       SACL     TEMP4                      ;将所得结果保存到TEMP4中
       
       LDP      #DATA1                     ;打开DATA1对应的页
       ADD      #1                         ;ACC加1
       SACL     DATA1                      ;将所得结果保存到DATA1中
       ADD      #1                         ;ACC加1
       SACL     DATA2                      ;将所得结果保存到DATA2中
       ADD      #1                         ;ACC加1
       SACL     DATA3                      ;将所得结果保存到DATA3中
       ADD      #1                         ;ACC加1
       SACL     DATA4                      ;将所得结果保存到DATA4中
       
       LDP      #T1                        ;打开T1对应的页
       ADD      #1                         ;ACC加1
       SACL     T1                         ;将所得结果保存到T1中
       ADD      #1                         ;ACC加1
       SACL     T2                         ;将所得结果保存到T2中
       ADD      #1                         ;ACC加1
       SACL     T3                         ;将所得结果保存到T3中
       ADD      #1                         ;ACC加1
       SACL     T4                         ;将所得结果保存到T4中
       
       SPLK     #0H,T4                     ;将0赋给T4
       OUT      T4,0A000H                  ;将T4=0送给0A000所对应的地址空间
       IN       TEMP1,0A001H               ;将0A001地址空间中的值送到TEMP1中
       SPLK     #0FFH,TEMP1                ;此条语句没将0FF赋给TEMP1
       OUT      TEMP1,02000H               ;但已经将TEMP1=0FFH送给I/O
       RPT      #0FFH
       NOP                                 ;空指令
       SPLK     #0H,TEMP1    
       OUT      TEMP1,02000H
       B        LOOP                       ;无条件跳转到LOOP 
      .END

⌨️ 快捷键说明

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