发个舵机反向器的程序
工地上很无聊,顺手编个舵机反向器的程序,简单容易理解;才开始使用PICBASIC的初学者可以参考一下;
流程:1测定输入脉冲宽度---2反向计算(减法)---3输入信号错误保护---4输出反向后信号--5返回1
'***************************************************
'MPU=12F202
'GPIO.3 PPM信号输入
'GPIO.1 PPM信号输出
'***************************************************
INPUT GPIO.3
OUTPUT GPIO.1
B1 VAR BYTE '输入脉冲宽度变量
B2 VAR BYTE '输出脉冲变量
B1=0
B2=0
MAIN:
PULSIN GPIO.3,1,B1 '测量输入脉冲宽度
B2=300-B1 '反相计算
IF B1<100 THEN B2=150 '输入信号小于1毫秒出错保护
IF B1>200 THEN B2=150 '输入信号大于2毫秒出错保护
PAUSE 12
GPIO.1=0
PULSOUT GPIO.1,B2
GOTO MAIN
有一个不容易理解的地方:PAUSE 12;按照书上的例子程序,这里都是PAUSE 18毫秒,这样做在这里就要出错!
这样理解:
1,PULSIN GPIO.3,1,B1 这条指令要占用2毫秒时间;
2,如果PAUSE 时间过长,等到PULSIN GPIO.3,1,B1 开始测量时正脉冲已经开始了甚至已经过了,导致测量结果出错;
3,PULSIN GPIO.3,1,B1 指令的“1”已经指定只对正向脉冲有效,PULSIN 指令只在正向脉冲开始时才开始计数,因此PAUSE时间短一点不会对测量的结果有影响;
PIC12F202只是用了内置的4兆时钟,PULSIN指令的分辨率是10微妙,如果本程序移植到其他使用了外部时钟的PIC上,千万要注意PULSIN指令得到的结果,没准要使用乘法除法来计算结果。
这个程序很容易移植到其他的PIC单片机上,比如12C508等,只要在PICBASIC PRO的程序编制应用程序上选择好MPU型号就可以了;
下面的HEX文件是针对PIC12F202的,拷贝到写字板另存为*.HEX,就可以烧写到12F202里去使用了;
烧写时注意,熔丝配置时,WDT狗关闭,MCLRE不要!
**************************
:100000002500670A3400310914022A0008066A0034
:1000100022094306630A22094306630A2209630A86
:1000200034003509080209014306630A5D09140218
:10003000A00104001B0A1C0AA8024306E903190ACE
:10004000A001630A1402AA01010C28006900000241
:1000500054018A0143070008A8024306E903270A5E
:100060000008170137000600630AFF0F5701370029
:100070000600630A6B002A00FF0CEA010307EB018C
:100080000307630A030C2900DF0C48093C0A6900D6
:100090002800E70CE8016902FC0C0307530AE80199
:1000A00003064F0AE8010400E9034F0A0806580A4C
:1000B00028075C0A00005C0A000868026902A802BE
:1000C0004306A9020008C404A40404000008640054
:1000D000FF0C33003700180C3600770517020600B6
:1000E0003704170206007C007D00010C2800060C76
:1000F0002400080C020908023C002C0C2F001C02F2
:100100008F003D000400640C9C000306890A960CD5
:100110003D000400C90C9C000307900A960C3D00AA
:100120000C0C3A09260406021D0228006900060C80
:080130002400020C1009750AFD
:021FFE00EB0FE7
:00000001FF
|