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

📄 3428.asm

📁 Led控制,这是一个不错的东东,希望对这方面的朋友有帮助
💻 ASM
字号:
;/* local global variables in this module.prefer less variables. */
inc_flag	equ	0xc0

digital_num     equ     0xc1    ;/*set digital number,bit 7 is number 10 seg, bit 6-0 is number 0-9 seg*/
port_number	equ	0xc2	;/*light port number*/
start_port	equ	0xc3	;/*start test port number,27 for 3400-28,1 for 3400-52 */
end_fe_number	equ	0xc4	;/*end fe phy port,29 for 3400-28,53 for 3400-52*/
port_type	equ 	0xc5	;/*GE/FE flag*/
ge_comba_flag	equ	0xc6	;/*bit 0 for first port ,1-show status,0-off this port led*/
ge_port_count	equ	0xc7	;/*3400-28 have 4 ge port led, 3400-52 have 6 ge port led and 2 padding port*/
ge_port_map	equ	0xc8	;/*8 bytes array,3400-28 is {1,2,4,5}, 3400-52 is {4,5,4,5,1,2,1,2}*/
digital_data	equ	0xd0	;/*0-0xd0,1-0xd1,...*/
;/* const variables*/
RX              equ     0x0     ; received packet
TX              equ     0x1     ; transmitted packet
COLL            equ     0x2     ; collision indicator
SPEED_L         equ     0x3     ; 100 Mbps
SPEED_H         equ     0x4     ; 1000 Mbps
DUPLEX          equ     0x5     ; half/full duplex
FLOW            equ     0x6     ; flow control capable
LINKUP          equ     0x7     ; link down/up status
LINKEN          equ     0x8     ; link disabled/enabled status
ZERO            equ     0xE     ; always 0
ONE             equ     0xF     ; always 1

increase_flag_couter:	
	inc	(inc_flag)
	ld	a,(inc_flag)
 	cmp	a,8
	jnz	start_function
	ld	a,0
	ld	(inc_flag),a	;clear counter
increase_port_number:	
	inc 	(port_number)
	ld	a,(port_number)
 	cmp	a,61
	jnz	increase_stack_number
	ld	a,(start_port)
	ld	(port_number),a
increase_stack_number:	
	inc 	(digital_num)
	ld	a,(digital_num)
 	cmp	a,21
	jnz	start_function
	ld	a,0
	ld	(digital_num),a
start_function:
;first padding non-used bit for 3400-28
 	ld	b,0
Padding_loop:
 	inc	b
 	cmp	b,(start_port)
 	jz	next_step
	call 	set_led_off
 	jmp	Padding_loop
next_step:
;second set fe port status
set_fe_port:
	ld 	b,5
	ld	a,0
	ld	(port_type),a ;set FE port status
fe_loop:
	inc 	b
	port	b
	call	set_port_status	
 	cmp	b,(end_fe_number)
 	jnz	fe_loop	
 	
set_ge_port: 
	ld	b,0
	ld	a,1
	ld	(port_type),a ;set FE port status
ge_loop:
	ld	a,ge_port_map
	add 	a,b
	ld	a,(a)
	port	a
	ld 	a,(ge_comba_flag)
	tst	a,b
	jnc	comba_off_port
	call 	set_port_status
ge_loop_tmp:
	inc	b	
 	cmp	b,(ge_port_count)
	jnz	ge_loop
	jmp	digital_led
comba_off_port:
	call 	set_led_off
	jmp	ge_loop_tmp
	
digital_led:	
	;set digital number
	call	set_digital
 	
 	send	120
;{sub routine for digital number set
set_digital:
	ld	a,(digital_num)
	add 	a,digital_data
	ld	b,(a)
 	ld	a,0

number_loop:
	tst     b,a
	push	CY
	pack
 	inc	a
 	cmp	a,8
 	jnz	number_loop
	ret
;}end sub routine for digital number set
;{sub routine for port status set
set_port_status:
	pushst	LINKUP
	jc	set_link_up
	jmp	set_led_off;link down
set_link_up:
    	pushst	RX
    	pushst	TX
    	tor
    	pop
    	jnc	set_led_on
    	;blink
 	ld	a,(inc_flag)
	tst 	a,2
    	jnc	set_led_on
	jmp	set_led_off

set_led_on:	
 	ld	a,(port_type)
 	cmp	a,1
 	jnz	set_fe_speed
	jmp	set_ge_speed
set_ge_speed:
    	pushst 	SPEED_H	; 1000 Mbps
	jc	set_led_green
	jmp	set_led_yellow
set_fe_speed:
    	pushst 	SPEED_L	; 100 Mbps
	jc	set_led_green
	jmp	set_led_yellow
set_led_off:
	ld	a,(port_number)
 	cmp	a,58
 	jz	set_led_green
 	cmp	a,60
 	jz	set_led_yellow
	ld	a,0xff
	jmp	set_led_bit_from_ra

set_led_green:
	ld	a,0x55
	jmp	set_led_bit_from_ra

set_led_yellow:
	ld	a,0xaa
	jmp	set_led_bit_from_ra

set_led_bit_from_ra:
	tst	a,0
    	push	CY
    	pack
	tst	a,1
    	push	CY
    	pack
	ret
	

⌨️ 快捷键说明

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