转载请注明来源:opencTM
程序我就不多加说明了,简短易懂,有兴趣自己分析吧,第二个程序INT0与INT1分别是接传感器,控制舵机升降挡板的,INT0是挡板复位,INT1是挡板追踪。用法自己研究吧,很简单了。
不过舵机PWM一般在1---2ms之间,脉冲时间一般在20ms左右,但是我发现网上说的0.5---2.5ms也有一定道理,这个需要你自己去研究才会发现,有些舵机具体参数不同也会出现不同情况,具体也不说了。要自己研究去领悟!
程序如下:
;-------------------------------1-------------------------
ORG 0000H
MOV 0FFH,#0FFH;置地址STC89C52
MOV SP,#30H;置堆栈指针到内存 30H
MOV A,#00H;累加器清零
PUSH ACC;保存累加器
NOP;抗干扰
NOP
;判断P1口如果出现低电平则转入子程序
MAIN: JNB P1.0,TAB1
JNB P1.1,TAB2
JNB P1.2,TAB3
JNB P1.3,TAB4
JNB P1.4,TAB5
JNB P1.5,TAB6
JNB P1.6,TAB7
JNB P1.7,TAB8
SJMP MAIN;继续循环
TAB1: MOV A,#110;子程序累加器送入计时初值数
NOP;抗干扰
CPL P0.0;P0.0取反,舵机脉宽控制信号
ACALL DELAY;调延时程序
JB P1.0,MAIN;判断P1.0是否出现高电平,出现返回主程序,否则继续循环
SJMP TAB1+3;直接跳转到TAB1+3,即:忽略累加器传送指令
TAB2: MOV A,#130
NOP
CPL P0.0
ACALL DELAY
JB P1.1,MAIN
SJMP TAB2+3
TAB3: MOV A,#150
NOP
CPL P0.0
ACALL DELAY
JB P1.2,MAIN
SJMP TAB3+3
TAB4: MOV A,#160
NOP
CPL P0.0
ACALL DELAY
JB P1.3,MAIN
SJMP TAB4+3
TAB5: MOV A,#170
NOP
CPL P0.0
ACALL DELAY
JB P1.4,MAIN
SJMP TAB5+3
TAB6: MOV A,#180
NOP
CPL P0.0
ACALL DELAY
JB P1.5,MAIN
SJMP TAB6+3
TAB7: MOV A,#190
NOP
CPL P0.0
ACALL DELAY
JB P1.6,MAIN
SJMP TAB7+3
TAB8: MOV A,#200
NOP
CPL P0.0
ACALL DELAY
JB P1.7,MAIN
SJMP TAB8+3
DELAY: NOP;延时程序
NOP;延时不超过2ms,1ms = 1000us,延时时间 = (5 * A * 2) us
MOV R7,#5
D1: MOV R6,A;累加器初值在TAB中已近给出
DJNZ R6,$
DJNZ R7,D1
RET
END
;-----------------2----------------------------
ORG 0000H
MOV 0FFH,#0FFH
MOV SP,#30H
MOV A,#00H
PUSH ACC
NOP
NOP
MAIN: JNB INT0,TAB1
JNB INT1,TAB2
SJMP MAIN
TAB1: CPL P1.0
ACALL DELAY
CJNE A,#151,EXIT1
CJNE A,#150,NEXT1
SJMP MAIN
NEXT1: NOP
INC A
SJMP MAIN
EXIT1: NOP
MOV A,#250
SJMP MAIN
TAB2: CPL P1.0
ACALL DELAY
CJNE A,#101,EXIT2
CJNE A,#100,NEXT2
SJMP MAIN
NEXT2: NOP
DEC A
SJMP MAIN
EXIT2: NOP
MOV A,#50
SJMP MAIN
DELAY: MOV R7,#5
D1: MOV R6,A
DJNZ R6,$
DJNZ R7,D1
RET
END
;-------------------------------------------------------
第二个程序有小的漏洞,不过在实际中不会影响应用,第二个程序还有一个问题的就是抗干扰不好,这个实验一下就知道了,如果舵机干扰比较大,可能出现传感器定位失灵。
----------------------------------------------------------------------------------------------------------
由于SCMC功耗比较大,我用FPGA嵌入式快速开发的,嵌入式分析也不错。如果有人用SCMC来做的话{zh0}加上5V稳压IC,如果舵机驱动需要5V左右电压,{zh0}在5V稳压IC上加上7.5V左右电压,虽然IC芯片发热,但是影响不大,而且舵机效果会很好!