не получается включить второй таймер срабатываний по времени на один порт
'---------------------------Тип_микроконтроллера--------------------------------
$regfile = "m8def.dat"
$crystal = 8000000
'############################ Конфигурация_ЖКИ #################################
Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portc.2 , Db5 = Portc.3 , Db6 = Portc.4 , Db7 = Portc.5 , E = Portd.1 , Rs = Portd.0
Cursor Off
Cls
'* * * подключаем библиотеку ds1307
$lib "ds1307clock.lib"
'------------------------------Порты--------------------------------------------
Config Pinc.0 = Input
Config Sda = Portd.3
Config Scl = Portd.2
Config Portb.0 = Output
Config Portb.1 = Output
Config Portb.2 = Output
Config Portb.3 = Output
Config Portb.4 = Output
Config Portb.5 = Output
Config Portb.6 = Output
Config Clock = User
Config Date = Dmy , Separator = .
Config 1wire = Portd.4
Config Adc = Single , Prescaler = 128 , Reference = Avcc
Set Portd.5
Set Portd.6
Set Portd.7
Set Portb.7
Cn Alias Pind.5 'Вниз
Cv Alias Pind.6 'Вверх
Vv Alias Pind.7 'Ввод
M Alias Pinb.7 'Меню
Eater Alias Portb.5 'кормушка
'--------------------------------Константы--------------------------------------
Const Ds1307w = &HD0 ' бит записи
Const Ds1307r = &HD1
'-----------------------------Дополнительные_символы----------------------------
Deflcdchar 0 , 7 , 5 , 7 , 32 , 32 , 32 , 32 , 32 'символ градуса
'------------------------------Переменные---------------------------------------
Dim Weekday As Byte
Dim J1 As Byte
Dim M1 As Byte
Dim D1 As Byte
Dim H1 As Byte
Dim Min1 As Byte
Dim _min_real As Byte
Dim _min_temp As Byte
Dim Aa As Byte
Dim Xp As Byte
Dim Chr_code As Byte
Dim Tmp As Byte
Dim Tz As Integer , Tz1 As Integer
Dim Ee_dtemp As Eram Integer
Dim Ee_temp As Eram Integer
Dim Ee_h_on As Eram Byte
Dim Ee_h_off As Eram Byte
Dim H_on As Byte
Dim H_off As Byte
Dim Ee_air_on As Eram Byte
Dim Ee_air_off As Eram Byte
Dim Air_on As Byte
Dim Air_off As Byte
Dim Air_flag As Bit
Dim T_filter_off As Integer
Dim Light_flag As Bit
Dim T_fil As Byte
Dim I As Byte
Dim B1 As Byte , B2 As Byte
Dim T As Integer , T1 As Integer , Dt As Integer
Dim V As Byte
Dim T_cool As Integer
Dim Ee_cool As Eram Integer
Dim Ee_eater_on As Eram Byte
Dim Ee_eater_time As Eram Byte
Dim Ee_eatr_time As Eram Byte
Dim Eater_on As Byte
Dim Eater_time As Byte
Dim Eat As Bit
Dim Eat_time As Byte
'################################### Процедуры #################################
Declare Sub Enterdatetime
Declare Sub Getkey
Declare Sub Menu
Declare Sub Digit
Declare Sub Crcit
Declare Sub Temperature
Declare Sub Termostat
Declare Sub Eater
'############################ Начальные установки ##############################
Tz = Ee_temp 'чтение заданой температуры из ЕЕПРОМ
If Tz < 20 Or Tz > 30 Then
Tz = 26 ' если считаная температура не в норме то установим 26 градусов
Ee_temp = Tz
End if
Dt = Ee_dtemp
If Dt < 0 Or Tz => 6 Then
Dt = 1
Ee_dtemp = Dt
End If
'##################### Основной цикл программы #################################
Do
Call Temperature
Locate 1 , 1
Lcd Time$ ; " " ; "t= " ; T ; Chr(0)
Locate 2 , 1
Lcd Date$ ; " "
If M = 0 Then 'кнопка входа в меню
Gosub Menu
End If
######################## Условие таймера по времени ############################
Eater_on = Ee_eater_on ' читаем времья включения с ЕЕПРОМ
Eater_time = Ee_eater_time
Eat_time = Eater_on + 1 ' читаем времья выключения с ЕЕПРОМ
If _hour = Eater_on And _sec <= Eater_time And Eat = 0 And _min = 0 Then
Eater = 1
Locate 2 , 11
Lcd "K"
Else
Eater = 0
Locate 2 , 11
Lcd "_"
_hour = Ee_eater_on + 12 , включение через 12 часов ?( нет срабатывания по времени через 12 часов)
End If
If _sec > Eater_time Then
Eat = 1
Else
Eat = 0
End If
'##################### Чтение/запись времени в RTC #############################
Getdatetime:
I2cstart ' Generate start code
I2cwbyte Ds1307w ' send address
I2cwbyte 0 ' start address in 1307
I2cstart ' Generate start code
I2cwbyte Ds1307r ' send address
I2crbyte _sec , Ack
I2crbyte _min , Ack ' MINUTES
I2crbyte _hour , Ack ' Hours
I2crbyte Weekday , Ack ' Day of Week
I2crbyte _day , Ack ' Day of Month
I2crbyte _month , Ack ' Month of Year
I2crbyte _year , Nack ' Year
I2cstop
_sec = Makedec(_sec) : _min = Makedec(_min) : _hour = Makedec(_hour)
_day = Makedec(_day) : _month = Makedec(_month) : _year = Makedec(_year)
Return
Setdate:
_day = Makebcd(_day) : _month = Makebcd(_month) : _year = Makebcd(_year)
I2cstart ' Generate start code
I2cwbyte Ds1307w ' send address
I2cwbyte 4 ' starting address in 1307
I2cwbyte _day ' Send Data to SECONDS
I2cwbyte _month ' MINUTES
I2cwbyte _year ' Hours
I2cstop
Return
Settime:
_sec = Makebcd(_sec) : _min = Makebcd(_min) : _hour = Makebcd(_hour)
I2cstart ' Generate start code
I2cwbyte Ds1307w ' send address
I2cwbyte 0 ' starting address in 1307
I2cwbyte _sec ' Send Data to SECONDS
I2cwbyte _min ' MINUTES
I2cwbyte _hour ' Hours
I2cstop
Return
End
'########################## Процедура чтения температуры #######################
Sub Temperature
1wreset
1wwrite &HCC
1wwrite &H44
Waitms 750
1wreset
1wwrite &HCC
1wwrite &HBE
B1 = 1wread()
B2 = 1wread()
1wreset
T = B1 / 16
T1 = B2 * 16
T = T + T1
End Sub
'########################### Меню ввода данных #################################
'_______________________________Установка часов_________________________________
Sub Enterdatetime
Cls
Aa = 0
Xp = _hour
Do
If Xp > 23 Then Xp = 0
Locate 1 , 1
Lcd "©cїaЅoієa Аacoі"
Locate 2 , 1
Lcd "АacГ " ; Xp ; " "
Getkey
H1 = Xp
Loop Until Aa = 1
'--------------------------------Установка минут--------------------------------
Cls
Aa = 0
Xp = _min
Do
If Xp > 59 Then Xp = 0
Locate 1 , 1
Lcd "©cїaЅoієa Аacoі"
Locate 2 , 1
Lcd "јёЅyїГ " ; Xp ; " "
Getkey
Min1 = Xp
Loop Until Aa = 1
_hour = H1
_min = Min1
_sec = 0
Gosub Settime
'--------------------------------Установка года--------------------------------
Cls
Xp = 13
Aa = 00
Do
If Xp > 50 Then Xp = 13
If Xp < 12 Then Xp = 50
Locate 1 , 1
Lcd "©cїaЅoієa"
Locate 2 , 1
Lcd "ґoг: " ; Xp ; " "
Getkey
J1 = Xp
Loop Until Aa = 1
'--------------------------------Установка месяц--------------------------------
Cls
Aa = 00
Xp = 03
Do
If Xp > 12 Then Xp = 03
If Xp < 01 Then Xp = 12
Locate 1 , 1
Lcd "©cїaЅoієa"
Locate 2 , 1
Lcd "јecЗе: " ; Xp ; " "
Getkey
M1 = Xp
Loop Until Aa = 1
'--------------------------------Установка дня--------------------------------
Cls
Aa = 00
Xp = 02
Do
If Xp > 31 Then Xp = 02
If Xp < 1 Then Xp = 31
Locate 1 , 1
Lcd "©cїaЅoієa"
Locate 2 , 1
Lcd "гeЅД:" ; Xp ; " "
Getkey
D1 = Xp
Loop Until Aa = 1
_year = J1
_month = M1
_day = D1
Gosub Setdate
'--------------------------------Установка термостата---------------------------
Cls
Aa = 0
Xp = Tz
Do
If Xp > 30 Then Xp = 30
If Xp < 20 Then Xp = 20
Locate 1 , 2
Lcd "OІoґpeі"
Locate 2 , 1
Lcd "Ўpaгycoі " ; Xp ; " "
Getkey
Loop Until Aa = 1
Tz = Xp
Ee_temp = Tz
'Gosub Temperature
'--------------------- Утановка включения --------------------------
Cls
Aa = 0
Xp = Ee_eater_on
Do
If Xp > 23 Then Xp = 0
Locate 1 , 2
Lcd "KopјyБєa"
Locate 2 , 1
Lcd "Bє»ЖАeЅёe» " ; " :" ; Xp
Getkey
Loop Until Aa = 1
Ee_eater_on = Xp
'--------------------- Утановка времени работы --------------------------
Cls
Aa = 0
Xp = Ee_eater_time
Do
If Xp > 60 Then Xp = 0
Locate 1 , 2
Lcd "єopјyБєё"
Locate 2 , 1
Lcd "CeєyЅг " ; " :" ; Xp
Getkey
Loop Until Aa = 1
Ee_eater_time = Xp 'пишем времья выключения в ЕЕПРОМ
End Sub
'######################### Меню опроса кнопок ##################################
Sub Getkey()
Waitms 500
If Cv = 0 Then Incr Xp
If Cn = 0 Then Decr Xp
If Vv = 0 Then
Aa = 1
Else
Aa = 0
End If
End Sub
'-------------------------------------------------------------------------------
Sub Menu()
Aa = 0
Xp = 0
Getkey
Enterdatetime
Cls
Lcd " OK !"
End Sub
'####################### Условие роботы термостата #############################
Sub Termostat
Tz = Ee_temp
Dt = Ee_dtemp
Tz1 = Tz - Dt
If T <= Tz1 Then
Heater = 1
Locate 2 , 12
Lcd "H"
End If
If T => Tz Then
Heater = 0
Locate 2 , 12
Lcd "_"
End If
End Subнужно срабатывание второго цикла по времени через 12 часов..
помогите пожалуста!!! я только учусь писать программы.
просьба от модератора:
оформляйте код в теги "code"!
вверху справа, в виде папируса 
Отредактировано Александр Д. (2013-03-03 10:36:35)