俺花个10分钟编制如下的程序来做舵机行程调节器;
用PICBASIC PRO2.46编译的HEX文件,用CodeStudio编程序,看看程序够简单了吧?:em19:
'**************************
'****舵机行程调节器********
'**MCU=12C508A
' GPIO.3=舵机信号输入
' GPIO.2=舵机信号输出
'***************************
'由于12c508a的可用寄存器很少,不能做带小数点的乘法故需要分两步作计算;
' 还有,12C508A在PICBASIC中默认使用内部的4兆时钟,使用PULSIN指令时的分辨率是10微秒,也就是舵机的步进分辨率为100步;
' 在使用其他的中高档批PIC芯片时如果使用20兆时钟,使用PULSIN指令时的分辨率是2微秒,步进分辨率 为500步;
INPUT GPIO.3
OUTPUT GPIO.2
B1 VAR BYTE
B1=0
MAIN:
PULSIN GPIO.3,1,B1
IF B1<95 AND B1>205 THEN B1=150
B1=B1-100 '取出无用的前1毫秒脉冲
B1=B1*5 '@@@@@
b1=b1/2 '@@@@@
b1=b1+50
PAUSE 15 '保证舵机信号间隔
PULSOUT GPIO.2,B1
GOTO MAIN
在有'@@@@@标记的两个系数可以修改,以实现不同的行程量,也可以针对不同品牌的舵机作修改;
还有些可以考虑:
1,用508A剩余的IO作不同品牌舵机的配置;
2,用508A剩余的IO作不同的系数配置;
3,要是不嫌麻烦,还可以做成可以用遥控器修改的,反正这个程序只用了255个字节的程序存储器;
4,要是想要舵机信号脉冲宽度分辨率高一些,呵呵,换个方法编程序就可以实现;
下面是编译后的少些文件HEX:
****************************************************************
:100000002500BA0A3700310917022B0007066B00DA
:1000100022094306B60A22094306B60A2209B60A8D
:1000200037003509070208014306B60AB00917026E
:10003000A00104001B0A1C0AA7024306E803190AD0
:10004000A001B60A1702AB01010C270068000002EC
:1000500057018B0143070008A7024306E803270A5C
:1000600000081A013A000600B60AFF0F5A013A00CA
:100070000600B60A6C002B00FF0CEB010307EC0135
:100080000307B60A030C2800DF0C48093C0A680085
:100090002700E70CE7016802FC0C0307530AE7019D
:1000A00003064F0AE7010400E8034F0A0706580A4F
:1000B00027075C0A00005C0A000868006C002B003F
:1000C000010C670A68006C002B00040C670A04002E
:1000D0002A000C02880043076F0A0B028700040CF9
:1000E0000306010C4306020C4A014307FF080008FF
:1000F0000400000D4307FF0C4A014307FF080008F6
:100100006E006D00100C2F0048036D036E030B0290
:10011000AD000C020307CC03AE000306960A0B02E7
:10012000ED010C020306CC03EE0103046703680330
:10013000EF02840AB60A100C2A0068006700300338
:100140002F030307A90A0B02E7010C020306CC03E5
:10015000E801280327032E032D03EA029F0AB60AAB
:1001600067026802A7024306A8020008C404A404A8
:10017000040000086400FF0C36003A001B0C390034
:100180007A051A0206009A041A0206007F00010C82
:100190002700060C2400080C020907023F001F027A
:1001A00027005F0C620931001F022700CD0C5D099A
:1001B000330011022A0013027809330034000400CE
:1001C000130214014306E60A960C3F00640CBF00BC
:1001D0001F022F007000050C2B006C009B090D0204
:1001E0003F0003043F03320CFF010F0C3A091F02CA
:0E01F00027006800060C2400040C1009C70A42
:021FFE00FE0FD4
:00000001FF
@@@@@@@@@@@@@@@@@@@@@@@@@
拷贝到记事本里另存为*.HEX就可以烧写12C508A了;:em19: :em19:
PICBASIC 的方便之处在于同一个程序可以编译为不同的相近单片机;将GPIO改为PORT*(*=A 或B或C或 D或 E),就可以编译为PIC的其他中高档芯片的HEX;
有哪位相要PICBASIC PRO的,可以到wWW.PIC16.COM上下载,也可以联系俺,不要钱,随便拿,不要那砖头砸俺就可以了;:em26: :em26:
[ 本帖最后由 狐狸 于 2007-2-27 16:51 编辑 ] |