本程序中使用的avr單片機(jī)是m16芯片,可以讓8個(gè)led實(shí)現(xiàn)循環(huán)移位的效果/*
* loopLEDLight.asm
*
* Created: 2014/3/14 9:47:20
* Author: Wujie
*/
.include "m16def.inc"
.def temp1=r20
.def count=r17
.org $0000
rjmp main
.org $002A
main:
ldi r16,high(RAMEND)
out sph,r16
ldi r16,low(RAMEND)
out spl,r16
ser temp1
out ddrc,temp1
out portc,temp1
ldi count,0b01111111
ldi r16,197
loop:
out portc,count
rcall delay
rcall loopdis
rjmp loop
;循環(huán)位移
loopdis:
ldi r21,7 ;r21裝入立即數(shù)7,后面或?qū)ount右移7位
push count ;將count保存起來(lái)后面會(huì)使用
lsl count ;將count左移一位
mov r18,count ;左位移一的立即數(shù)裝入r18
pop count ;還原count
dis: lsr count ;右位移7次count值改變?yōu)橛乙?次的值
dec r21
brne dis
or count,r18 ;左移一次與右移7次進(jìn)行求或 即左循環(huán)一次
ret
delay: push r16
del3: push r16
del2: push r16
del1: dec r16
brne del1
pop r16
dec r16
brne del2
pop r16
dec r16
brne del3
pop r16
ret
/*寄存器與寄存器直接的傳遞使用mov*/