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

📄 sldiy16-06.asm

📁 AVR单片机应用开发指南及实例,包含许多实例,挺不错
💻 ASM
字号:
;********************************************
;SL-DIY-08-16   实验六
;用1个I/O端口控制8个I/O端口。
;ATmega16的PB.0端口开关(可用接插线接VCC或GND代替)
;控制PA口8个LED灯闪烁; 可作简单的广告灯使用。
;如果ATmega16的PB.0端口开关要控制PA口,PC口,PD口三个口同时闪烁,
;你应该怎样编程序?  
;********************************************
;*ATmega16      8MHz     
;*双龙电子   www.sl.com.cn
;*	   teny	2005.11.11
;*********   teny@sl.com.cn   **************
;********************************************

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

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

shiyan6:
	ldi r17,$ff	;pb0------pa0~pa7整体闪烁
	clr r16
	out ddra,r17	;pa0设置为输出
	out porta,r17
	out ddrb,r16	;pb0设置为输入,且内部上拉
	out portb,r17
	ldi r18,$ff
	clr r19
	ldi dt,197	;令dt=197,延时时间定为 500 ms
start6:
	in r16,pinb	;读取pb口的管脚状态
	andi r16,$01	;保留pinb0的状态值
	cpi r16,$00	;为 0 ,说明pb0开关闭合(按下),实行控制
	brne	start6  ;不为 0, pb0开关断开,循环检测.
	out porta,r19	;点亮pa口的led灯
	rcall	delay	;调用延时程序
	out porta,r18	;熄灭pa口的led灯
	rcall	delay	;调用延时程序
	rjmp	start6	;循环检测
	
;**********************************
;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 + -