?? sldiy16-04.asm
字號(hào):
;********************************************
;SL-DIY-08-16 實(shí)驗(yàn)四
;I/O口LED燈閃爍應(yīng)用。
;ATmega16的PB.0端口開關(guān)(可用接插線接VCC或GND代替)
;控制PA.0端口LED燈閃爍;
;LED燈閃爍可作燈塔,高建筑物,汽車轉(zhuǎn)彎等警示燈用。
;請(qǐng)你修改程序,改變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的內(nèi)建值為$045f
ldi r16,$5f
out sph,r17
out spl,r16
shiyan4:
ldi r17,$ff
clr r16
out ddra,r17 ;pa口設(shè)置為輸出
out porta,r17
out ddrb,r16 ;pb口設(shè)置為輸入,且內(nèi)部上拉
out portb,r17
start4:
in r16,pinb ;讀取pb口的管腳狀態(tài)
andi r16,$01 ;保留pinb0狀態(tài)
cpi r16,$00 ;鍵按下狀態(tài)為0
brne start4 ;鍵沒有按下循環(huán)檢測
cbi porta,0 ;porta0清為0,所接的led燈點(diǎn)亮
ldi dt,197 ;dt=197,調(diào)用500ms的延時(shí)子程
rcall delay
sbi porta,0 ;porta0置為1,所接的led燈熄滅
ldi dt,197 ;dt=197,調(diào)用500ms的延時(shí)子程
rcall delay
rjmp start4 ;循環(huán)檢測
;延時(shí)時(shí)間對(duì)照表
;**********************************
;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: ;延時(shí)子程
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
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -