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

📄 sldiy16-08.asm

📁 AVR单片机应用开发指南及实例,包含许多实例,挺不错
💻 ASM
字号:
;********************************************
;SL-DIY-08-16   实验八
;I/O端口的进一步应用。
;请你设计SL-DIY08-16主板上4个I/O口
;32个LED灯的变化多样的广告灯程序。
;********************************************
;*ATmega16      8MHz     
;*双龙电子   www.sl.com.cn
;*	   teny	2005.11.12
;*********   teny@sl.com.cn   **************
;********************************************

.include "m16def.inc"
.def dt = r22
.org	$000
	rjmp	reset8

.org	$010
reset8:
	ldi r17,$04	;置栈指针,mega16的内建值为$045f
	ldi r16,$5f
	out sph,r17
	out spl,r16
	
	
shiyan8:
	ldi r16,$ff
	out ddra,r16	;pa0设置为输出
	out porta,r16
	out ddrb,r16	;pb0设置为输出
	out portb,r16
	out ddrc,r16	;pc0设置为输出
	out portc,r16
	out ddrd,r16	;pd0设置为输出
	out portd,r16

start8:
	ldi dt,114	;令dt=144,延时时间定为 200 ms
	out porta,r16
	out portb,r16
	out portc,r16
	out portd,r16
	ldi r17,$fe	;循环移位初值 (0b 1111 1110)
porta00:
	out porta,r17   ;点亮pa口的一盏led灯	
	rcall	delay	;调用延时程序
	sec		;置位进位位标志 C
	rol r17         ;左移 1 位
	cpi r17,$ff	;为 $ff,说明pa7的led已经点亮
	brne	porta00	;不等,从pa0到pa7依次点亮	
	ldi r17,$7f	;循环移位初值 (0b 0111 1111)
	out porta,r16
	out portb,r16
	out portc,r16
	out portd,r16
portc00:
	out portc,r17   ;点亮pc口的一盏led灯
	rcall	delay	;调用延时程序
	sec		;置位进位位标志 C
	ror r17         ;右移 1 位
	cpi r17,$ff	;为 $ff,说明pc0的led已经点亮
	brne	portc00	;不等,从pc7到pc0依次点亮
	ldi r17,$fe	;循环移位初值 (0b 1111 1110)
	out porta,r16
	out portb,r16
	out portc,r16
	out portd,r16	
portb00:
	out portb,r17   ;点亮pb口的一盏led灯
	rcall	delay	;调用延时程序
	sec		;置位进位位标志 C
	rol r17         ;左移 1 位
	cpi r17,$ff	;为 $ff,说明pb7的led已经点亮
	brne	portb00	;不等,从pb0到pb7依次点亮	
	ldi r17,$fe	;循环移位初值 (0b 1111 1110)
	out porta,r16
	out portb,r16
	out portc,r16
	out portd,r16	
portd00:
	out portd,r17   ;点亮pd口的一盏led灯
	rcall	delay	;调用延时程序
	sec		;置位进位位标志 C
	rol r17         ;左移 1 位
	cpi r17,$ff	;为 $ff,说明pd7的led已经点亮
	brne	portd00	;不等,从pd0到pd7依次点亮
	out portd,r16

	ldi r18,$04	;交替闪烁次数
port400:
	ldi dt,197	;令dt=197,延时时间定为 500 ms
	clr r17
	out porta,r17	;点亮 pa pd口的led灯
	out portb,r16	;熄灭 pb pc口的led灯
	out portc,r16
	out portd,r17
	rcall	delay	;调用延时程序
	out porta,r16	;熄灭 pa pd口的led灯
	out portb,r17	;点亮 pb pc口的led灯
	out portc,r17
	out portd,r16
	rcall	delay	;调用延时程序
	dec r18		;闪烁次数减 1
	brne	port400 ;不为 0 ,继续闪烁
	
	rjmp	start8	;循环	
		
;**********************************
;fos=8MHz
;dt   time    dt  time   dt   time
;22    1ms    29   2ms   40    5ms
;51   10ms    65  20ms   90   50ms
;114 100ms   144 200ms  197  500ms
;249    1s
;**********************************
delay:
	push dt
del1:	push dt
del2:	push dt
del3:	dec dt
	brne	del3
	pop dt
	dec dt
	brne	del2
	pop dt
	dec dt
	brne	del1
	pop dt
	ret
	


⌨️ 快捷键说明

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