📄 sldiy16-09.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 + -