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

📄 sldiy16-07.asm

📁 AVR单片机应用开发指南及实例,包含许多实例,挺不错
💻 ASM
字号:
;********************************************
;SL-DIY-08-16   实验七
;I/O端口进一步应用。
;用图6的ATmega16的PB.0端口开关(可用接插线接VCC或GND代替)
;控制PA口8个LED灯作跑马灯控制;可作广告灯用。
;请你编写出其它花样的广告灯程序!   
;********************************************
;*ATmega16     8MHz     
;*双龙电子   www.sl.com.cn
;*	   teny	2005.11.12
;*********   teny@sl.com.cn   **************
;********************************************

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

.org	$010
reset7:
	ldi r17,$02	;置栈指针,mega16的内建值为$025f
	ldi r16,$5f
	out sph,r17
	out spl,r16


shiyan7:		;pb0-----pa0~pa7跑马灯程序
	ldi r17,$ff
	clr r16
	out ddra,r17	;pa0设置为输出
	out porta,r17
	out ddrb,r16	;pb0设置为输入,且内部上拉
	out portb,r17
	ldi r18,$ff

start7:
	out porta,r18	;熄灭pa口的led灯
	ldi r17,$fe	;循环移位初值 (0b 1111 1110)
	in r16,pinb	;读取pb口的管脚状态
	andi r16,$01	;保留pinb0的状态值
	cpi r16,$00	;为 0 ,说明pb0开关闭合(按下),实行控制
	brne	start7  ;不为 0, pb0开关断开,循环检测.
pmd:
	out porta,r17   ;点亮pa口的一盏led灯
	ldi dt,144	;令dt=144,延时时间定为 200 ms
	rcall	delay	;调用延时程序
	sec		;置位进位位标志 C
	rol r17         ;左移 1 位
	cpi r17,$ff	;为 $ff,说明pa7的led已经点亮
	brne	pmd	;不等,从pa0到pa7依次点亮
	rjmp	start7	;循环检测	
	
;**********************************
;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 + -