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

📄 seg7.asm

📁 DSP的汇编程序
💻 ASM
字号:
		.include  "F2407REGS.H"		;引用头部文件
		.def      _c_int0
		
		.sect     ".reset"
		
		B		  _c_int0			
		
 
        .data
        
RSV:	    .word 0	
VALUE_REG:	.word 0		
INDEX_REG:	.word 0

TABLE:		.word 00c0h, 00f9h, 00a4h, 00b0h, 0099h, 0092h, 0082h, 00f8h
			.word 0080h, 0090h, 0088h, 0083h, 00c6h, 00a1h, 0086h, 008eh  
			
SEG_ON:		.word 0000h			
SEG_OFF:	.word 0001h
			
TEMP:		.word 0		

COUNT:		.word 100	

       
		.text                                      
		
SEG7_DATA .set  8001h

SEG0_EN	.set	8002h
SEG1_EN	.set	8003h
SEG2_EN	.set	8004h
SEG3_EN	.set	8005h
SEG4_EN	.set	8006h
SEG5_EN	.set	8007h
SEGS_CNT .set   6h    

LOOP_CNT .set   50

_c_int0    							;相当于主程序的入口
		CALL	SYSINIT 			;调系统初始化程序  
		LDP     #DP_B01            
		SPLK    #0, VALUE_REG     	;置初始值
		SPLK    #0, INDEX_REG     	;置初始值 
		SPLK    #LOOP_CNT, COUNT
		
		OUT	    SEG_OFF, SEG0_EN
		OUT	    SEG_OFF, SEG1_EN
		OUT	    SEG_OFF, SEG2_EN
		OUT	    SEG_OFF, SEG3_EN
		OUT	    SEG_OFF, SEG4_EN
		OUT	    SEG_OFF, SEG5_EN 
		
NEXT_CYCLE:		      

		CALL    DELAY    
		
		; 显示数据 
		LDP     #DP_B01 
		LACL    INDEX_REG 
		ADD     #SEG0_EN             ;当前使能的数码管端口  
		SACL    TEMP
		               
		LACC    #SEG_ENABLE
		ADD     #5    
		TBLW 	TEMP    			;修改指令
		
		LACL    INDEX_REG                                  
		BCND    LAST_SEGMENT, NEQ	;!=0转 
		LACC    #SEGS_CNT      
LAST_SEGMENT:
		ADD     #SEG0_EN
		SUB     #1
		SACL    TEMP                ;上次使能的数码管端口 
		
		LACC    #SEG_ENABLE
		ADD     #1    
		TBLW 	TEMP                ;修改指令

		LACL    VALUE_REG  
		ADD     INDEX_REG
		SUB     #10
		BCND    SHOW, GEQ   
		
		LACL    VALUE_REG  
		ADD     INDEX_REG   
SHOW:          
		ADD		#TABLE   
		SACL    TEMP
                               
        MAR     *, AR4
		LAR		AR4, #TEMP  
		LAR     AR4, *                 
		
SEG_ENABLE:		
		OUT	    SEG_OFF, SEG5_EN 		;关闭上一个数码管的显示
		OUT	    *, SEG7_DATA 			;显示
		OUT	    SEG_ON, SEG0_EN 		;使能当前数码管的显示

		; 修改数据    
		LDP     #DP_B01
		LACL    INDEX_REG     
		ADD     #1
		SACL    INDEX_REG            
		
		SUB     #SEGS_CNT
		BCND    NEXT_CYCLE, NC
		SPLK    #0, INDEX_REG  
		
		LACL    COUNT
		SUB     #1   
		SACL    COUNT
		BCND    NEXT_CYCLE, NEQ   

		SPLK    #LOOP_CNT, COUNT

		LACL    VALUE_REG     
		ADD     #1
		SACL    VALUE_REG
		SUB     #10
		BCND    NEXT_CYCLE, NC
		SPLK    #0, VALUE_REG    
		B       NEXT_CYCLE

LOOP:
		CALL    DELAY    
		
		OUT		VALUE_REG,SEG7_DATA ;显示
		
		LACC    VALUE_REG, 1
		SACL    VALUE_REG                 
		
		BIT     VALUE_REG, 8
		BCND    NEXT_CYCLE, TC
		
		B		LOOP

*系统初始化程序*

SYSINIT:
		SETC 	INTM
		CLRC 	SXM
		CLRC 	OVM
		CLRC 	CNF					;B0 被配置为数据存储空间
		LDP 	#0E0H
		SPLK 	#81FEH, SCSR1  		;CLKIN=10 M, CLKOUT=40 M 
		SPLK	#0E8H, WDCR			;不使能WDT
		LDP		#0
		SPLK	#0000H, IMR			;不使能
		SPLK	#0FFFFH, IFR		;清全部中断标志
		RET
		
*软件延时程序*

DELAY:
		MAR 	*,   AR4
		LAR		AR4, #0800H
		LAR		AR0, #00H
		
DELAY1: SBRK	#1
		NOP
		CMPR	00
		BCND	DELAY1, NTC  
		  
		RET                   
		
		END

⌨️ 快捷键说明

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