主程序区:
LD SM0.1 //首次扫描时调用一次
CALL SBR_1:SBR1
//
LD SM0.0 //一直调用
CALL SBR_0:SBR0
//--------------------------------------------------
子程序区:
子程序0(一直调用,计时用):
LD M0.0
AN T32
TON T32, VW0 //此寄存器的值即为可调的定时时间(0-10MS),我是通过屏来实现的
子程序1(首次扫描调用,初始化程序用):
LD SM0.0
R M0.0, 1
ATCH INT_0:INT0, 1 //在I0.0 的下降沿触发的中断事件
ATCH INT_1:INT1, 21 //定时器T32,CT = PT 中断时触发的中断事件
ENI
//----------------------------------------------------------
中断程序区:
中断0(在I0.0 的下降沿时触发):
LD SM0.0
S M0.0, 1 //检测到I0.0的下降沿,置位M0.0到子程序0开始计时
R Q0.1, 1 //并复位控制输出
中断1(定时器T32,CT = PT 中断时触发的中断事件):
LD SM0.0
S Q0.1, 1 //定时时间到,输出控制
R M0.0, 1 //并复位定时器执行条件(M0.0),为后面再次计时做准备
以上是小弟做的一个0-10MS可调定时器程序,是通过检测交流电的过零点(由I0.0输入),然后延时输出控制振机的振动强度用的(由Q0.1输出)。但在测试过程中感觉还是有点问题,就是输出控制不是很准确。再说这还只是一个小程序,扫描周期是很短的,而实际项目的程序是很长的,扫描周期应该会在10MS以外,这样输出控制的准确性就更难保证了。
希望斑主或是各位给能点意见,或是修改我上面的程序,或是干脆重写一个都行,哪怕是给点思路,也非常感激!!
俺的联系方式:
lyrun1120@163.com QQ:262823396
[ 此帖被lyrun在2008-09-10 08:56重新编辑 ]