;********************************************
; SL-DIY-02-1 通用伺服电机(舵机)实验
; 通用伺服电机(舵机)来回摆动基本工作原理
; 当单片机信号是1ms正脉冲时,通用伺服电机转向0度位置
; 当单片机信号是1.5ms正脉冲时,通用伺服电机转向-60度位置
; 当单片机信号是2ms正脉冲时,通用伺服电机转向+60度位置
; 注意:不同伺服电机控制时序及转动角度是不同的,最好自已实际测试。
; 不同伺服电机控制速度指标也不同,应按技术说明书研究处理。
;********************************************
;* AT90S8515 8MHz
;* PB0 输出舵机信号
;* 双龙电子 www.sl.com.cn
;* 2002.12.20修改
;********* SLLG@sl.com.cn **************
;********************************************
.include "8515def.inc" ; 器件配制文件, 本实验使用AT90S8515
.def dt = r22 ; 定义dt等于r22
.org $000 ; 程序首地址
rjmp reset4 ; 跳过中断区
.org $010 ; 主程序首地址,注意,不同器件的中断地址范围是不同的! reset4:
ldi r17,$02 ;置堆栈指针,AT90S8515的RAM最大地址为$025F, 设堆栈底为$025F ldi r16,$5f
out sph,r17 ; 高位堆栈sph=$02
out spl,r16 ; 低位堆栈spl=$5f
shiyan4:
ldi r17,$ff
out ddrb,r17 ; pb口方向寄存器设置为输出,1为输出
out portb,r17 ; 设pb口内部上拉
out ddrd,r17 ; pd口方向寄存器设置为输出,1为输出
out portd,r17 ; 设pd口内部上拉
start3: ; 设置舵机摆动周期常数, 即调节节拍常数
LDI R23,$11
LDI R25,$11
;R23=R25=$50摆动周期1S; 如=$30摆动周期0.5S
; 如=20-10摆动周期, 也可理解为调节拍范围
;$8强劲舞曲 ; $18 男儿当自强 ;$11 少年梦
; 可作自唱自演跳舞机器人设计用。
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 与立即数$01比较
BRSH start6 ;大于等于则转移到, 小于顺序执行
rcall de200 ; 调用2ms延时程序
start60: ; 舵机向+60度方向移动
sbi $18,0 ; 置pb.0为1
rcall de20 ;2ms,+60度
cbi $18,0 ; 清pb.0为0
rcall de20 ; 调用2ms,+60度
rcall de18 ; 调用18ms
DEC R25 ;R25-1
CPI R25,$01 ; ;R25 与立即数$01比较
BRSH start60 ;大于等于则转移到, 小于顺序执行
rcall de200 ; 调用20ms
rjmp start3 ;循环检测
de10: ; 1ms延时子程序
ldi dt,21 ;1ms
rcall delay ; 调用通用延时子程序
ret ; 子程序返回
de15: ; 1.5ms延时子程序
ldi dt,26 ;1.5ms
rcall delay ; 调用通用延时子程序
ret ; 子程序返回
de20: ; 2ms延时子程序
ldi dt,28 ;2ms
rcall delay ; 调用通用延时子程序
ret ; 子程序返回
de18: ; 18ms延时子程序
ldi dt,63 ;18ms
rcall delay ; 调用通用延时子程序
ret ; 子程序返回
de185: ; 19ms延时子程序
ldi dt,64 ;18.8ms
rcall delay ; 调用通用延时子程序
ret ; 子程序返回
de19: ; 20ms延时子程序
ldi dt,65 ;19.6ms
rcall delay ; 调用通用延时子程序
ret ; 子程序返回
de200: ;20ms延时子程序
ldi dt,50 ;2ms,DT=100-10无多大变化
rcall delay ; 调用通用延时子程序
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 ; 上条指令执行后Z=0转, Z=1顺执, 需1t/2t
pop dt ; 出栈, 需2t
dec dt ; dt-1,需1t
brne del2 ; 上条指令执行后Z=0转, Z=1顺执, 需1t/2t
pop dt ; 出栈, 需2t
dec dt ; dt-1,需1t
brne del1 ; 上条指令执行后Z=0转, Z=1顺执, 需1t/2t
pop dt ; 出栈, 需2t
ret ; 子程序返回, 需4t
广州市天河双龙电子有限公司 http://WWW.SL.COM.CN
广州双龙:广州天河路561号新赛格电子城331室(510630)
电话:020-87578852、87505012 传真:分机620
北京双龙:北京海淀知春路132号中发大厦616室(100086)
电话:010-82623551、62653785 传真:010-82623550
上海双龙:上海北京东路668号科技京城东搂12H2室(200001)
电话:021-53081501 、53081502 传真:分机213
;********************************************
; SL-DIY-02-1 通用伺服电机(舵机)实验
; 通用伺服电机(舵机)来回摆动基本工作原理
; 当单片机信号是1ms正脉冲时,通用伺服电机转向0度位置
; 当单片机信号是1.5ms正脉冲时,通用伺服电机转向-60度位置
; 当单片机信号是2ms正脉冲时,通用伺服电机转向+60度位置
; 注意:不同伺服电机控制时序及转动角度是不同的,最好自已实际测试。
; 不同伺服电机控制速度指标也不同,应按技术说明书研究处理。
;********************************************
;* AT90S8515 8MHz
;* PB0 输出舵机信号
;* 双龙电子 www.sl.com.cn
;* 2002.12.20修改
;********* SLLG@sl.com.cn **************
;********************************************
.include "8515def.inc" ; 器件配制文件, 本实验使用AT90S8515
.def dt = r22 ; 定义dt等于r22
.org $000 ; 程序首地址
rjmp reset4 ; 跳过中断区
.org $010 ; 主程序首地址,注意,不同器件的中断地址范围是不同的! reset4:
ldi r17,$02 ;置堆栈指针,AT90S8515的RAM最大地址为$025F, 设堆栈底为$025F ldi r16,$5f
out sph,r17 ; 高位堆栈sph=$02
out spl,r16 ; 低位堆栈spl=$5f
shiyan4:
ldi r17,$ff
out ddrb,r17 ; pb口方向寄存器设置为输出,1为输出
out portb,r17 ; 设pb口内部上拉
out ddrd,r17 ; pd口方向寄存器设置为输出,1为输出
out portd,r17 ; 设pd口内部上拉
start3: ; 设置舵机摆动周期常数, 即调节节拍常数
LDI R23,$11
LDI R25,$11
;R23=R25=$50摆动周期1S; 如=$30摆动周期0.5S
; 如=20-10摆动周期, 也可理解为调节拍范围
;$8强劲舞曲 ; $18 男儿当自强 ;$11 少年梦
; 可作自唱自演跳舞机器人设计用。
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 与立即数$01比较
BRSH start6 ;大于等于则转移到, 小于顺序执行
rcall de200 ; 调用2ms延时程序
start60: ; 舵机向+60度方向移动
sbi $18,0 ; 置pb.0为1
rcall de20 ;2ms,+60度
cbi $18,0 ; 清pb.0为0
rcall de20 ; 调用2ms,+60度
rcall de18 ; 调用18ms
DEC R25 ;R25-1
CPI R25,$01 ; ;R25 与立即数$01比较
BRSH start60 ;大于等于则转移到, 小于顺序执行
rcall de200 ; 调用20ms
rjmp start3 ;循环检测
de10: ; 1ms延时子程序
ldi dt,21 ;1ms
rcall delay ; 调用通用延时子程序
ret ; 子程序返回
de15: ; 1.5ms延时子程序
ldi dt,26 ;1.5ms
rcall delay ; 调用通用延时子程序
ret ; 子程序返回
de20: ; 2ms延时子程序
ldi dt,28 ;2ms
rcall delay ; 调用通用延时子程序
ret ; 子程序返回
de18: ; 18ms延时子程序
ldi dt,63 ;18ms
rcall delay ; 调用通用延时子程序
ret ; 子程序返回
de185: ; 19ms延时子程序
ldi dt,64 ;18.8ms
rcall delay ; 调用通用延时子程序
ret ; 子程序返回
de19: ; 20ms延时子程序
ldi dt,65 ;19.6ms
rcall delay ; 调用通用延时子程序
ret ; 子程序返回
de200: ;20ms延时子程序
ldi dt,50 ;2ms,DT=100-10无多大变化
rcall delay ; 调用通用延时子程序
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 ; 上条指令执行后Z=0转, Z=1顺执, 需1t/2t
pop dt ; 出栈, 需2t
dec dt ; dt-1,需1t
brne del2 ; 上条指令执行后Z=0转, Z=1顺执, 需1t/2t
pop dt ; 出栈, 需2t
dec dt ; dt-1,需1t
brne del1 ; 上条指令执行后Z=0转, Z=1顺执, 需1t/2t
pop dt ; 出栈, 需2t
ret ; 子程序返回, 需4t
广州市天河双龙电子有限公司 http://WWW.SL.COM.CN
广州双龙:广州天河路561号新赛格电子城331室(510630)
电话:020-87578852、87505012 传真:分机620
北京双龙:北京海淀知春路132号中发大厦616室(100086)
电话:010-82623551、62653785 传真:010-82623550
上海双龙:上海北京东路668号科技京城东搂12H2室(200001)
电话:021-53081501 、53081502 传真:分机213