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

📄 sldiy16-09.asm

📁 AVR单片机应用开发指南及实例,包含许多实例,挺不错
💻 ASM
字号:

;********************************************
;SL-DIY-08-16   实验九
;I/O端口的又一应用-发声。
;PC.0输出报警声程序! 
;请你修改程序改变报警声音调及快慢。
;PB0开关控制发音
;********************************************
;*ATmega16     8MHz     
;*双龙电子   www.sl.com.cn
;*	   teny	2005.11.12
;*********   teny@sl.com.cn   **************
;********************************************

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

reset09:		;pb0控制报警
	ldi r17,$04	;置栈指针,mega16的内建值为$045f
	ldi r16,$5f
	out sph,r17
	out spl,r16
	
	ldi r17,$ff
	clr r16
	out ddrb,r16	;pb0设置为输入,且内部上拉
	out portb,r17
	out ddrc,r17	;pc口设置为输出
	out portc,r17
	
start09:
	in r16,pinb	;读取pb口的管脚状态
	sbrc r16,0	;pinb0=0 ,进行声音报警
	rjmp	start09	;pinb0=1 ,循环检测

	ldi r17,$50
baojing:
	cbi portc,0	;pc0置 0
	ldi dt,22	;令dt=22,延时时间定为 1 ms
	rcall	delay	;调用延时程序		
	sbi portc,0	;pc1置 1 
	ldi dt,22	;令dt=22,延时时间定为 1 ms
	rcall	delay	;调用延时程序
	dec r17
	brne	baojing
			;声音间隔报警
	ldi dt,144	;令dt=144,延时时间定为 200 ms	
	rcall	delay	;调用延时程序
	
	rjmp	start09	;循环检测

;**********************************
;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 + -