用P110C制作的四路时间控制器

1.电路工作原理
电路见下图。BCD1~BCD4是共阴极BCD码编码器。其中,BCDl设定J1的工作时间,BCD2没定J2的工作时间,BC,D3设定J3的工作时间,BCD4设定J4的工作时间。P004~P007分别是BCD1~BCD4的选通端。当要选通某个编码器时,该编码器的选通端为低电平,其他编码器的选通端均为高电平。
在断电状态下,通过BCD1~BCD4设定Jl~J4的工作时间。
上电后,PLLOC模块等待起动按钮Kl的接通。起动按钮Kl接通后,p110C模块的P018端输出低电平,继电器J1工作,同时起动内部定时器;当定时器的延迟时间到达BCD1的设定时间时,P018端口输出高电平,继电器Jl断开,P008端输出低电平,继电器J2工作,内部定时器再次起动:当延迟时间到达BCD2的设定时间时,P008端口输出高电平,继电器J2断开,P009端输出低电平,燃电器J3工作,内部定时器再次起动;当延迟时间到达BCD3的设定时间时,P009端口输出高电平,继电器J3断开,P010端输出低电平,继电器j4工作,内部定时器再次起动;当延迟时间到达BCD4的设定时间时,P010端口输出高电平,继电器14断开,程序又从继电器J1工作处开始运行,如此循环。
在工作过程中,只要按下停止按钮K2,时间控制器立刻停止工作,所有继电器均断开。只有再次按下起动按钮时,才可重新从第一步开始工作。
K3~K6分别是BCD1~BCD4的最小时间选择开关。当K.3~K6断开时,最小时间为0.1S接通时最小时间为1s。
2.四路时间控制器程序
程序清单如下:
(1)初始化程序
P018-OUT(设P018为输出模式)
P008=OUT(设P008为输出模式)
P009=OUT(设P009为输出模式)
P010=0UT(设P010为输出模式)
P004=OUT(设P004为输出模式)
P005=OUT(设P005为输出模式)
P006=OUT(设P006为输出模式)
P007=OUT(设P007为输出模式)
POOO=IN:1(设P000为带上拉电阻的输入模式)
PO01=IN:1(设PO01为带上拉电阻的输入模式)
P002=IN:l(设P002为带上拉电阻的输入模式)
P003=IN:1(设P003为带上拉电阻的输入模式)
P011=IN:1f设P011~P016为带上拉电阻的输入模式)
P012=IN:l
P013=IN:l
P014=IN:l
P015=IN:1
P016=IN:l
INT018=1,STO(激活INT018任意电平中断,如“停止”按钮接通就转STO)
(2)主程序
LCALL,BCl(BCD1的设定值存储到R0100中)
LCALL,BC2(BCD2的设定值存储到R0101中)
LCALL,BC3(BCD3的设定值存储到R0102中
)LCALL,BC4(BCD4的设定值存储到R0103中)
LCALL,A01(调起动按钮子程序)
MOLCALL,M1(调Jl延迟工作控制子程序)
LCALL,M2(调J2延迟工作控制子程序)
LCALL,M3(调J3延迟工作控制子程序)
LCALL,M4(调J4延迟工作控制子程序)
LJMP,MO(转MO)
起动按钮子程序//在本程序中通过2次判起动按钮是否接通且中间加lOms延迟的方法,有效防止按键抖动带来的不稳定。
A01P011==1,A01(未按起动按钮转A01)
NOP(延迟10ms)
P011==1,A01(未按起动按钮转A01)
RET(返回)
(3)读BCD1设定值子程序
将BCD1的设定值存储在R0100中。
BClP004=0(P004输出低电平,选通BCDl)
P005=1(P005输出高电平,不选通BCD2)
P006=1(P006输出高电平,不选通BCD3)
P007=1(P007输出高电平,不选通BCD4)R0100=000(R0100清零)
R0100:O=POOO(POOO的值送R0100第0位)
R010O:l=P00l(PO01的值送R0100第1位)
R0100:2=P002(P002的值送R0100第2位)
R0100:3=P003(P003的值送R0100第3位)RET(返回)
(4)读BCD2设定值子程序
将BCD2的设定值存储在R0101中。
BC2P005=0(P005输出低电平,选通BCD2)
P004=1(P004输出高电平,不选通BCDl)
P006=1(P006输出高电平,不选通BCD3)
P007=1(P007输出高电平,不选通BCD4)
R0101=000(R0101清零)
R0101:O=POOO(将POOO的值传送给R0101的第0位)
R0101:1=PO01c将PO01的值传送给R0101的第1位)
R0101:2=P002(将P002的值传送给R0101的第2位)
R0101:3=P003(将P003的值传送给R0101的第3位)
RET(子程序返回)
(5)读BCD3设定值子程序
将BCD3的设定值存储在R0102中。
BC3P006=0(P006输出低电平,选通BCD3)
P005=1(P005输出高电平,不选通BCD2)
P004==1(P004输出高电平,不选通BCDl)
P007=1(P007输出高电平,不选通BCD4)R0102=000(R0102清零)
R0102:O=POOO(PO0O的值送R0102第0位)
R0102:1=PO01(PO01的值送R0102第1位)
R0102:2=P002(P002的值送R0102第2位)
R0102:3=P003(P003的值送R0102第3位)
RET(返回)
(6)读BCD4设定值子程序
将BCD4的设定值存储在R0103中。
BC4P007=0(P007输出低电平,选通BCD4)
P005=1(P005输出高电平,不选通BCD2)
P006=1 (P006输出高电平,不选通BCD3)
P004=1 (P004输出高电平,不选通BCDl)
R0103=OOO(R0103清零)
R0103:O=POOO (POOO的值送R0103第0位)
R0103:1=PO01 (PO01的值送R0103第1位)
R0103:2=P002 (P002的值送R0103第2位)
R0103:3=P003 (P003的值送R0103第3位)
RET(返回)
(7)J1延迟工作控制子程序
Ml P018-0 (Jl工作)
P013-=0,C01(K3接通转C01)
C-ON:2(激活延迟定时器时钟并设最小时钟为1s)
LJMP,Mll隈Mll)
C01 C=ON:1 (激活延迟定时器时钟并设最小时钟为O.ls)
Mll CO=-R0100,M12(激活定时器CO,如果CO延迟到由R0100设定的时间就转M12)
LJMP,Mll (转Mll)M12 P018=1 (Jl不工作)
RET(返回)
(8 )J2延迟工作控制子程序
M2 P008=0 (J2工作)
P014= =0,C02(K4接通转C02)
C=ON:2 (激活延迟定时器时钟并设最小时钟为1秒)
LJMP,M21(转M21)C02
C=ON:1(激活延迟定时器时钟并设最小时钟为0.1秒)
M21 CO==R0101,M22(激活定时器CO,如果CO延迟到由ROl01设定的时间就转M22)
LjMP,M21(转M21)
M22 P008=1(J2不工作)
RET (返回)
(9)J3继电器延迟工作控制子程序
M3P009=0(J3工作)
P015=-0,C03(K5接通转C03)
C=ON:2(激活延迟定时器时钟并设最小时钟为1s)
LJMP,M31(转M31)
C03C,=ON:l(激活延迟定时器时钟并设最小时钟为0.1s)
M31CO==R0102,M32(激活定时器C0,如果CO延迟到由R0102设定的时间就转M32)
LJMP,M31(转M31)
M32P009=1(J3不工作)
RET(返回)
(10)J4延迟工作控制子程序
M4P010=0(J4工作)
P016==0,C04(K6接通转C04)
C=ON:2(激活延迟定时器时钟并设最小时钟为1S)
LJMP,M41(跳转到M41处)
C04C=ON:l(激活延迟定时器时钟并设最小时钟为O.ls)
M41CO==R0103,M42(激活定时器C0,如果C0延迟到由R0103设定的时间就转M42)
LJMP,M41(转M41)
M42P010=1(J4不工作)
RET(返回)
(11)停止按钮中断服务程序
STOP018=1(Jl不工作)
P008=1(J2不工作)
P009=1(J3不工作)
P010=1(J4不工作)
STlP012==0,ST1(未按停止按钮转STl)
NOP(延迟lOms)
P012==0,ST1(未按停止按钮转STl)
RETIO(中断返回)
评论