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