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

📄 sldiy16-04.asm

📁 AVR单片机应用开发指南及实例,包含许多实例,挺不错
💻 ASM
字号:
;********************************************
;SL-DIY-08-16   实验四
;I/O口LED灯闪烁应用。
;ATmega16的PB.0端口开关(可用接插线接VCC或GND代替)
;控制PA.0端口LED灯闪烁; 
;LED灯闪烁可作灯塔,高建筑物,汽车转弯等警示灯用。
;请你修改程序,改变LED灯闪烁快慢。
;********************************************
;*ATmega16      8MHz     
;*双龙电子   www.sl.com.cn
;*	   teny	2005.11.12
;*********  teny@sl.com.cn   **************
;********************************************

.include "m16def.inc"
.def dt = r22
.org	$000
	rjmp	reset4
	
.org	$010
reset4:
	ldi r17,$04	;置栈指针,mega16的内建值为$045f
	ldi r16,$5f
	out sph,r17
	out spl,r16


shiyan4:
	ldi r17,$ff
	clr r16
	out ddra,r17	;pa口设置为输出
	out porta,r17
	out ddrb,r16	;pb口设置为输入,且内部上拉
	out portb,r17
start4:
	in r16,pinb	;读取pb口的管脚状态
	andi r16,$01	;保留pinb0状态
	cpi r16,$00	;键按下状态为0
	brne	start4	;键没有按下循环检测
	cbi porta,0	;porta0清为0,所接的led灯点亮
	ldi dt,197	;dt=197,调用500ms的延时子程
	rcall	delay
	sbi porta,0	;porta0置为1,所接的led灯熄灭
	ldi dt,197	;dt=197,调用500ms的延时子程
	rcall	delay
	rjmp	start4	;循环检测

;延时时间对照表
;**********************************
;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 + -