未命名.jpg (820.55 KB, 下載次數(shù): 43)
下載附件
2010-8-6 09:46 上傳
.include "8515def.inc" ; 器件配制文件, 本實驗使用AT90S8515
.def dt = r22 ; 定義dt等于r22
.org $000 ; 程序首地址
rjmp reset4 ; 跳過中斷區(qū)
.org $010 ; 主程序首地址,注意,不同器件的中斷地址范圍是不同的!
reset4:
ldi r17,$02 ;置堆棧指針,AT90S8515的RAM最大地址為$025F, 設(shè)堆棧底為$025F
ldi r16,$5f
out sph,r17 ; 高位堆棧sph=$02
out spl,r16 ; 低位堆棧spl=$5f
shiyan4:
ldi r17,$ff
out ddrb,r17 ; pb口方向寄存器設(shè)置為輸出,1為輸出
out portb,r17 ; 設(shè)pb口內(nèi)部上拉
out ddrd,r17 ; pd口方向寄存器設(shè)置為輸出,1為輸出
out portd,r17 ; 設(shè)pd口內(nèi)部上拉
start3: ; 設(shè)置舵機擺動周期常數(shù), 即調(diào)節(jié)節(jié)拍常數(shù)
LDI R23,$11
LDI R25,$11
;R23=R25=$50擺動周期1S; 如=$30擺動周期0.5S
; 如=20-10擺動周期, 也可理解為調(diào)節(jié)拍范圍
;$8強勁舞曲 ; $18 男兒當自強 ;$11 少年夢
; 可作自唱自演跳舞機器人設(shè)計用。
start6: ; 舵機向-60度方向移動
sbi $18,0 ; 置pb.0為1
rcall de10 ;1ms,-60度
cbi $18,0 ; 清pb.0為0
rcall de10 ;1ms,-60度
rcall de185 ;19ms
DEC R23 ;R23-1
CPI R23,$01 ;R23 與立即數(shù)$01比較
BRSH start6 ;大于等于則轉(zhuǎn)移到, 小于順序執(zhí)行
rcall de200 ; 調(diào)用2ms延時程序
start60: ; 舵機向+60度方向移動
sbi $18,0 ; 置pb.0為1
rcall de20 ;2ms,+60度
cbi $18,0 ; 清pb.0為0
rcall de20 ; 調(diào)用2ms,+60度
rcall de18 ; 調(diào)用18ms
DEC R25 ;R25-1
CPI R25,$01 ; ;R25 與立即數(shù)$01比較
BRSH start60 ;大于等于則轉(zhuǎn)移到, 小于順序執(zhí)行
rcall de200 ; 調(diào)用20ms
rjmp start3 ;循環(huán)檢測
de10: ; 1ms延時子程序
ldi dt,21 ;1ms
rcall delay ; 調(diào)用通用延時子程序
ret ; 子程序返回
de15: ; 1.5ms延時子程序
ldi dt,26 ;1.5ms
rcall delay ; 調(diào)用通用延時子程序
ret ; 子程序返回
de20: ; 2ms延時子程序
ldi dt,28 ;2ms
rcall delay ; 調(diào)用通用延時子程序
ret ; 子程序返回
de18: ; 18ms延時子程序
ldi dt,63 ;18ms
rcall delay ; 調(diào)用通用延時子程序
ret ; 子程序返回
de185: ; 19ms延時子程序
ldi dt,64 ;18.8ms
rcall delay ; 調(diào)用通用延時子程序
ret ; 子程序返回
de19: ; 20ms延時子程序
ldi dt,65 ;19.6ms
rcall delay ; 調(diào)用通用延時子程序
ret ; 子程序返回
de200: ;20ms延時子程序
ldi dt,50 ;2ms,DT=100-10無多大變化
rcall delay ; 調(diào)用通用延時子程序
ret ; 子程序返回
;延時時間對照表
;**********************************
;fos=8MHz
;dt time dt time dt time
;22 1ms 26 1.5ms 29 2ms
;51 10ms 63 18ms 64 18.8ms
;65 19.6ms 144 200ms 197 500ms
;249 1s
;**********************************
delay: ; 通用延時子程, 子程序2級嵌套
push dt ; 進棧,需2t
del1: push dt ; 進棧,需2t
del2: push dt ; 進棧,需2t
del3: dec dt ; dt-1,需1t
brne del3 ; 上條指令執(zhí)行后Z=0轉(zhuǎn), Z=1順執(zhí), 需1t/2t
pop dt ; 出棧, 需2t
dec dt ; dt-1,需1t
brne del2 ; 上條指令執(zhí)行后Z=0轉(zhuǎn), Z=1順執(zhí), 需1t/2t
pop dt ; 出棧, 需2t
dec dt ; dt-1,需1t
brne del1 ; 上條指令執(zhí)行后Z=0轉(zhuǎn), Z=1順執(zhí), 需1t/2t
pop dt ; 出棧, 需2t
ret ; 子程序返回, 需4t |